72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
from dataclasses import dataclass
|
|
|
|
from pyrogram import Client, raw
|
|
from pyrogram.types import Chat, 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
|
|
|
|
|
|
def snapshot_from_high_level(
|
|
user: User,
|
|
) -> tuple[ProfileFields, str | None, str | None]:
|
|
photo = user.photo
|
|
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,
|
|
last_name=user.last_name,
|
|
username=user.username,
|
|
phone=user.phone_number,
|
|
photo_unique_id=photo_unique_id,
|
|
is_deleted_account=bool(user.is_deleted),
|
|
)
|
|
return fields, photo_file_id, photo_unique_id
|
|
|
|
|
|
def snapshot_from_chat(chat: Chat) -> tuple[ProfileFields, str | None, str | None]:
|
|
photo = chat.photo
|
|
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=chat.first_name,
|
|
last_name=chat.last_name,
|
|
username=chat.username,
|
|
phone=None,
|
|
photo_unique_id=photo_unique_id,
|
|
is_deleted_account=False,
|
|
)
|
|
return fields, photo_file_id, photo_unique_id
|