@@ -243,6 +243,26 @@ async def handle_unban(
243
243
async def handle_join (self , room_id : RoomID , user_id : UserID , event_id : EventID ) -> None :
244
244
pass
245
245
246
+ async def handle_knock (
247
+ self , room_id : RoomID , user_id : UserID , reason : str , event_id : EventID
248
+ ) -> None :
249
+ pass
250
+
251
+ async def handle_retract_knock (
252
+ self , room_id : RoomID , user_id : UserID , reason : str , event_id : EventID
253
+ ) -> None :
254
+ pass
255
+
256
+ async def handle_reject_knock (
257
+ self , room_id : RoomID , user_id : UserID , sender : UserID , reason : str , event_id : EventID
258
+ ) -> None :
259
+ pass
260
+
261
+ async def handle_accept_knock (
262
+ self , room_id : RoomID , user_id : UserID , sender : UserID , reason : str , event_id : EventID
263
+ ) -> None :
264
+ pass
265
+
246
266
async def handle_member_info_change (
247
267
self ,
248
268
room_id : RoomID ,
@@ -817,7 +837,16 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True
817
837
prev_content = unsigned .prev_content or MemberStateEventContent ()
818
838
prev_membership = prev_content .membership if prev_content else Membership .JOIN
819
839
if evt .content .membership == Membership .INVITE :
820
- await self .int_handle_invite (evt )
840
+ if prev_membership == Membership .KNOCK :
841
+ await self .handle_accept_knock (
842
+ evt .room_id ,
843
+ UserID (evt .state_key ),
844
+ evt .sender ,
845
+ evt .content .reason ,
846
+ evt .event_id ,
847
+ )
848
+ else :
849
+ await self .int_handle_invite (evt )
821
850
elif evt .content .membership == Membership .LEAVE :
822
851
if prev_membership == Membership .BAN :
823
852
await self .handle_unban (
@@ -840,6 +869,20 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True
840
869
evt .content .reason ,
841
870
evt .event_id ,
842
871
)
872
+ elif prev_membership == Membership .KNOCK :
873
+ if evt .sender == evt .state_key :
874
+ await self .handle_retract_knock (
875
+ evt .room_id , UserID (evt .state_key ), evt .content .reason , evt .event_id
876
+ )
877
+ else :
878
+ await self .handle_reject_knock (
879
+ evt .room_id ,
880
+ UserID (evt .state_key ),
881
+ evt .sender ,
882
+ evt .content .reason ,
883
+ evt .event_id ,
884
+ )
885
+
843
886
elif evt .sender == evt .state_key :
844
887
await self .handle_leave (evt .room_id , UserID (evt .state_key ), evt .event_id )
845
888
else :
@@ -865,6 +908,13 @@ async def int_handle_event(self, evt: Event, send_bridge_checkpoint: bool = True
865
908
await self .handle_member_info_change (
866
909
evt .room_id , UserID (evt .state_key ), evt .content , prev_content , evt .event_id
867
910
)
911
+ elif evt .content .membership == Membership .KNOCK :
912
+ await self .handle_knock (
913
+ evt .room_id ,
914
+ UserID (evt .state_key ),
915
+ evt .content .reason ,
916
+ evt .event_id ,
917
+ )
868
918
elif evt .type in (EventType .ROOM_MESSAGE , EventType .STICKER ):
869
919
evt : MessageEvent
870
920
if evt .type != EventType .ROOM_MESSAGE :
0 commit comments