Fix avatar changes and outgoing meta change deduplication

Also move the telegram ID -> MXID generation to Puppet.get_mxid_from_id()
This commit is contained in:
Tulir Asokan
2018-02-19 19:52:45 +02:00
parent f926727a8d
commit 0a6130607d
6 changed files with 21 additions and 13 deletions
+1
View File
@@ -37,6 +37,7 @@ class AbstractUser:
self.whitelisted = False
self.client = None
self.tgid = None
self.mxid = None
def _init_client(self):
self.log.debug(f"Initializing client for {self.name}")
+2
View File
@@ -23,6 +23,7 @@ from telethon.tl.functions.channels import GetChannelsRequest
from .abstract_user import AbstractUser
from .db import BotChat
from . import puppet as pu
config = None
@@ -47,6 +48,7 @@ class Bot(AbstractUser):
async def post_login(self):
info = await self.client.get_me()
self.tgid = info.id
self.mxid = pu.Puppet.get_mxid_from_id(self.tgid)
chat_ids = [id for id, type in self.chats.items() if type == "chat"]
response = await self.client(GetChatsRequest(chat_ids))
+2 -4
View File
@@ -19,6 +19,7 @@ import asyncio
from telethon.errors import *
from . import command_handler
from .. import puppet as pu
@command_handler(needs_auth=False)
@@ -37,10 +38,7 @@ async def ping_bot(evt):
if not evt.tgbot:
return await evt.reply("Telegram message relay bot not configured.")
bot_info = await evt.tgbot.client.get_me()
localpart = evt.config.get("bridge.username_template", "telegram_{userid}").format(
userid=bot_info.id)
hs = evt.config["homeserver"]["domain"]
mxid = f"@{localpart}:{hs}"
mxid = pu.Puppet.get_mxid_from_id(bot_info.id)
displayname = bot_info.first_name
return await evt.reply("Telegram message relay bot is active: "
f"[{displayname}](https://matrix.to/#/{mxid}) (ID {bot_info.id})\n\n"
+1 -1
View File
@@ -248,5 +248,5 @@ class MatrixHandler:
elif type == "m.room.power_levels":
await self.handle_power_levels(evt["room_id"], evt["sender"], evt["content"],
evt["prev_content"])
elif type == "m.room.name" or type == "m.room.avatar" or type == "m.room.topic":
elif type in ("m.room.name", "m.room.avatar", "m.room.topic"):
await self.handle_room_meta(type, evt["room_id"], evt["sender"], evt["content"])
+4 -1
View File
@@ -654,7 +654,7 @@ class Portal:
check_dedup = (isinstance(update, (UpdateNewMessage, UpdateNewChannelMessage))
and isinstance(update.message, MessageService))
if check_dedup:
self.is_duplicate_action(update)
self.is_duplicate_action(update.message)
# endregion
# region Telegram chat info updating
@@ -727,6 +727,9 @@ class Portal:
await self.update_info(source, entity)
self.save()
if self.bot and self.bot.mxid in invites:
self.bot.add_chat(self.tgid, self.peer_type)
levels = await self.main_intent.get_power_levels(self.mxid)
levels = self._get_base_power_levels(levels, entity)
already_saved = await self.handle_matrix_power_levels(source, levels["users"], {})
+11 -7
View File
@@ -31,15 +31,14 @@ class Puppet:
db = None
az = None
mxid_regex = None
username_template = None
hs_domain = None
cache = {}
def __init__(self, id=None, username=None, displayname=None, photo_id=None):
self.id = id
self.mxid = self.get_mxid_from_id(self.id)
self.localpart = config.get("bridge.username_template", "telegram_{userid}").format(
userid=self.id)
hs = config["homeserver"]["domain"]
self.mxid = f"@{self.localpart}:{hs}"
self.username = username
self.displayname = displayname
self.photo_id = photo_id
@@ -161,6 +160,10 @@ class Puppet:
return int(match.group(1))
return None
@classmethod
def get_mxid_from_id(cls, id):
return f"@{cls.username_template.format(userid=id)}:{cls.hs_domain}"
@classmethod
def find_by_username(cls, username):
for _, puppet in cls.cache.items():
@@ -177,6 +180,7 @@ class Puppet:
def init(context):
global config
Puppet.az, Puppet.db, config, _, _ = context
localpart = config.get("bridge.username_template", "telegram_{userid}").format(userid="(.+)")
hs = config["homeserver"]["domain"]
Puppet.mxid_regex = re.compile(f"@{localpart}:{hs}")
Puppet.username_template = config.get("bridge.username_template", "telegram_{userid}")
Puppet.hs_domain = config["homeserver"]["domain"]
localpart = Puppet.username_template.format(userid="(.+)")
Puppet.mxid_regex = re.compile(f"@{localpart}:{Puppet.hs_domain}")