Convert Telegram room mentions into pills (ref #62)
This commit is contained in:
@@ -20,7 +20,7 @@ import logging
|
||||
from telethon.tl.types import *
|
||||
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 .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:
|
||||
fwd_from = f"<a href='https://matrix.to/#/{user.mxid}'>{user.mxid}</a>"
|
||||
else:
|
||||
puppet = p.Puppet.get(from_id, create=False)
|
||||
puppet = pu.Puppet.get(from_id, create=False)
|
||||
if puppet and puppet.displayname:
|
||||
fwd_from = f"<a href='https://matrix.to/#/{puppet.mxid}'>{puppet.displayname}</a>"
|
||||
else:
|
||||
user = await source.client.get_entity(from_id)
|
||||
if user:
|
||||
fwd_from = p.Puppet.get_displayname(user, format=False)
|
||||
fwd_from = pu.Puppet.get_displayname(user, format=False)
|
||||
else:
|
||||
fwd_from = None
|
||||
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
|
||||
else content["body"])
|
||||
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
|
||||
reply_to_user = f"<a href='https://matrix.to/#/{sender}'>{displayname}</a>"
|
||||
reply_to_msg = (("<a href='https://matrix.to/#/"
|
||||
@@ -159,12 +159,13 @@ def _telegram_entities_to_matrix(text, entities):
|
||||
elif entity_type == MessageEntityMention:
|
||||
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:
|
||||
mxid = user.mxid
|
||||
else:
|
||||
puppet = p.Puppet.find_by_username(username)
|
||||
mxid = puppet.mxid if puppet else None
|
||||
portal = po.Portal.find_by_username(username)
|
||||
mxid = portal.alias or portal.mxid if portal else None
|
||||
|
||||
if mxid:
|
||||
html.append(f"<a href='https://matrix.to/#/{mxid}'>{entity_text}</a>")
|
||||
else:
|
||||
@@ -174,7 +175,7 @@ def _telegram_entities_to_matrix(text, entities):
|
||||
if user:
|
||||
mxid = user.mxid
|
||||
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
|
||||
if mxid:
|
||||
html.append(f"<a href='https://matrix.to/#/{mxid}'>{entity_text}</a>")
|
||||
|
||||
@@ -1125,7 +1125,7 @@ class Portal:
|
||||
return None
|
||||
|
||||
for _, portal in cls.by_tgid.items():
|
||||
if portal.username == username:
|
||||
if portal.username and portal.username.lower() == username.lower():
|
||||
return portal
|
||||
|
||||
portal = DBPortal.query.filter(DBPortal.username == username).one_or_none()
|
||||
|
||||
@@ -174,8 +174,11 @@ class Puppet:
|
||||
|
||||
@classmethod
|
||||
def find_by_username(cls, username):
|
||||
if not username:
|
||||
return None
|
||||
|
||||
for _, puppet in cls.cache.items():
|
||||
if puppet.username == username:
|
||||
if puppet.username and puppet.username.lower() == username.lower():
|
||||
return puppet
|
||||
|
||||
puppet = DBPuppet.query.filter(DBPuppet.username == username).one_or_none()
|
||||
|
||||
@@ -311,8 +311,11 @@ class User(AbstractUser):
|
||||
|
||||
@classmethod
|
||||
def find_by_username(cls, username):
|
||||
if not username:
|
||||
return None
|
||||
|
||||
for _, user in cls.by_tgid.items():
|
||||
if user.username == username:
|
||||
if user.username and user.username.lower() == username.lower():
|
||||
return user
|
||||
|
||||
puppet = DBUser.query.filter(DBUser.tg_username == username).one_or_none()
|
||||
|
||||
Reference in New Issue
Block a user