Convert Telegram room mentions into pills (ref #62)

This commit is contained in:
Tulir Asokan
2018-02-23 16:45:43 +02:00
parent a26f2c2c36
commit 22e4a189eb
4 changed files with 18 additions and 11 deletions
+9 -8
View File
@@ -20,7 +20,7 @@ import logging
from telethon.tl.types import * from telethon.tl.types import *
from mautrix_appservice import MatrixRequestError from mautrix_appservice import MatrixRequestError
from .. import user as u, puppet as p from .. import user as u, puppet as pu, portal as po
from ..db import Message as DBMessage from ..db import Message as DBMessage
from .util import add_surrogates, remove_surrogates from .util import add_surrogates, remove_surrogates
@@ -57,13 +57,13 @@ async def telegram_to_matrix(evt, source, native_replies=False, message_link_in_
if user: if user:
fwd_from = f"<a href='https://matrix.to/#/{user.mxid}'>{user.mxid}</a>" fwd_from = f"<a href='https://matrix.to/#/{user.mxid}'>{user.mxid}</a>"
else: else:
puppet = p.Puppet.get(from_id, create=False) puppet = pu.Puppet.get(from_id, create=False)
if puppet and puppet.displayname: if puppet and puppet.displayname:
fwd_from = f"<a href='https://matrix.to/#/{puppet.mxid}'>{puppet.displayname}</a>" fwd_from = f"<a href='https://matrix.to/#/{puppet.mxid}'>{puppet.displayname}</a>"
else: else:
user = await source.client.get_entity(from_id) user = await source.client.get_entity(from_id)
if user: if user:
fwd_from = p.Puppet.get_displayname(user, format=False) fwd_from = pu.Puppet.get_displayname(user, format=False)
else: else:
fwd_from = None fwd_from = None
if not fwd_from: if not fwd_from:
@@ -92,7 +92,7 @@ async def telegram_to_matrix(evt, source, native_replies=False, message_link_in_
if "formatted_body" in content if "formatted_body" in content
else content["body"]) else content["body"])
sender = event['sender'] sender = event['sender']
puppet = p.Puppet.get_by_mxid(sender, create=False) puppet = pu.Puppet.get_by_mxid(sender, create=False)
displayname = puppet.displayname if puppet else sender displayname = puppet.displayname if puppet else sender
reply_to_user = f"<a href='https://matrix.to/#/{sender}'>{displayname}</a>" reply_to_user = f"<a href='https://matrix.to/#/{sender}'>{displayname}</a>"
reply_to_msg = (("<a href='https://matrix.to/#/" reply_to_msg = (("<a href='https://matrix.to/#/"
@@ -159,12 +159,13 @@ def _telegram_entities_to_matrix(text, entities):
elif entity_type == MessageEntityMention: elif entity_type == MessageEntityMention:
username = entity_text[1:] username = entity_text[1:]
user = u.User.find_by_username(username) user = u.User.find_by_username(username) or pu.Puppet.find_by_username(username)
if user: if user:
mxid = user.mxid mxid = user.mxid
else: else:
puppet = p.Puppet.find_by_username(username) portal = po.Portal.find_by_username(username)
mxid = puppet.mxid if puppet else None mxid = portal.alias or portal.mxid if portal else None
if mxid: if mxid:
html.append(f"<a href='https://matrix.to/#/{mxid}'>{entity_text}</a>") html.append(f"<a href='https://matrix.to/#/{mxid}'>{entity_text}</a>")
else: else:
@@ -174,7 +175,7 @@ def _telegram_entities_to_matrix(text, entities):
if user: if user:
mxid = user.mxid mxid = user.mxid
else: else:
puppet = p.Puppet.get(entity.user_id, create=False) puppet = pu.Puppet.get(entity.user_id, create=False)
mxid = puppet.mxid if puppet else None mxid = puppet.mxid if puppet else None
if mxid: if mxid:
html.append(f"<a href='https://matrix.to/#/{mxid}'>{entity_text}</a>") html.append(f"<a href='https://matrix.to/#/{mxid}'>{entity_text}</a>")
+1 -1
View File
@@ -1125,7 +1125,7 @@ class Portal:
return None return None
for _, portal in cls.by_tgid.items(): for _, portal in cls.by_tgid.items():
if portal.username == username: if portal.username and portal.username.lower() == username.lower():
return portal return portal
portal = DBPortal.query.filter(DBPortal.username == username).one_or_none() portal = DBPortal.query.filter(DBPortal.username == username).one_or_none()
+4 -1
View File
@@ -174,8 +174,11 @@ class Puppet:
@classmethod @classmethod
def find_by_username(cls, username): def find_by_username(cls, username):
if not username:
return None
for _, puppet in cls.cache.items(): for _, puppet in cls.cache.items():
if puppet.username == username: if puppet.username and puppet.username.lower() == username.lower():
return puppet return puppet
puppet = DBPuppet.query.filter(DBPuppet.username == username).one_or_none() puppet = DBPuppet.query.filter(DBPuppet.username == username).one_or_none()
+4 -1
View File
@@ -311,8 +311,11 @@ class User(AbstractUser):
@classmethod @classmethod
def find_by_username(cls, username): def find_by_username(cls, username):
if not username:
return None
for _, user in cls.by_tgid.items(): for _, user in cls.by_tgid.items():
if user.username == username: if user.username and user.username.lower() == username.lower():
return user return user
puppet = DBUser.query.filter(DBUser.tg_username == username).one_or_none() puppet = DBUser.query.filter(DBUser.tg_username == username).one_or_none()