Handle kicking puppets separately. Fixes #191
This commit is contained in:
@@ -196,9 +196,10 @@ class MatrixHandler:
|
|||||||
return
|
return
|
||||||
|
|
||||||
puppet = pu.Puppet.get_by_mxid(user_id)
|
puppet = pu.Puppet.get_by_mxid(user_id)
|
||||||
if sender and puppet:
|
if puppet:
|
||||||
# TODO: Puppet should probably be an AbstractUser
|
if sender:
|
||||||
await portal.leave_matrix(puppet, sender, event_id)
|
await portal.kick_matrix(puppet, sender)
|
||||||
|
return
|
||||||
|
|
||||||
user = u.User.get_by_mxid(user_id, create=False)
|
user = u.User.get_by_mxid(user_id, create=False)
|
||||||
if not user:
|
if not user:
|
||||||
|
|||||||
+19
-10
@@ -792,8 +792,24 @@ class Portal:
|
|||||||
else:
|
else:
|
||||||
await user.client(ReadMessageHistoryRequest(peer=self.peer, max_id=message.tgid))
|
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
|
async def kick_matrix(self, user: Union['u.User', 'p.Puppet'], source: 'u.User') -> None:
|
||||||
) -> 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):
|
if await user.needs_relaybot(self):
|
||||||
async with self.require_send_lock(self.bot.tgid):
|
async with self.require_send_lock(self.bot.tgid):
|
||||||
message = await self._get_state_change_message("leave", user)
|
message = await self._get_state_change_message("leave", user)
|
||||||
@@ -815,14 +831,7 @@ class Portal:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
elif source and source.tgid != user.tgid:
|
elif source and source.tgid != user.tgid:
|
||||||
if self.peer_type == "chat":
|
await self.kick_matrix(user, source)
|
||||||
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))
|
|
||||||
elif self.peer_type == "chat":
|
elif self.peer_type == "chat":
|
||||||
await user.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=InputUserSelf()))
|
await user.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=InputUserSelf()))
|
||||||
elif self.peer_type == "channel":
|
elif self.peer_type == "channel":
|
||||||
|
|||||||
Reference in New Issue
Block a user