From 86bda1bb454ca4a10a356d8f2c97d21813d246a9 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 24 Jun 2018 01:46:06 +0300 Subject: [PATCH] Allow disabling state event relaying by setting format to empty string. Fixes #130 --- example-config.yaml | 4 +++- mautrix_telegram/portal.py | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/example-config.yaml b/example-config.yaml index cadd50c8..fc20633a 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -133,10 +133,12 @@ bridge: m.video: "$sender_displayname sent a video: $message" m.location: "$sender_displayname sent a location: $message" - # The format sto use when sending state events to Telegram via the relay bot. + # The formats to use when sending state events to Telegram via the relay bot. # # Variables from `message_formats` that have the `sender_` prefix are available without the prefix. # In name_change events, `$prev_displayname` is the previous displayname. + # + # Set format to an empty string to disable the messages for that event. state_event_formats: join: "$displayname joined the room." leave: "$displayname left the room." diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index 1459b3f4..64afc4b5 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -618,14 +618,17 @@ class Portal: else: return "" - async def _get_state_change_message(self, event, user, arguments={}): + async def _get_state_change_message(self, event, user, arguments=None): tpl = config[f"bridge.state_event_formats.{event}"] + if len(tpl) == 0: + # Empty format means they don't want the message + return None displayname = await self.get_displayname(user) tpl_args = dict(mxid=user.mxid, username=user.mxid_localpart, displayname=displayname) - tpl_args = {**tpl_args, **arguments} + tpl_args = {**tpl_args, **(arguments or {})} message = Template(tpl).safe_substitute(tpl_args) return { "format": "org.matrix.custom.html", @@ -637,6 +640,8 @@ class Portal: message = await self._get_state_change_message( "name_change", user, dict(displayname=displayname, prev_displayname=prev_displayname)) + if not message: + return response = await self.bot.client.send_message( self.peer, message, parse_mode=self._matrix_event_to_entities) @@ -651,6 +656,8 @@ class Portal: if await user.needs_relaybot(self): async with self.require_send_lock(self.bot.tgid): message = await self._get_state_change_message("leave", user) + if not message: + return response = await self.bot.client.send_message( self.peer, message, parse_mode=self._matrix_event_to_entities) @@ -685,6 +692,8 @@ class Portal: if await user.needs_relaybot(self): async with self.require_send_lock(self.bot.tgid): message = await self._get_state_change_message("join", user) + if not message: + return response = await self.bot.client.send_message( self.peer, message, parse_mode=self._matrix_event_to_entities) @@ -705,7 +714,7 @@ class Portal: body = message["formatted_body"] tpl = config["bridge.message_formats"].get(msgtype, - "<$sender_display_name> $message") + "$sender_displayname: $message") displayname = await self.get_displayname(sender) tpl_args = dict(sender_mxid=sender.mxid, sender_username=sender.mxid_localpart,