feat: add backfills logic

This commit is contained in:
hh committed 2026-05-29 19:33:57 +02:00
1 parent 4a471df8f1
commit 51093da660
12 files changed
+251 -63

No files matched your search

@@ -0,0 +1,3 @@
from userbot.modules.jobs.handlers import backfill, fetch_media
__all__ = ["backfill", "fetch_media"]
@@ -0,0 +1,33 @@
from userbot.modules.capture import capture_message
from userbot.modules.jobs.context import JobContext
from userbot.modules.jobs.registry import register
from utils.policy.models import CaptureToggles
SAVE_EVERY = 100
@register("backfill")
async def backfill(ctx: JobContext) -> None:
client = ctx.client
if client is None:
return
capture = getattr(client, "capture", None)
if capture is None:
return
chat_id = ctx.job.params["chat_id"]
toggles = CaptureToggles(
messages=True,
media=bool(ctx.job.params.get("media")),
self_destruct_media=False,
)
max_id = (ctx.job.cursor or {}).get("max_id", 0)
processed = ctx.job.progress.get("processed", 0)
kwargs = {"max_id": max_id} if max_id else {}
async for message in client.get_chat_history(chat_id, **kwargs):
await capture_message(client, message, capture, toggles)
processed += 1
if processed % SAVE_EVERY == 0:
next_max = message.id - 1
await ctx.save_cursor({"max_id": next_max})
await ctx.report_progress({"processed": processed, "max_id": next_max})
await ctx.report_progress({"processed": processed, "done": True})
@@ -0,0 +1,23 @@
from userbot.modules.jobs.context import JobContext
from userbot.modules.jobs.registry import register
from userbot.modules.media import capture_media
from utils.policy.models import CaptureToggles
@register("fetch_media")
async def fetch_media(ctx: JobContext) -> None:
client = ctx.client
if client is None:
return
capture = getattr(client, "capture", None)
if capture is None:
return
chat_id = ctx.job.params["chat_id"]
message_id = ctx.job.params["message_id"]
message = await client.get_messages(chat_id, message_id)
if isinstance(message, list):
message = message[0] if message else None
if message is None or message.empty:
return
toggles = CaptureToggles(media=True, self_destruct_media=True)
await capture_media(client, message, capture, chat_id, message_id, toggles)