From f5296145cdcf0e994a82636eba3dfe49a49fdea0 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Thu, 27 Mar 2025 02:02:08 +0700 Subject: [PATCH] pyrofork: Add support for parsing Reaction as channel Signed-off-by: wulan17 --- pyrogram/methods/messages/send_reaction.py | 4 ++- .../methods/payments/send_paid_reaction.py | 3 ++- pyrogram/types/messages_and_media/message.py | 2 +- .../messages_and_media/message_reactions.py | 5 ++-- .../messages_and_media/message_reactor.py | 27 +++++++++++++++---- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/pyrogram/methods/messages/send_reaction.py b/pyrogram/methods/messages/send_reaction.py index cac2fe1d..e059ef38 100644 --- a/pyrogram/methods/messages/send_reaction.py +++ b/pyrogram/methods/messages/send_reaction.py @@ -109,9 +109,11 @@ class SendReaction: 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: 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: await self.invoke( raw.functions.stories.SendReaction( diff --git a/pyrogram/methods/payments/send_paid_reaction.py b/pyrogram/methods/payments/send_paid_reaction.py index 052ddcbe..3fdb2b84 100644 --- a/pyrogram/methods/payments/send_paid_reaction.py +++ b/pyrogram/methods/payments/send_paid_reaction.py @@ -68,7 +68,8 @@ class SendPaidReaction: ) ) users = {i.id: i for i in r.users} + chats = {i.id: i for i in r.chats} for i in r.updates: if isinstance(i, raw.types.UpdateMessageReactions): - return types.MessageReactions._parse(self, i.reactions, users) + return types.MessageReactions._parse(self, i.reactions, users, chats) diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index 32b430f4..bc3a2fd2 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -1143,7 +1143,7 @@ class Message(Object, Update): 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 - reactions = types.MessageReactions._parse(client, message.reactions, users) + reactions = types.MessageReactions._parse(client, message.reactions, users, chats) if message.via_business_bot_id: sender_business_bot = types.User._parse(client, users.get(message.via_business_bot_id, None)) diff --git a/pyrogram/types/messages_and_media/message_reactions.py b/pyrogram/types/messages_and_media/message_reactions.py index e61bb2ef..2f132a00 100644 --- a/pyrogram/types/messages_and_media/message_reactions.py +++ b/pyrogram/types/messages_and_media/message_reactions.py @@ -51,7 +51,8 @@ class MessageReactions(Object): def _parse( client: "pyrogram.Client", 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"]: if not message_reactions: return None @@ -63,7 +64,7 @@ class MessageReactions(Object): for reaction in message_reactions.results ], top_reactors=[ - types.MessageReactor._parse(client, reactor, users) + types.MessageReactor._parse(client, reactor, users, chats) for reactor in message_reactions.top_reactors ] ) diff --git a/pyrogram/types/messages_and_media/message_reactor.py b/pyrogram/types/messages_and_media/message_reactor.py index 4198ed03..cc597616 100644 --- a/pyrogram/types/messages_and_media/message_reactor.py +++ b/pyrogram/types/messages_and_media/message_reactor.py @@ -42,6 +42,9 @@ class MessageReactor(Object): from_user (:obj:`~pyrogram.types.User`, *optional*): Information about the reactor. + + sender_chat (:obj:`~pyrogram.types.Chat`, *optional*): + Information about the sender chat. """ def __init__( self, @@ -51,7 +54,8 @@ class MessageReactor(Object): is_top: bool = None, is_my: bool = None, is_anonymous: bool = None, - from_user: "types.User" = None + from_user: "types.User" = None, + sender_chat: "types.Chat" = None ): super().__init__(client) @@ -60,26 +64,39 @@ class MessageReactor(Object): self.is_my = is_my self.is_anonymous = is_anonymous self.from_user = from_user + self.sender_chat = sender_chat @staticmethod def _parse( client: "pyrogram.Client", 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"]: if not message_reactor: return None is_anonymous = message_reactor.anonymous from_user = None + sender_chat = None 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( client=client, amount=message_reactor.count, is_top=message_reactor.top, is_my=message_reactor.my, is_anonymous=is_anonymous, - from_user=from_user + from_user=from_user, + sender_chat=sender_chat )