Skip to content

Commit 0814d12

Browse files
committed
Fix membership event handling
1 parent e5d12ec commit 0814d12

File tree

4 files changed

+34
-14
lines changed

4 files changed

+34
-14
lines changed

mautrix/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
__version__ = "0.4.0rc4"
1+
__version__ = "0.4.0rc5"
22
__author__ = "Tulir Asokan <[email protected]>"
33
__all__ = ["api", "appservice", "bridge", "client", "errors", "util", "types"]

mautrix/bridge/matrix.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,14 @@ async def handle_kick(self, room_id: RoomID, user_id: UserID, kicked_by: UserID,
107107
event_id: EventID) -> None:
108108
pass
109109

110-
async def handle_raw_leave(self, room_id: RoomID, user_id: UserID, sender: UserID, reason: str,
111-
event_id: EventID) -> None:
112-
pass
113-
114110
async def handle_ban(self, room_id: RoomID, user_id: UserID, banned_by: UserID, reason: str,
115111
event_id: EventID) -> None:
116112
pass
117113

114+
async def handle_unban(self, room_id: RoomID, user_id: UserID, unbanned_by: UserID,
115+
reason: str, event_id: EventID) -> None:
116+
pass
117+
118118
async def handle_join(self, room_id: RoomID, user_id: UserID, event_id: EventID) -> None:
119119
pass
120120

@@ -128,10 +128,18 @@ async def handle_puppet_invite(self, room_id: RoomID, puppet: 'BasePuppet',
128128
invited_by: 'BaseUser', event_id: EventID) -> None:
129129
pass
130130

131-
async def handle_invite(self, room_id: RoomID, user_id: UserID, invited_by: 'BaseUser',
131+
async def handle_invite(self, room_id: RoomID, user_id: UserID, invited_by: UserID,
132132
event_id: EventID) -> None:
133133
pass
134134

135+
async def handle_reject(self, room_id: RoomID, user_id: UserID, reason: str, event_id: EventID
136+
) -> None:
137+
pass
138+
139+
async def handle_disinvite(self, room_id: RoomID, user_id: UserID, disinvited_by: UserID,
140+
reason: str, event_id: EventID) -> None:
141+
pass
142+
135143
async def handle_event(self, evt: Event) -> None:
136144
"""Called by :meth:`int_handle_event` for message events other than m.room.message."""
137145

@@ -280,13 +288,21 @@ async def int_handle_event(self, evt: Event) -> None:
280288
await self.int_handle_invite(evt.room_id, UserID(evt.state_key), evt.sender,
281289
evt.event_id)
282290
elif evt.content.membership == Membership.LEAVE:
283-
await self.handle_raw_leave(evt.room_id, UserID(evt.state_key), evt.sender,
291+
if prev_membership == Membership.BAN:
292+
await self.handle_unban(evt.room_id, UserID(evt.state_key), evt.sender,
284293
evt.content.reason, evt.event_id)
285-
if evt.sender != evt.state_key:
294+
elif prev_membership == Membership.INVITE:
295+
if evt.sender == evt.state_key:
296+
await self.handle_reject(evt.room_id, UserID(evt.state_key),
297+
evt.content.reason, evt.event_id)
298+
else:
299+
await self.handle_disinvite(evt.room_id, UserID(evt.state_key), evt.sender,
300+
evt.content.reason, evt.event_id)
301+
elif evt.sender == evt.state_key:
302+
await self.handle_leave(evt.room_id, UserID(evt.state_key), evt.event_id)
303+
else:
286304
await self.handle_kick(evt.room_id, UserID(evt.state_key), evt.sender,
287305
evt.content.reason, evt.event_id)
288-
else:
289-
await self.handle_leave(evt.room_id, UserID(evt.state_key), evt.event_id)
290306
elif evt.content.membership == Membership.BAN:
291307
await self.handle_ban(evt.room_id, UserID(evt.state_key), evt.sender,
292308
evt.content.reason, evt.event_id)

mautrix/client/client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class InternalEventType(Enum):
4444
JOIN = auto()
4545
PROFILE_CHANGE = auto()
4646
INVITE = auto()
47+
REJECT_INVITE = auto()
4748
DISINVITE = auto()
4849
LEAVE = auto()
4950
KICK = auto()

mautrix/client/dispatcher.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,15 @@ async def handle(self, evt: StateEvent) -> None:
4848
elif evt.content.membership == Membership.INVITE:
4949
self._dispatch(InternalEventType.INVITE, evt)
5050
elif evt.content.membership == Membership.LEAVE:
51-
if evt.state_key == evt.sender:
52-
self._dispatch(InternalEventType.LEAVE, evt)
53-
elif evt.prev_content.membership == Membership.BAN:
51+
if evt.prev_content.membership == Membership.BAN:
5452
self._dispatch(InternalEventType.UNBAN, evt)
5553
elif evt.prev_content.membership == Membership.INVITE:
56-
self._dispatch(InternalEventType.DISINVITE, evt)
54+
if evt.state_key == evt.sender:
55+
self._dispatch(InternalEventType.REJECT_INVITE, evt)
56+
else:
57+
self._dispatch(InternalEventType.DISINVITE, evt)
58+
elif evt.state_key == evt.sender:
59+
self._dispatch(InternalEventType.LEAVE, evt)
5760
else:
5861
self._dispatch(InternalEventType.KICK, evt)
5962
elif evt.content.membership == Membership.BAN:

0 commit comments

Comments
 (0)