from pyrogram import Client, enums from pyrogram.types import Message from userbot.modules.avatars import capture_avatar from userbot.modules.capture.context import CaptureContext from userbot.modules.capture.message import sender_id from userbot.modules.groups import repository from userbot.modules.raw_json import raw_json async def capture_service( client: Client, message: Message, ctx: CaptureContext ) -> None: if message.service is None or message.chat is None or message.date is None: return chat_id = message.chat.id or 0 actor = sender_id(message) ts = message.date service = message.service if service is enums.MessageServiceType.NEW_CHAT_TITLE: await repository.insert_chat_history( ctx.pool, ctx.account_id, chat_id, message.id, "title", message.new_chat_title, None, actor, ts, raw_json(message), ) elif service is enums.MessageServiceType.NEW_CHAT_PHOTO: photo = message.new_chat_photo unique_id = photo.file_unique_id if photo else None await repository.insert_chat_history( ctx.pool, ctx.account_id, chat_id, message.id, "photo", None, unique_id, actor, ts, raw_json(message), ) if photo is not None and unique_id is not None: await capture_avatar( client, ctx, chat_id, "chat", photo.file_id, unique_id, raw_json(message), ) elif service is enums.MessageServiceType.DELETE_CHAT_PHOTO: await repository.insert_chat_history( ctx.pool, ctx.account_id, chat_id, message.id, "photo_deleted", None, None, actor, ts, raw_json(message), ) elif service is enums.MessageServiceType.NEW_CHAT_MEMBERS: for member in message.new_chat_members or []: await repository.insert_membership( ctx.pool, ctx.account_id, chat_id, message.id, member.id, "join", actor, ts, raw_json(message), ) elif service is enums.MessageServiceType.LEFT_CHAT_MEMBER: member = message.left_chat_member if member is not None: await repository.insert_membership( ctx.pool, ctx.account_id, chat_id, message.id, member.id, "leave", actor, ts, raw_json(message), )