Strip displayname format in Matrix->Telegram non-username mentions. Fixes #138

This commit is contained in:
Tulir Asokan
2018-12-20 16:45:40 +02:00
parent 1bebdcba89
commit 75b6e4f633
3 changed files with 18 additions and 6 deletions
@@ -31,7 +31,6 @@ from .telegram_message import TelegramMessage, Entity, offset_length_multiply
from .html_reader import HTMLNode, read_html from .html_reader import HTMLNode, read_html
ParsedMessage = Tuple[str, List[TypeMessageEntity]] ParsedMessage = Tuple[str, List[TypeMessageEntity]]
@@ -155,8 +154,8 @@ class MatrixParser:
if user.username: if user.username:
return TelegramMessage(f"@{user.username}").format(Mention) return TelegramMessage(f"@{user.username}").format(Mention)
elif user.tgid: elif user.tgid:
return TelegramMessage(user.displayname or msg.text).format(MentionName, displayname = user.plain_displayname or msg.text
user_id=user.tgid) return TelegramMessage(displayname).format(MentionName, user_id=user.tgid)
return msg return msg
room = cls.room_regex.match(href) room = cls.room_regex.match(href)
+12 -3
View File
@@ -104,6 +104,16 @@ class Puppet:
""" Is True if the puppet is logged in. """ """ Is True if the puppet is logged in. """
return True 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 # region Custom puppet management
def _fresh_intent(self) -> IntentAPI: def _fresh_intent(self) -> IntentAPI:
return (self.az.intent.user(self.custom_mxid, self.access_token) return (self.az.intent.user(self.custom_mxid, self.access_token)
@@ -312,8 +322,7 @@ class Puppet:
"first name": info.first_name, "first name": info.first_name,
"last name": info.last_name, "last name": info.last_name,
} }
preferences = config.get("bridge.displayname_preference", preferences = config["bridge.displayname_preference"]
["full name", "username", "phone"])
name = None name = None
for preference in preferences: for preference in preferences:
name = data[preference] name = data[preference]
@@ -327,7 +336,7 @@ class Puppet:
if not enable_format: if not enable_format:
return name return name
return config.get("bridge.displayname_template", "{displayname} (Telegram)").format( return config["bridge.displayname_template"].format(
displayname=name) displayname=name)
async def update_info(self, source: 'AbstractUser', info: User) -> None: async def update_info(self, source: 'AbstractUser', info: User) -> None:
+4
View File
@@ -97,6 +97,10 @@ class User(AbstractUser):
def displayname(self) -> str: def displayname(self) -> str:
return self.mxid_localpart return self.mxid_localpart
@property
def plain_displayname(self) -> str:
return self.displayname
@property @property
def db_contacts(self) -> List[DBContact]: def db_contacts(self) -> List[DBContact]:
return [self.db.merge(DBContact(user=self.tgid, contact=puppet.id)) return [self.db.merge(DBContact(user=self.tgid, contact=puppet.id))