99 lines
2.9 KiB
Python
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),
|
|
)
|