From 75b6e4f633b198f1ee7e92ce1fbdb6d33c33e2ca Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Thu, 20 Dec 2018 16:45:40 +0200 Subject: [PATCH] Strip displayname format in Matrix->Telegram non-username mentions. Fixes #138 --- mautrix_telegram/formatter/from_matrix/parser.py | 5 ++--- mautrix_telegram/puppet.py | 15 ++++++++++++--- mautrix_telegram/user.py | 4 ++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/mautrix_telegram/formatter/from_matrix/parser.py b/mautrix_telegram/formatter/from_matrix/parser.py index e53c816b..03f24065 100644 --- a/mautrix_telegram/formatter/from_matrix/parser.py +++ b/mautrix_telegram/formatter/from_matrix/parser.py @@ -31,7 +31,6 @@ from .telegram_message import TelegramMessage, Entity, offset_length_multiply from .html_reader import HTMLNode, read_html - ParsedMessage = Tuple[str, List[TypeMessageEntity]] @@ -155,8 +154,8 @@ class MatrixParser: if user.username: return TelegramMessage(f"@{user.username}").format(Mention) elif user.tgid: - return TelegramMessage(user.displayname or msg.text).format(MentionName, - user_id=user.tgid) + displayname = user.plain_displayname or msg.text + return TelegramMessage(displayname).format(MentionName, user_id=user.tgid) return msg room = cls.room_regex.match(href) diff --git a/mautrix_telegram/puppet.py b/mautrix_telegram/puppet.py index 179e3a81..6708eaa9 100644 --- a/mautrix_telegram/puppet.py +++ b/mautrix_telegram/puppet.py @@ -104,6 +104,16 @@ class Puppet: """ Is True if the puppet is logged in. """ return True + @property + def plain_displayname(self) -> str: + tpl = config["bridge.displayname_template"] + if tpl == "{displayname}": + # Template has no extra stuff, no need to parse. + return self.displayname + regex = re.compile("^" + re.escape(tpl).replace(re.escape("{displayname}"), "(.+?)") + "$") + match = regex.match(self.displayname) + return match.group(1) or self.displayname + # region Custom puppet management def _fresh_intent(self) -> IntentAPI: return (self.az.intent.user(self.custom_mxid, self.access_token) @@ -312,8 +322,7 @@ class Puppet: "first name": info.first_name, "last name": info.last_name, } - preferences = config.get("bridge.displayname_preference", - ["full name", "username", "phone"]) + preferences = config["bridge.displayname_preference"] name = None for preference in preferences: name = data[preference] @@ -327,7 +336,7 @@ class Puppet: if not enable_format: return name - return config.get("bridge.displayname_template", "{displayname} (Telegram)").format( + return config["bridge.displayname_template"].format( displayname=name) async def update_info(self, source: 'AbstractUser', info: User) -> None: diff --git a/mautrix_telegram/user.py b/mautrix_telegram/user.py index 0523ed2b..38e48cb2 100644 --- a/mautrix_telegram/user.py +++ b/mautrix_telegram/user.py @@ -97,6 +97,10 @@ class User(AbstractUser): def displayname(self) -> str: return self.mxid_localpart + @property + def plain_displayname(self) -> str: + return self.displayname + @property def db_contacts(self) -> List[DBContact]: return [self.db.merge(DBContact(user=self.tgid, contact=puppet.id))