Compare commits
3
Commits
850d39ad6f
...
dcd6786ca5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcd6786ca5 | ||
|
|
32d58193f3 | ||
|
|
59d0e2c8ad |
No files matched your search
@@ -24,8 +24,9 @@ _MODULES = (
|
||||
read_receipts,
|
||||
transcribed,
|
||||
)
|
||||
_REGISTRY: dict[type, RawHandler] = {
|
||||
update_type: module.handle for module in _MODULES for update_type in module.HANDLES
|
||||
_REGISTRY: dict[type, list[RawHandler]] = {
|
||||
update_type: [module.handle for module in _MODULES if update_type in module.HANDLES]
|
||||
for update_type in {kind for module in _MODULES for kind in module.HANDLES}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +34,7 @@ _REGISTRY: dict[type, RawHandler] = {
|
||||
async def dispatch(
|
||||
client: PyroClient, update: raw.base.Update, users: dict, chats: dict
|
||||
) -> None:
|
||||
handler = _REGISTRY.get(type(update))
|
||||
if handler is not None:
|
||||
for handler in _REGISTRY.get(type(update), ()):
|
||||
await handler(client, update, users, chats)
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
from pyrogram import Client
|
||||
from pyrogram.errors import FileIdInvalid, FileReferenceExpired, FileReferenceInvalid
|
||||
from pyrogram.errors import (
|
||||
ChannelInvalid,
|
||||
ChannelPrivate,
|
||||
FileIdInvalid,
|
||||
FileReferenceExpired,
|
||||
FileReferenceInvalid,
|
||||
PeerIdInvalid,
|
||||
)
|
||||
from pyrogram.types import ChatPhoto
|
||||
|
||||
from userbot.modules.avatars.repository import get_avatar_file, mark_avatar_downloaded
|
||||
@@ -8,10 +15,14 @@ from userbot.modules.jobs.context import JobContext
|
||||
from userbot.modules.jobs.registry import register
|
||||
|
||||
STALE_FILE_ID = (FileIdInvalid, FileReferenceExpired, FileReferenceInvalid)
|
||||
UNKNOWN_OWNER = (PeerIdInvalid, ChannelInvalid, ChannelPrivate)
|
||||
|
||||
|
||||
async def _fresh_file_id(client: Client, owner_id: int, unique_id: str) -> str | None:
|
||||
try:
|
||||
chat = await client.get_chat(owner_id)
|
||||
except UNKNOWN_OWNER:
|
||||
return None
|
||||
photo = chat.photo if chat else None
|
||||
if photo and photo.big_photo_unique_id == unique_id:
|
||||
return photo.big_file_id
|
||||
|
||||
@@ -1,8 +1,23 @@
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from pyrogram.raw.core import TLObject
|
||||
from pyrogram.types import Object
|
||||
from pyrogram.types import Contact, Object
|
||||
|
||||
EMPTY_JSON = "{}"
|
||||
PHONE_KEY = "phone_number"
|
||||
|
||||
|
||||
def _default(obj: Any) -> Any: # noqa: ANN401
|
||||
if isinstance(obj, TLObject):
|
||||
return TLObject.default(obj)
|
||||
data = Object.default(obj)
|
||||
if isinstance(obj, Contact) and isinstance(data, dict) and PHONE_KEY in data:
|
||||
data[PHONE_KEY] = obj.phone_number
|
||||
return data
|
||||
|
||||
|
||||
def raw_json(obj: Object | TLObject | None) -> str:
|
||||
return EMPTY_JSON if obj is None else str(obj)
|
||||
if obj is None:
|
||||
return EMPTY_JSON
|
||||
return json.dumps(obj, indent=4, default=_default, ensure_ascii=False)
|
||||
Reference in new issue
Block a user