Handle kicking puppets separately. Fixes #191

This commit is contained in:
Tulir Asokan
2018-11-15 11:57:02 +02:00
parent d514b929b3
commit 82d7e78455
2 changed files with 23 additions and 13 deletions
+4 -3
View File
@@ -196,9 +196,10 @@ class MatrixHandler:
return
puppet = pu.Puppet.get_by_mxid(user_id)
if sender and puppet:
# TODO: Puppet should probably be an AbstractUser
await portal.leave_matrix(puppet, sender, event_id)
if puppet:
if sender:
await portal.kick_matrix(puppet, sender)
return
user = u.User.get_by_mxid(user_id, create=False)
if not user:
+19 -10
View File
@@ -792,8 +792,24 @@ class Portal:
else:
await user.client(ReadMessageHistoryRequest(peer=self.peer, max_id=message.tgid))
async def leave_matrix(self, user: 'u.User', source: 'u.User', event_id: MatrixEventID
) -> None:
async def kick_matrix(self, user: Union['u.User', 'p.Puppet'], source: 'u.User') -> None:
if user.tgid == source.tgid:
return
if await user.needs_relaybot(self):
user = self.bot
if not user:
return
if self.peer_type == "chat":
await source.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=user.tgid))
elif self.peer_type == "channel":
channel = await self.get_input_entity(source)
rights = ChannelBannedRights(datetime.fromtimestamp(0), True)
await source.client(EditBannedRequest(channel=channel,
user_id=user.tgid,
banned_rights=rights))
async def leave_matrix(self, user: 'u.User', source: 'u.User',
event_id: MatrixEventID) -> None:
if await user.needs_relaybot(self):
async with self.require_send_lock(self.bot.tgid):
message = await self._get_state_change_message("leave", user)
@@ -815,14 +831,7 @@ class Portal:
except KeyError:
pass
elif source and source.tgid != user.tgid:
if self.peer_type == "chat":
await source.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=user.tgid))
else:
channel = await self.get_input_entity(source)
rights = ChannelBannedRights(datetime.fromtimestamp(0), True)
await source.client(EditBannedRequest(channel=channel,
user_id=user.tgid,
banned_rights=rights))
await self.kick_matrix(user, source)
elif self.peer_type == "chat":
await user.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=InputUserSelf()))
elif self.peer_type == "channel":