fix(backend): profile history gets a row only when a field really changed, partial snapshots keep the known phone and username
This commit is contained in:
1 parent
aa41bbbc74
commit
0c9c848fb1
2 files changed
+53
-22
No files matched your search
@@ -1,4 +1,4 @@
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from pyrogram import Client, raw
|
||||
from pyrogram.types import Chat, User
|
||||
@@ -12,6 +12,11 @@ class ProfileFields:
|
||||
phone: str | None = None
|
||||
photo_unique_id: str | None = None
|
||||
is_deleted_account: bool = False
|
||||
unknown: frozenset[str] = field(default=frozenset(), compare=False)
|
||||
|
||||
|
||||
MIN_UNKNOWN = frozenset({"username", "phone"})
|
||||
CHAT_UNKNOWN = frozenset({"phone", "is_deleted_account"})
|
||||
|
||||
|
||||
def active_username(usernames: list[raw.types.Username]) -> str | None:
|
||||
@@ -35,6 +40,7 @@ async def snapshot_from_user(
|
||||
phone=user.phone_number if user else None,
|
||||
photo_unique_id=photo_unique_id,
|
||||
is_deleted_account=bool(getattr(raw_user, "deleted", False)),
|
||||
unknown=MIN_UNKNOWN if getattr(raw_user, "min", False) else frozenset(),
|
||||
)
|
||||
return fields, photo_file_id, photo_unique_id
|
||||
|
||||
@@ -52,6 +58,7 @@ def snapshot_from_high_level(
|
||||
phone=user.phone_number,
|
||||
photo_unique_id=photo_unique_id,
|
||||
is_deleted_account=bool(user.is_deleted),
|
||||
unknown=MIN_UNKNOWN if user.is_min else frozenset(),
|
||||
)
|
||||
return fields, photo_file_id, photo_unique_id
|
||||
|
||||
@@ -64,8 +71,7 @@ def snapshot_from_chat(chat: Chat) -> tuple[ProfileFields, str | None, str | Non
|
||||
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,
|
||||
unknown=CHAT_UNKNOWN,
|
||||
)
|
||||
return fields, photo_file_id, photo_unique_id
|
||||
Reference in new issue
Block a user