fix(userbot): drop stale media sessions and survive download timeouts

This commit is contained in:
hh committed 2026-09-01 21:05:48 +02:00
1 parent cf277c56cf
commit 9c12628304
6 files changed
+83 -24

No files matched your search

@@ -1,10 +1,9 @@
from io import BytesIO
from pyrogram import Client
from pyrogram.errors import FileIdInvalid, FileReferenceExpired, FileReferenceInvalid
from pyrogram.types import Photo
from userbot.modules.avatars.repository import get_avatar_file, mark_avatar_downloaded
from userbot.modules.download import download_bytes
from userbot.modules.jobs.context import JobContext
from userbot.modules.jobs.registry import register
@@ -29,13 +28,12 @@ async def _download(
client: Client, owner_id: int, unique_id: str, file_id: str
) -> bytes | None:
try:
buffer = await client.download_media(file_id, in_memory=True)
return await download_bytes(client, file_id)
except STALE_FILE_ID:
fresh = await _fresh_file_id(client, owner_id, unique_id)
if fresh is None:
return None
buffer = await client.download_media(fresh, in_memory=True)
return buffer.getvalue() if isinstance(buffer, BytesIO) else None
return await download_bytes(client, fresh)
@register("fetch_avatar")
@@ -1,8 +1,7 @@
from io import BytesIO
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
@@ -30,10 +29,9 @@ async def fetch_custom_emoji(ctx: JobContext) -> None:
if not stickers:
return
sticker = stickers[0]
buffer = await client.download_media(sticker.file_id, in_memory=True)
if not isinstance(buffer, BytesIO):
data = await download_bytes(client, sticker.file_id)
if data is None:
return
data = buffer.getvalue()
storage_key = capture.storage.put(data)
await upsert_downloaded(
ctx.pool,