44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
from pyrogram.types import Sticker
|
|
|
|
from userbot.modules.custom_emoji.repository import is_downloaded, upsert_downloaded
|
|
from userbot.modules.download import download_bytes
|
|
from userbot.modules.jobs.context import JobContext
|
|
from userbot.modules.jobs.registry import register
|
|
|
|
|
|
def _kind(sticker: Sticker) -> str:
|
|
if sticker.is_animated:
|
|
return "animated"
|
|
if sticker.is_video:
|
|
return "video"
|
|
return "static"
|
|
|
|
|
|
@register("fetch_custom_emoji")
|
|
async def fetch_custom_emoji(ctx: JobContext) -> None:
|
|
client = ctx.client
|
|
if client is None:
|
|
return
|
|
capture = getattr(client, "capture", None)
|
|
if capture is None:
|
|
return
|
|
custom_emoji_id = int(ctx.job.params["custom_emoji_id"])
|
|
if await is_downloaded(ctx.pool, custom_emoji_id):
|
|
return
|
|
stickers = await client.get_custom_emoji_stickers([str(custom_emoji_id)])
|
|
if not stickers:
|
|
return
|
|
sticker = stickers[0]
|
|
data = await download_bytes(client, sticker.file_id)
|
|
if data is None:
|
|
return
|
|
storage_key = capture.storage.put(data)
|
|
await upsert_downloaded(
|
|
ctx.pool,
|
|
custom_emoji_id,
|
|
storage_key,
|
|
len(data),
|
|
sticker.mime_type,
|
|
_kind(sticker),
|
|
)
|