From 22f430c340bb49243ae69cfab6b55297ba1fabdc Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 24 Mar 2018 17:01:09 +0200 Subject: [PATCH] Fix forwarded messages from channels not appearing --- mautrix_telegram/formatter/from_telegram.py | 47 +++++++++++++-------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/mautrix_telegram/formatter/from_telegram.py b/mautrix_telegram/formatter/from_telegram.py index 022d7497..e281b37f 100644 --- a/mautrix_telegram/formatter/from_telegram.py +++ b/mautrix_telegram/formatter/from_telegram.py @@ -28,7 +28,7 @@ from telethon.tl.types import (MessageEntityMention, MessageEntityMentionName, MessageEntityEmail, MessageEntityUrl, MessageEntityTextUrl, MessageEntityBold, MessageEntityItalic, MessageEntityCode, MessageEntityPre, MessageEntityBotCommand, Message, PeerChannel, - MessageEntityHashtag, TypeMessageEntity) + MessageEntityHashtag, TypeMessageEntity, MessageFwdHeader) from mautrix_appservice import MatrixRequestError from mautrix_appservice.intent_api import IntentAPI @@ -60,26 +60,37 @@ def telegram_reply_to_matrix(evt: Message, source: u.User) -> dict: async def _add_forward_header(source, text: str, html: Optional[str], - fwd_from_id: Optional[int]) -> Tuple[str, str]: + fwd_from: MessageFwdHeader) -> Tuple[str, str]: if not html: html = escape(text) - user = u.User.get_by_tgid(fwd_from_id) - if user: - fwd_from = f"{user.mxid}" - else: - puppet = pu.Puppet.get(fwd_from_id, create=False) - if puppet and puppet.displayname: - fwd_from = f"{puppet.displayname}" - else: - user = await source.client.get_entity(fwd_from_id) + fwd_from_html, fwd_from_text = None, None + if fwd_from.from_id: + user = u.User.get_by_tgid(fwd_from.from_id) + if user: + fwd_from_text = user.displayname or user.mxid + fwd_from_html = f"{fwd_from_text}" + + if not fwd_from_text: + puppet = pu.Puppet.get(fwd_from.from_id, create=False) + if puppet and puppet.displayname: + fwd_from_text = puppet.displayname or puppet.mxid + fwd_from_html = f"{fwd_from_text}" + + if not fwd_from_text: + user = await source.client.get_entity(fwd_from.from_id) if user: - fwd_from = f"{pu.Puppet.get_displayname(user, format=False)}" - else: - fwd_from = None - if not fwd_from: - fwd_from = "Unknown user" + fwd_from_text = pu.Puppet.get_displayname(user, format=False) + fwd_from_html = f"{fwd_from_text}" + + if not fwd_from_text: + if fwd_from.from_id: + fwd_from_text = "Unknown user" + else: + fwd_from_text = "Unknown source" + fwd_from_html = f"{fwd_from_text}" + text = f"Forwarded from {fwd_from}:\n{text}" - html = (f"Forwarded message from {fwd_from}
" + html = (f"Forwarded message from {fwd_from_html}
" f"
{html}
") return text, html @@ -169,7 +180,7 @@ async def telegram_to_matrix(evt: Message, source: u.User, main_intent: Optional text = prefix_text + text if evt.fwd_from: - text, html = await _add_forward_header(source, text, html, evt.fwd_from.from_id) + text, html = await _add_forward_header(source, text, html, evt.fwd_from) if evt.reply_to_msg_id: text, html = await _add_reply_header(source, text, html, evt, relates_to, main_intent,