Handle kicking puppets separately. Fixes #191
This commit is contained in:
@@ -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
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user