feat: add backfills logic
This commit is contained in:
@@ -1,33 +1,8 @@
|
||||
from pyrogram.types import Message
|
||||
|
||||
from userbot import PyroClient
|
||||
from userbot.modules.capture import repository
|
||||
from userbot.modules.capture import capture_message
|
||||
from userbot.modules.capture.chat_meta import meta_from_chat
|
||||
from userbot.modules.media import capture_media, self_destruct_ttl
|
||||
|
||||
|
||||
def sender_id(message: Message) -> int | None:
|
||||
if message.from_user is not None:
|
||||
return message.from_user.id
|
||||
if message.sender_chat is not None:
|
||||
return message.sender_chat.id
|
||||
return None
|
||||
|
||||
|
||||
def _callbacks(message: Message) -> list[tuple[int, str | None, bytes | None]]:
|
||||
rows = getattr(message.reply_markup, "inline_keyboard", None)
|
||||
if not rows:
|
||||
return []
|
||||
buttons: list[tuple[int, str | None, bytes | None]] = []
|
||||
position = 0
|
||||
for row in rows:
|
||||
for button in row:
|
||||
data = button.callback_data
|
||||
if data is not None:
|
||||
encoded = data.encode() if isinstance(data, str) else data
|
||||
buttons.append((position, button.text, encoded))
|
||||
position += 1
|
||||
return buttons
|
||||
|
||||
|
||||
@PyroClient.on_message()
|
||||
@@ -35,30 +10,11 @@ async def on_message(client: PyroClient, message: Message) -> None:
|
||||
ctx = client.capture
|
||||
if ctx is None or message.empty or message.chat is None or message.date is None:
|
||||
return
|
||||
chat = message.chat
|
||||
chat_id = chat.id or 0
|
||||
meta = meta_from_chat(chat, ctx.contacts.ids)
|
||||
meta = meta_from_chat(message.chat, ctx.contacts.ids)
|
||||
toggles = ctx.resolve(meta)
|
||||
if not toggles.messages:
|
||||
return
|
||||
await repository.upsert_message(
|
||||
ctx.pool,
|
||||
ctx.account_id,
|
||||
chat_id,
|
||||
message.id,
|
||||
message.date,
|
||||
sender_id(message),
|
||||
message.text or message.caption,
|
||||
str(message),
|
||||
has_media=message.media is not None,
|
||||
is_self_destruct=self_destruct_ttl(message) is not None,
|
||||
)
|
||||
await capture_media(client, message, ctx, chat_id, message.id, toggles)
|
||||
buttons = _callbacks(message)
|
||||
if buttons:
|
||||
await repository.insert_callbacks(
|
||||
ctx.pool, ctx.account_id, chat_id, message.id, buttons
|
||||
)
|
||||
await capture_message(client, message, ctx, toggles)
|
||||
|
||||
|
||||
handlers = on_message.handlers
|
||||
|
||||
Reference in New Issue
Block a user