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