pyrofork: Add support for parsing Reaction as channel
Some checks failed
Build-docs / build (push) Has been cancelled
Pyrofork / build (macos-latest, 3.10) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.11) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.12) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.13) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.9) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.10) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.11) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.12) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.13) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.9) (push) Has been cancelled

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2025-03-27 02:02:08 +07:00
parent e020eba68f
commit 50b8d17400
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
5 changed files with 31 additions and 10 deletions

View file

@ -109,9 +109,11 @@ class SendReaction:
add_to_recent=add_to_recent add_to_recent=add_to_recent
) )
) )
users = {i.id: i for i in r.users}
chats = {i.id: i for i in r.chats}
for i in r.updates: for i in r.updates:
if isinstance(i, raw.types.UpdateMessageReactions): if isinstance(i, raw.types.UpdateMessageReactions):
return types.MessageReactions._parse(self, i.reactions) return types.MessageReactions._parse(self, i.reactions, users, chats)
elif story_id is not None: elif story_id is not None:
await self.invoke( await self.invoke(
raw.functions.stories.SendReaction( raw.functions.stories.SendReaction(

View file

@ -68,7 +68,8 @@ class SendPaidReaction:
) )
) )
users = {i.id: i for i in r.users} users = {i.id: i for i in r.users}
chats = {i.id: i for i in r.chats}
for i in r.updates: for i in r.updates:
if isinstance(i, raw.types.UpdateMessageReactions): if isinstance(i, raw.types.UpdateMessageReactions):
return types.MessageReactions._parse(self, i.reactions, users) return types.MessageReactions._parse(self, i.reactions, users, chats)

View file

@ -1143,7 +1143,7 @@ class Message(Object, Update):
from_user = types.User._parse(client, users.get(user_id, None)) from_user = types.User._parse(client, users.get(user_id, None))
sender_chat = types.Chat._parse(client, message, users, chats, is_chat=False) if not from_user else None sender_chat = types.Chat._parse(client, message, users, chats, is_chat=False) if not from_user else None
reactions = types.MessageReactions._parse(client, message.reactions, users) reactions = types.MessageReactions._parse(client, message.reactions, users, chats)
if message.via_business_bot_id: if message.via_business_bot_id:
sender_business_bot = types.User._parse(client, users.get(message.via_business_bot_id, None)) sender_business_bot = types.User._parse(client, users.get(message.via_business_bot_id, None))

View file

@ -51,7 +51,8 @@ class MessageReactions(Object):
def _parse( def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
message_reactions: Optional["raw.base.MessageReactions"] = None, message_reactions: Optional["raw.base.MessageReactions"] = None,
users: Optional[Dict[int, "raw.types.User"]] = None users: Optional[Dict[int, "raw.types.User"]] = None,
chats: Dict[int, "raw.types.Chat"] = None
) -> Optional["MessageReactions"]: ) -> Optional["MessageReactions"]:
if not message_reactions: if not message_reactions:
return None return None
@ -63,7 +64,7 @@ class MessageReactions(Object):
for reaction in message_reactions.results for reaction in message_reactions.results
], ],
top_reactors=[ top_reactors=[
types.MessageReactor._parse(client, reactor, users) types.MessageReactor._parse(client, reactor, users, chats)
for reactor in message_reactions.top_reactors for reactor in message_reactions.top_reactors
] ]
) )

View file

@ -42,6 +42,9 @@ class MessageReactor(Object):
from_user (:obj:`~pyrogram.types.User`, *optional*): from_user (:obj:`~pyrogram.types.User`, *optional*):
Information about the reactor. Information about the reactor.
sender_chat (:obj:`~pyrogram.types.Chat`, *optional*):
Information about the sender chat.
""" """
def __init__( def __init__(
self, self,
@ -51,7 +54,8 @@ class MessageReactor(Object):
is_top: bool = None, is_top: bool = None,
is_my: bool = None, is_my: bool = None,
is_anonymous: bool = None, is_anonymous: bool = None,
from_user: "types.User" = None from_user: "types.User" = None,
sender_chat: "types.Chat" = None
): ):
super().__init__(client) super().__init__(client)
@ -60,26 +64,39 @@ class MessageReactor(Object):
self.is_my = is_my self.is_my = is_my
self.is_anonymous = is_anonymous self.is_anonymous = is_anonymous
self.from_user = from_user self.from_user = from_user
self.sender_chat = sender_chat
@staticmethod @staticmethod
def _parse( def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
message_reactor: Optional["raw.base.MessageReactor"] = None, message_reactor: Optional["raw.base.MessageReactor"] = None,
users: Dict[int, "raw.types.User"] = None users: Dict[int, "raw.types.User"] = None,
chats: Dict[int, "raw.types.Chat"] = None
) -> Optional["MessageReactor"]: ) -> Optional["MessageReactor"]:
if not message_reactor: if not message_reactor:
return None return None
is_anonymous = message_reactor.anonymous is_anonymous = message_reactor.anonymous
from_user = None from_user = None
sender_chat = None
if not is_anonymous: if not is_anonymous:
from_user = types.User._parse(client, users.get(message_reactor.peer_id.user_id)) if isinstance(message_reactor.peer, raw.types.PeerUser):
from_user = types.User._parse(
client,
users.get(message_reactor.peer_id.user_id)
)
elif isinstance(message_reactor.peer, raw.types.PeerChannel):
sender_chat = types.Chat._parse_channel_chat(
client,
chats.get(message_reactor.peer_id.channel_id)
)
return MessageReactor( return MessageReactor(
client=client, client=client,
amount=message_reactor.count, amount=message_reactor.count,
is_top=message_reactor.top, is_top=message_reactor.top,
is_my=message_reactor.my, is_my=message_reactor.my,
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
from_user=from_user from_user=from_user,
sender_chat=sender_chat
) )