puppet: add contact info to all member events
Signed-off-by: Sumner Evans <sumner@beeper.com>
This commit is contained in:
@@ -39,6 +39,8 @@ from .abstract_user import AbstractUser # isort: skip
|
|||||||
class TelegramBridge(Bridge):
|
class TelegramBridge(Bridge):
|
||||||
module = "mautrix_telegram"
|
module = "mautrix_telegram"
|
||||||
name = "mautrix-telegram"
|
name = "mautrix-telegram"
|
||||||
|
beeper_service_name = "telegram"
|
||||||
|
beeper_network_name = "telegram"
|
||||||
command = "python -m mautrix-telegram"
|
command = "python -m mautrix-telegram"
|
||||||
description = "A Matrix-Telegram puppeting bridge."
|
description = "A Matrix-Telegram puppeting bridge."
|
||||||
repo_url = "https://github.com/mautrix/telegram"
|
repo_url = "https://github.com/mautrix/telegram"
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
|
|
||||||
class Puppet(DBPuppet, BasePuppet):
|
class Puppet(DBPuppet, BasePuppet):
|
||||||
|
bridge: TelegramBridge
|
||||||
config: Config
|
config: Config
|
||||||
hs_domain: str
|
hs_domain: str
|
||||||
mxid_template: SimpleTemplate[TelegramID]
|
mxid_template: SimpleTemplate[TelegramID]
|
||||||
@@ -156,6 +157,7 @@ class Puppet(DBPuppet, BasePuppet):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def init_cls(cls, bridge: "TelegramBridge") -> AsyncIterable[Awaitable[None]]:
|
def init_cls(cls, bridge: "TelegramBridge") -> AsyncIterable[Awaitable[None]]:
|
||||||
|
cls.bridge = bridge
|
||||||
cls.config = bridge.config
|
cls.config = bridge.config
|
||||||
cls.loop = bridge.loop
|
cls.loop = bridge.loop
|
||||||
cls.mx = bridge.matrix
|
cls.mx = bridge.matrix
|
||||||
@@ -281,6 +283,8 @@ class Puppet(DBPuppet, BasePuppet):
|
|||||||
|
|
||||||
if not self.disable_updates:
|
if not self.disable_updates:
|
||||||
try:
|
try:
|
||||||
|
changed = await self._update_contact_info(force=changed) or changed
|
||||||
|
|
||||||
changed = (
|
changed = (
|
||||||
await self.update_displayname(source, info, client_override=client_override)
|
await self.update_displayname(source, info, client_override=client_override)
|
||||||
or changed
|
or changed
|
||||||
@@ -298,6 +302,36 @@ class Puppet(DBPuppet, BasePuppet):
|
|||||||
await self.update_portals_meta()
|
await self.update_portals_meta()
|
||||||
await self.save()
|
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:
|
async def update_portals_meta(self) -> None:
|
||||||
if p.Portal.private_chat_portal_meta != "always" and not self.mx.e2ee:
|
if p.Portal.private_chat_portal_meta != "always" and not self.mx.e2ee:
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user