From 8726fa5d74730ff5e2ee39385157ecb397d25167 Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Mon, 10 Apr 2023 11:33:48 -0600 Subject: [PATCH] puppet: add contact info to all member events Signed-off-by: Sumner Evans --- mautrix_telegram/__main__.py | 2 ++ mautrix_telegram/puppet.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/mautrix_telegram/__main__.py b/mautrix_telegram/__main__.py index a788b662..fcee1bd0 100644 --- a/mautrix_telegram/__main__.py +++ b/mautrix_telegram/__main__.py @@ -39,6 +39,8 @@ from .abstract_user import AbstractUser # isort: skip class TelegramBridge(Bridge): module = "mautrix_telegram" name = "mautrix-telegram" + beeper_service_name = "telegram" + beeper_network_name = "telegram" command = "python -m mautrix-telegram" description = "A Matrix-Telegram puppeting bridge." repo_url = "https://github.com/mautrix/telegram" diff --git a/mautrix_telegram/puppet.py b/mautrix_telegram/puppet.py index c96920d5..93109c84 100644 --- a/mautrix_telegram/puppet.py +++ b/mautrix_telegram/puppet.py @@ -55,6 +55,7 @@ if TYPE_CHECKING: class Puppet(DBPuppet, BasePuppet): + bridge: TelegramBridge config: Config hs_domain: str mxid_template: SimpleTemplate[TelegramID] @@ -156,6 +157,7 @@ class Puppet(DBPuppet, BasePuppet): @classmethod def init_cls(cls, bridge: "TelegramBridge") -> AsyncIterable[Awaitable[None]]: + cls.bridge = bridge cls.config = bridge.config cls.loop = bridge.loop cls.mx = bridge.matrix @@ -281,6 +283,8 @@ class Puppet(DBPuppet, BasePuppet): if not self.disable_updates: try: + changed = await self._update_contact_info(force=changed) or changed + changed = ( await self.update_displayname(source, info, client_override=client_override) or changed @@ -298,6 +302,36 @@ class Puppet(DBPuppet, BasePuppet): await self.update_portals_meta() await self.save() + async def _update_contact_info(self, force: bool = False) -> bool: + if not self.bridge.homeserver_software.is_hungry: + return False + + if self.contact_info_set and not force: + return False + + try: + identifiers = [] + if self.username: + identifiers.append(f"telegram:{self.username}") + if self.phone: + phone = "+" + self.phone.lstrip("+") + identifiers.append(f"tel:{phone}") + await self.default_mxid_intent.beeper_update_profile( + { + "com.beeper.bridge.identifiers": identifiers, + "com.beeper.bridge.remote_id": str(self.tgid), + "com.beeper.bridge.service": "telegram", + "com.beeper.bridge.network": "telegram", + "com.beeper.bridge.is_bridge_bot": False, + "com.beeper.bridge.is_bot": False, + } + ) + self.contact_info_set = True + except Exception: + self.log.exception("Error updating contact info") + self.contact_info_set = False + return True + async def update_portals_meta(self) -> None: if p.Portal.private_chat_portal_meta != "always" and not self.mx.e2ee: return