From 2182dfc86b99c1b3718b45cf2b93c853d054a2a1 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 1 Feb 2022 13:35:26 +0200 Subject: [PATCH] Update to Telegram API layer 138 --- mautrix_telegram/portal.py | 33 ++++++++++++++++++++------------- requirements.txt | 4 ++-- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index b4fa3db8..9c5d7da9 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -118,8 +118,8 @@ from telethon.tl.types import ( MessageMediaPoll, MessageMediaUnsupported, MessageMediaVenue, + MessagePeerReaction, MessageReactions, - MessageUserReaction, PeerChannel, PeerChat, PeerUser, @@ -2757,31 +2757,33 @@ class Portal(DBPortal, BasePortal): count += 1 return count - def _split_dm_reaction_counts(self, counts: list[ReactionCount]) -> list[MessageUserReaction]: + def _split_dm_reaction_counts(self, counts: list[ReactionCount]) -> list[MessagePeerReaction]: if len(counts) == 1: item = counts[0] if item.count == 2: return [ - MessageUserReaction(reaction=item.reaction, user_id=self.tgid), - MessageUserReaction(reaction=item.reaction, user_id=self.tg_receiver), + MessagePeerReaction(reaction=item.reaction, peer_id=PeerUser(self.tgid)), + MessagePeerReaction( + reaction=item.reaction, peer_id=PeerUser(self.tg_receiver) + ), ] elif item.count == 1: return [ - MessageUserReaction( + MessagePeerReaction( reaction=item.reaction, - user_id=self.tg_receiver if item.chosen else self.tgid, + peer_id=PeerUser(self.tg_receiver if item.chosen else self.tgid), ), ] elif len(counts) == 2: item1, item2 = counts return [ - MessageUserReaction( + MessagePeerReaction( reaction=item1.reaction, - user_id=self.tg_receiver if item1.chosen else self.tgid, + peer_id=PeerUser(self.tg_receiver if item1.chosen else self.tgid), ), - MessageUserReaction( + MessagePeerReaction( reaction=item2.reaction, - user_id=self.tg_receiver if item2.chosen else self.tgid, + peer_id=PeerUser(self.tg_receiver if item2.chosen else self.tgid), ), ] return [] @@ -2816,7 +2818,7 @@ class Portal(DBPortal, BasePortal): return total_count = sum(item.count for item in data.results) - recent_reactions = data.recent_reactons or [] + recent_reactions = data.recent_reactions or [] if not recent_reactions and total_count > 0: if self.peer_type == "user": recent_reactions = self._split_dm_reaction_counts(data.results) @@ -2835,9 +2837,14 @@ class Portal(DBPortal, BasePortal): await self._handle_telegram_reactions_locked(dbm, recent_reactions, total_count) async def _handle_telegram_reactions_locked( - self, msg: DBMessage, reaction_list: list[MessageUserReaction], total_count: int + self, msg: DBMessage, reaction_list: list[MessagePeerReaction], total_count: int ) -> None: - reactions = {reaction.user_id: reaction.reaction for reaction in reaction_list} + reactions = { + reaction.peer_id.user_id: reaction.reaction + for reaction in reaction_list + # TODO allow PeerChannel once channel senders are properly supported + if isinstance(reaction.peer_id, PeerUser) + } is_full = len(reactions) == total_count existing_reactions = await DBReaction.get_all_by_message(msg.mxid, msg.mx_room) diff --git a/requirements.txt b/requirements.txt index 5d2724e3..9800591f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,8 +5,8 @@ aiohttp>=3,<4 yarl>=1,<2 mautrix>=0.14.8,<0.15 #telethon>=1.24,<1.25 -# Fork to make session storage async and update to layer 137 -tulir-telethon==1.25.0a3 +# Fork to make session storage async and update to layer 138 +tulir-telethon==1.25.0a4 asyncpg>=0.20,<0.26 mako>=1,<2 setuptools