feat: web UI chat render, panels, presence + analytics
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
from io import BytesIO
|
||||
|
||||
from pyrogram.types import Sticker
|
||||
|
||||
from userbot.modules.custom_emoji.repository import is_downloaded, upsert_downloaded
|
||||
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]
|
||||
buffer = await client.download_media(sticker.file_id, in_memory=True)
|
||||
if not isinstance(buffer, BytesIO):
|
||||
return
|
||||
data = buffer.getvalue()
|
||||
storage_key = capture.storage.put(data)
|
||||
await upsert_downloaded(
|
||||
ctx.pool,
|
||||
custom_emoji_id,
|
||||
storage_key,
|
||||
len(data),
|
||||
sticker.mime_type,
|
||||
_kind(sticker),
|
||||
)
|
||||
Reference in New Issue
Block a user