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), )