Add join/leave notifications for unauthenticated users. Fixes #81
This commit is contained in:
@@ -112,7 +112,7 @@ class MatrixHandler:
|
||||
# The rest can probably be ignored
|
||||
self.log.debug(f"{inviter} invited {user} to {room}")
|
||||
|
||||
async def handle_join(self, room, user):
|
||||
async def handle_join(self, room, user, event_id):
|
||||
user = await User.get_by_mxid(user).ensure_started()
|
||||
|
||||
portal = Portal.get_by_mxid(room)
|
||||
@@ -130,10 +130,10 @@ class MatrixHandler:
|
||||
return
|
||||
|
||||
self.log.debug(f"{user} joined {room}")
|
||||
if user.logged_in:
|
||||
await portal.join_matrix(user)
|
||||
if user.logged_in or portal.has_bot:
|
||||
await portal.join_matrix(user, event_id)
|
||||
|
||||
async def handle_part(self, room, user, sender):
|
||||
async def handle_part(self, room, user, sender, event_id):
|
||||
self.log.debug(f"{user} left {room}")
|
||||
|
||||
sender = User.get_by_mxid(sender, create=False)
|
||||
@@ -153,8 +153,8 @@ class MatrixHandler:
|
||||
if not user:
|
||||
return
|
||||
await user.ensure_started()
|
||||
if user.logged_in:
|
||||
await portal.leave_matrix(user, sender)
|
||||
if user.logged_in or portal.has_bot:
|
||||
await portal.leave_matrix(user, sender, event_id)
|
||||
|
||||
def is_command(self, message):
|
||||
text = message.get("body", "")
|
||||
@@ -238,9 +238,10 @@ class MatrixHandler:
|
||||
if membership == "invite":
|
||||
await self.handle_invite(evt["room_id"], evt["state_key"], evt["sender"])
|
||||
elif membership == "leave":
|
||||
await self.handle_part(evt["room_id"], evt["state_key"], evt["sender"])
|
||||
await self.handle_part(evt["room_id"], evt["state_key"], evt["sender"],
|
||||
evt["event_id"])
|
||||
elif membership == "join":
|
||||
await self.handle_join(evt["room_id"], evt["state_key"])
|
||||
await self.handle_join(evt["room_id"], evt["state_key"], evt["event_id"])
|
||||
elif type == "m.room.message":
|
||||
await self.handle_message(evt["room_id"], evt["sender"], content, evt["event_id"])
|
||||
elif type == "m.room.redaction":
|
||||
|
||||
@@ -511,7 +511,14 @@ class Portal:
|
||||
file_name = f"matrix_upload{mimetypes.guess_extension(mime)}"
|
||||
return file_name, None if file_name == body else body
|
||||
|
||||
async def leave_matrix(self, user, source):
|
||||
async def leave_matrix(self, user, source, event_id):
|
||||
if not user.logged_in:
|
||||
response = await self.bot.client.send_message_super(
|
||||
self.peer, f"__{user.displayname} left the room.__")
|
||||
space = self.tgid if self.peer_type == "channel" else self.bot.tgid
|
||||
self.is_duplicate(response, (event_id, space))
|
||||
return
|
||||
|
||||
if self.peer_type == "user":
|
||||
await self.main_intent.leave_room(self.mxid)
|
||||
self.delete()
|
||||
@@ -535,7 +542,14 @@ class Portal:
|
||||
channel = await self.get_input_entity(user)
|
||||
await user.client(LeaveChannelRequest(channel=channel))
|
||||
|
||||
async def join_matrix(self, user):
|
||||
async def join_matrix(self, user, event_id):
|
||||
if not user.logged_in:
|
||||
response = await self.bot.client.send_message_super(
|
||||
self.peer, f"__{user.displayname} joined the room.__")
|
||||
space = self.tgid if self.peer_type == "channel" else self.bot.tgid
|
||||
self.is_duplicate(response, (event_id, space))
|
||||
return
|
||||
|
||||
if self.peer_type == "channel":
|
||||
await user.client(JoinChannelRequest(channel=await self.get_input_entity(user)))
|
||||
else:
|
||||
@@ -560,10 +574,10 @@ class Portal:
|
||||
if "format" in message and message["format"] == "org.matrix.custom.html":
|
||||
message, entities = formatter.matrix_to_telegram(message["formatted_body"])
|
||||
return client.send_message(self.peer, message, entities=entities,
|
||||
reply_to=reply_to)
|
||||
reply_to=reply_to)
|
||||
else:
|
||||
return client.send_message(self.peer, message["body"],
|
||||
reply_to=reply_to)
|
||||
reply_to=reply_to)
|
||||
|
||||
async def _handle_matrix_file(self, client, message, reply_to):
|
||||
file = await self.main_intent.download_file(message["url"])
|
||||
|
||||
@@ -46,6 +46,7 @@ class Puppet:
|
||||
self._db_instance = db_instance
|
||||
|
||||
self.intent = self.az.intent.user(self.mxid)
|
||||
self.logged_in = True
|
||||
|
||||
self.cache[id] = self
|
||||
|
||||
|
||||
Reference in New Issue
Block a user