From f6e3903b45ce06cd54e52075fce87bba81931abc Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Thu, 8 Mar 2018 19:58:49 +0200 Subject: [PATCH] Add command to force set a Matrix power level without affecting Telegram. Fixes #60 --- mautrix_telegram/commands/meta.py | 7 ++++--- mautrix_telegram/commands/portal.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/mautrix_telegram/commands/meta.py b/mautrix_telegram/commands/meta.py index 16505a4e..ca66fdd3 100644 --- a/mautrix_telegram/commands/meta.py +++ b/mautrix_telegram/commands/meta.py @@ -57,7 +57,8 @@ def help(evt): #### Miscellaneous things **search** [_-r|--remote_] <_query_> - Search your contacts or the Telegram servers for users. **sync** [`chats`|`contacts`|`me`] - Synchronize your chat portals, contacts and/or own info. -**ping-bot** - Get info of the message relay Telegram bot. +**ping-bot** - Get info of the message relay Telegram bot. +**set-pl** <_level_> - Set a temporary power level without affecting Telegram. #### Initiating chats **pm** <_identifier_> - Open a private chat with the given Telegram user. The identifier is either @@ -72,10 +73,10 @@ def help(evt): **delete-portal** - Remove all users from the current portal room and forget the portal. Only works for group chats; to delete a private chat portal, simply leave the room. -**unbridge** - Remove puppets from the current portal room and forget the portal. +**unbridge** - Remove puppets from the current portal room and forget the portal. **bridge** [_id_] - Bridge the current Matrix room to the Telegram chat with the given ID. The ID must be the prefixed version that you get with the `/id` - command of the Telegram-side bot. + command of the Telegram-side bot. **group-name** <_name_|`-`> - Change the username of a supergroup/channel. To disable, use a dash (`-`) as the name. **clean-rooms** - Clean up unused portal/management rooms. diff --git a/mautrix_telegram/commands/portal.py b/mautrix_telegram/commands/portal.py index 666baa21..1ca17878 100644 --- a/mautrix_telegram/commands/portal.py +++ b/mautrix_telegram/commands/portal.py @@ -23,6 +23,23 @@ from .. import portal as po from . import command_handler, CommandEvent +@command_handler(needs_admin=True, needs_auth=False, name="set-pl") +async def set_power_level(evt: CommandEvent): + try: + level = int(evt.args[0]) + except KeyError: + return await evt.reply("**Usage:** `$cmdprefix+sp set-power `") + except ValueError: + return await evt.reply("The level must be an integer.") + levels = await evt.az.intent.get_power_levels(evt.room_id) + levels["users"][evt.sender.mxid] = level + try: + await evt.az.intent.set_power_levels(evt.room_id, levels) + except MatrixRequestError: + evt.log.exception("Failed to set power level.") + return await evt.reply("Failed to set power level.") + + @command_handler() async def invite_link(evt: CommandEvent): portal = po.Portal.get_by_mxid(evt.room_id)