Improve tombstone handling
This commit is contained in:
parent
f0ade0a043
commit
80b65d6a2f
1 changed files with 26 additions and 1 deletions
|
@ -353,8 +353,33 @@ class Client(DBClient):
|
||||||
if not evt.content.replacement_room:
|
if not evt.content.replacement_room:
|
||||||
self.log.info(f"{evt.room_id} tombstoned with no replacement, ignoring")
|
self.log.info(f"{evt.room_id} tombstoned with no replacement, ignoring")
|
||||||
return
|
return
|
||||||
|
is_joined = await self.client.state_store.is_joined(
|
||||||
|
evt.content.replacement_room,
|
||||||
|
self.client.mxid,
|
||||||
|
)
|
||||||
|
if is_joined:
|
||||||
|
self.log.debug(
|
||||||
|
f"Ignoring tombstone from {evt.room_id} to {evt.content.replacement_room} "
|
||||||
|
f"sent by {evt.sender}: already joined to replacement room"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.log.debug(
|
||||||
|
f"Following tombstone from {evt.room_id} to {evt.content.replacement_room} "
|
||||||
|
f"sent by {evt.sender}"
|
||||||
|
)
|
||||||
_, server = self.client.parse_user_id(evt.sender)
|
_, server = self.client.parse_user_id(evt.sender)
|
||||||
await self.client.join_room(evt.content.replacement_room, servers=[server])
|
room_id = await self.client.join_room(evt.content.replacement_room, servers=[server])
|
||||||
|
power_levels = await self.client.get_state_event(room_id, EventType.ROOM_POWER_LEVELS)
|
||||||
|
if power_levels.get_user_level(evt.sender) < power_levels.invite:
|
||||||
|
self.log.warning(
|
||||||
|
f"{evt.room_id} was tombstoned into {room_id},"
|
||||||
|
" but the sender doesn't have invite power levels, leaving..."
|
||||||
|
)
|
||||||
|
await self.client.leave_room(
|
||||||
|
room_id,
|
||||||
|
f"Followed tombstone from {evt.room_id} by {evt.sender},"
|
||||||
|
" but sender doesn't have sufficient power level for invites",
|
||||||
|
)
|
||||||
|
|
||||||
async def _handle_invite(self, evt: StrippedStateEvent) -> None:
|
async def _handle_invite(self, evt: StrippedStateEvent) -> None:
|
||||||
if evt.state_key == self.id and evt.content.membership == Membership.INVITE:
|
if evt.state_key == self.id and evt.content.membership == Membership.INVITE:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue