From 64c9759de829db3292780f86e31ce8ae30231f57 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Thu, 9 Jul 2020 19:03:50 +0300 Subject: [PATCH] Update mautrix-python again and fix bugs in accepting invites as puppets --- mautrix_telegram/commands/portal/misc.py | 2 +- mautrix_telegram/matrix.py | 9 +++++---- mautrix_telegram/portal/metadata.py | 13 +------------ requirements.txt | 2 +- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/mautrix_telegram/commands/portal/misc.py b/mautrix_telegram/commands/portal/misc.py index 170eae89..26896094 100644 --- a/mautrix_telegram/commands/portal/misc.py +++ b/mautrix_telegram/commands/portal/misc.py @@ -35,7 +35,7 @@ async def sync_state(evt: CommandEvent) -> EventID: elif not await user_has_power_level(evt.room_id, evt.az.intent, evt.sender, "bridge"): return await evt.reply(f"You do not have the permissions to synchronize this room.") - await portal.sync_matrix_members() + await portal.main_intent.get_joined_members(portal.mxid) await evt.reply("Synchronization complete") diff --git a/mautrix_telegram/matrix.py b/mautrix_telegram/matrix.py index e1f2e7d0..ba712025 100644 --- a/mautrix_telegram/matrix.py +++ b/mautrix_telegram/matrix.py @@ -72,7 +72,7 @@ class MatrixHandler(BaseMatrixHandler): async def handle_puppet_invite(self, room_id: RoomID, puppet: pu.Puppet, inviter: u.User, event_id: EventID) -> None: intent = puppet.default_mxid_intent - self.log.debug(f"{inviter} invited puppet for {puppet.tgid} to {room_id}") + self.log.debug(f"{inviter.mxid} invited puppet for {puppet.tgid} to {room_id}") if not await inviter.is_logged_in(): await intent.error_and_leave( room_id, text="Please log in before inviting Telegram puppets.") @@ -87,11 +87,12 @@ class MatrixHandler(BaseMatrixHandler): await intent.join_room(room_id) return try: - members = await self.az.intent.get_room_members(room_id) + members = await intent.get_room_members(room_id) except MatrixError: - members = [] + self.log.exception(f"Failed to get members after joining {room_id} as {intent.mxid}") + return if self.az.bot_mxid not in members: - if len(members) > 1: + if len(members) > 2: await intent.error_and_leave(room_id, text=None, html=( f"Please invite " f"the bridge bot " diff --git a/mautrix_telegram/portal/metadata.py b/mautrix_telegram/portal/metadata.py index fd5cc295..b50d3f90 100644 --- a/mautrix_telegram/portal/metadata.py +++ b/mautrix_telegram/portal/metadata.py @@ -172,17 +172,6 @@ class PortalMetadata(BasePortal, ABC): elif not self.bot or self.tg_receiver != self.bot.tgid: raise ValueError("Invalid peer type for Telegram user invite") - async def sync_matrix_members(self) -> None: - resp = await self.main_intent.get_room_joined_memberships(self.mxid) - members = resp["joined"] - for mxid, info in members.items(): - member = Member(membership=Membership.JOIN) - if "display_name" in info: - member.displayname = info["display_name"] - if "avatar_url" in info: - member.avatar_url = info["avatar_url"] - self.az.state_store.set_member(self.mxid, mxid, member) - # endregion # region Telegram -> Matrix @@ -231,7 +220,7 @@ class PortalMetadata(BasePortal, ABC): self.save() await self.update_bridge_info() if self.sync_matrix_state: - await self.sync_matrix_members() + await self.main_intent.get_joined_members(self.mxid) puppet = p.Puppet.get_by_custom_mxid(user.mxid) if puppet: try: diff --git a/requirements.txt b/requirements.txt index 127bac9a..381ef58f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,6 @@ ruamel.yaml>=0.15.35,<0.17 python-magic>=0.4,<0.5 commonmark>=0.8,<0.10 aiohttp>=3,<4 -mautrix==0.6.0.beta5 +mautrix==0.6.0.beta6 telethon>=1.13,<1.16 telethon-session-sqlalchemy>=0.2.14,<0.3