Mark chat as fully read on Telegram if read receipt target is unknown

This commit is contained in:
Tulir Asokan
2021-03-31 16:42:35 +03:00
parent 92fa05cb06
commit 8b73c67836
+13 -5
View File
@@ -112,11 +112,19 @@ class PortalMatrix(BasePortal, ABC):
space = self.tgid if self.peer_type == "channel" else user.tgid
message = DBMessage.get_by_mxid(event_id, self.mxid, space)
if not message:
self.log.debug(f"Dropping Matrix read receipt from {user.mxid}: "
f"target message {event_id} not known")
return
self.log.debug(f"Marking messages up to {message.mxid}/{message.tgid} "
f"as read by {user.mxid}/{user.tgid}")
message = DBMessage.find_last(self.mxid, space)
if not message:
self.log.debug(f"Dropping Matrix read receipt from {user.mxid}: "
f"target message {event_id} not known and last message"
" in chat not found")
return
else:
self.log.debug(f"Matrix read receipt target {event_id} not known, marking "
f"messages up to most recent ({message.mxid}/{message.tgid}) "
f"as read by {user.mxid}/{user.tgid}")
else:
self.log.debug("Handling Matrix read receipt: marking messages up to "
f"{message.mxid}/{message.tgid} as read by {user.mxid}/{user.tgid}")
await user.client.send_read_acknowledge(self.peer, max_id=message.tgid,
clear_mentions=True)