feat: log presence, read receipts, group leaves, links, profiles, stories

This commit is contained in:
h
2026-05-29 22:13:59 +02:00
parent bfd16ab02c
commit bcb94b6474
31 changed files with 1298 additions and 19 deletions
@@ -0,0 +1,39 @@
from dataclasses import dataclass
from pyrogram import Client, raw
from pyrogram.types import User
@dataclass(frozen=True)
class ProfileFields:
first_name: str | None = None
last_name: str | None = None
username: str | None = None
phone: str | None = None
photo_unique_id: str | None = None
is_deleted_account: bool = False
def active_username(usernames: list[raw.types.Username]) -> str | None:
for username in usernames:
if getattr(username, "active", False):
return username.username
return usernames[0].username if usernames else None
def snapshot_from_user(
client: Client, raw_user: raw.types.User
) -> tuple[ProfileFields, str | None, str | None]:
user = User._parse(client, raw_user) # noqa: SLF001
photo = user.photo if user else None
photo_unique_id = photo.big_photo_unique_id if photo else None
photo_file_id = photo.big_file_id if photo else None
fields = ProfileFields(
first_name=user.first_name if user else None,
last_name=user.last_name if user else None,
username=user.username if user else None,
phone=user.phone_number if user else None,
photo_unique_id=photo_unique_id,
is_deleted_account=bool(getattr(raw_user, "deleted", False)),
)
return fields, photo_file_id, photo_unique_id