diff --git a/mautrix_telegram/commands/telegram/misc.py b/mautrix_telegram/commands/telegram/misc.py index 22b9b445..976fdf17 100644 --- a/mautrix_telegram/commands/telegram/misc.py +++ b/mautrix_telegram/commands/telegram/misc.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from typing import List, Optional, Tuple, cast -import logging import codecs import base64 import re @@ -119,21 +118,21 @@ async def pm(evt: CommandEvent) -> EventID: f"{pu.Puppet.get_displayname(user, False)}") -async def _join(evt: CommandEvent, arg: str) -> Tuple[Optional[TypeUpdates], Optional[EventID]]: - if arg.startswith("joinchat/"): - invite_hash = arg[len("joinchat/"):] +async def _join(evt: CommandEvent, identifier: str, link_type: str + ) -> Tuple[Optional[TypeUpdates], Optional[EventID]]: + if link_type == "joinchat": try: - await evt.sender.client(CheckChatInviteRequest(invite_hash)) + await evt.sender.client(CheckChatInviteRequest(identifier)) except InviteHashInvalidError: return None, await evt.reply("Invalid invite link.") except InviteHashExpiredError: return None, await evt.reply("Invite link expired.") try: - return (await evt.sender.client(ImportChatInviteRequest(invite_hash))), None + return (await evt.sender.client(ImportChatInviteRequest(identifier))), None except UserAlreadyParticipantError: return None, await evt.reply("You are already in that chat.") else: - channel = await evt.sender.client.get_entity(arg) + channel = await evt.sender.client.get_entity(identifier) if not channel: return None, await evt.reply("Channel/supergroup not found.") return await evt.sender.client(JoinChannelRequest(channel)), None @@ -146,12 +145,18 @@ async def join(evt: CommandEvent) -> Optional[EventID]: if len(evt.args) == 0: return await evt.reply("**Usage:** `$cmdprefix+sp join `") - regex = re.compile(r"(?:https?://)?t(?:elegram)?\.(?:dog|me)(?:joinchat/)?/(.+)") + regex = re.compile(r"(?:https?://)?t(?:elegram)?\.(?:dog|me)" + r"(?:/(?Pjoinchat|s))?/(?P[^/]+)/?", flags=re.IGNORECASE) arg = regex.match(evt.args[0]) if not arg: return await evt.reply("That doesn't look like a Telegram invite link.") - updates, _ = await _join(evt, arg.group(1)) + data = arg.groupdict() + identifier = data["id"] + link_type = data["type"] + if link_type: + link_type = link_type.lower() + updates, _ = await _join(evt, identifier, link_type) if not updates: return None @@ -165,9 +170,8 @@ async def join(evt: CommandEvent) -> Optional[EventID]: try: await portal.create_matrix_room(evt.sender, chat, [evt.sender.mxid]) except ChatIdInvalidError as e: - logging.getLogger("mau.commands").trace("ChatIdInvalidError while creating portal " - "from !tg join command: %s", - updates.stringify()) + evt.log.trace("ChatIdInvalidError while creating portal from !tg join command: %s", + updates.stringify()) raise e return await evt.reply(f"Created room for {portal.title}") return None