From 8b73c67836ed33664f07d1e5f5ab6bd2ea540d1a Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 31 Mar 2021 16:42:35 +0300 Subject: [PATCH] Mark chat as fully read on Telegram if read receipt target is unknown --- mautrix_telegram/portal/matrix.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mautrix_telegram/portal/matrix.py b/mautrix_telegram/portal/matrix.py index 64fb5411..d568196f 100644 --- a/mautrix_telegram/portal/matrix.py +++ b/mautrix_telegram/portal/matrix.py @@ -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)