From 7db926b398355b26c1c3ca7d2c1beb816f0a556c Mon Sep 17 00:00:00 2001 From: Malte E Date: Fri, 27 May 2022 09:37:15 +0200 Subject: [PATCH 1/2] add support for knocks --- mautrix/bridge/matrix.py | 47 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/mautrix/bridge/matrix.py b/mautrix/bridge/matrix.py index 16e8593e..5110062f 100644 --- a/mautrix/bridge/matrix.py +++ b/mautrix/bridge/matrix.py @@ -243,6 +243,24 @@ async def handle_unban( async def handle_join(self, room_id: RoomID, user_id: UserID, event_id: EventID) -> None: pass + async def handle_knock(self, room_id: RoomID, user_id: UserID, event_id: EventID) -> None: + pass + + async def handle_retract_knock( + self, room_id: RoomID, user_id: UserID, event_id: EventID + ) -> None: + pass + + async def handle_reject_knock( + self, room_id: RoomID, user_id: UserID, event_id: EventID + ) -> None: + pass + + async def handle_accept_knock( + self, room_id: RoomID, user_id: UserID, event_id: EventID + ) -> None: + pass + async def handle_member_info_change( self, room_id: RoomID, @@ -817,7 +835,12 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True prev_content = unsigned.prev_content or MemberStateEventContent() prev_membership = prev_content.membership if prev_content else Membership.JOIN if evt.content.membership == Membership.INVITE: - await self.int_handle_invite(evt) + if prev_membership == Membership.KNOCK: + await self.handle_accept_knock( + evt.room_id, UserID(evt.state_key), evt.event_id + ) + else: + await self.int_handle_invite(evt) elif evt.content.membership == Membership.LEAVE: if prev_membership == Membership.BAN: await self.handle_unban( @@ -840,6 +863,20 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True evt.content.reason, evt.event_id, ) + elif prev_membership == Membership.KNOCK: + if evt.sender == evt.state_key: + await self.handle_retract_knock( + evt.room_id, UserID(evt.state_key), evt.content.reason, evt.event_id + ) + else: + await self.handle_reject_knock( + evt.room_id, + UserID(evt.state_key), + evt.sender, + evt.content.reason, + evt.event_id, + ) + elif evt.sender == evt.state_key: await self.handle_leave(evt.room_id, UserID(evt.state_key), evt.event_id) else: @@ -865,6 +902,14 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True await self.handle_member_info_change( evt.room_id, UserID(evt.state_key), evt.content, prev_content, evt.event_id ) + elif evt.content.membership == Membership.KNOCK: + await self.handle_knock( + evt.room_id, + UserID(evt.state_key), + evt.sender, + evt.content.reason, + evt.event_id, + ) elif evt.type in (EventType.ROOM_MESSAGE, EventType.STICKER): evt: MessageEvent if evt.type != EventType.ROOM_MESSAGE: From e09d3cdd3f14f467c75beb6a0d39f1d57ad6c268 Mon Sep 17 00:00:00 2001 From: Malte E Date: Thu, 2 Jun 2022 19:29:05 +0200 Subject: [PATCH 2/2] comments by tulir --- mautrix/bridge/matrix.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/mautrix/bridge/matrix.py b/mautrix/bridge/matrix.py index 5110062f..84c2bf1b 100644 --- a/mautrix/bridge/matrix.py +++ b/mautrix/bridge/matrix.py @@ -243,21 +243,23 @@ async def handle_unban( async def handle_join(self, room_id: RoomID, user_id: UserID, event_id: EventID) -> None: pass - async def handle_knock(self, room_id: RoomID, user_id: UserID, event_id: EventID) -> None: + async def handle_knock( + self, room_id: RoomID, user_id: UserID, reason: str, event_id: EventID + ) -> None: pass async def handle_retract_knock( - self, room_id: RoomID, user_id: UserID, event_id: EventID + self, room_id: RoomID, user_id: UserID, reason: str, event_id: EventID ) -> None: pass async def handle_reject_knock( - self, room_id: RoomID, user_id: UserID, event_id: EventID + self, room_id: RoomID, user_id: UserID, sender: UserID, reason: str, event_id: EventID ) -> None: pass async def handle_accept_knock( - self, room_id: RoomID, user_id: UserID, event_id: EventID + self, room_id: RoomID, user_id: UserID, sender: UserID, reason: str, event_id: EventID ) -> None: pass @@ -837,7 +839,11 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True if evt.content.membership == Membership.INVITE: if prev_membership == Membership.KNOCK: await self.handle_accept_knock( - evt.room_id, UserID(evt.state_key), evt.event_id + evt.room_id, + UserID(evt.state_key), + evt.sender, + evt.content.reason, + evt.event_id, ) else: await self.int_handle_invite(evt) @@ -906,7 +912,6 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True await self.handle_knock( evt.room_id, UserID(evt.state_key), - evt.sender, evt.content.reason, evt.event_id, )