Files
beavergram/backend/src/userbot/modules/groups/service.py
T

99 lines
2.9 KiB
Python

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),
)