From c907e8146a77a7e04fa74d230def9c162fb83008 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 28 Dec 2018 14:34:47 +0100 Subject: [PATCH] Allow get_chat to work with chat invite links --- pyrogram/client/methods/chats/get_chat.py | 23 ++++++++++++++++++++++ pyrogram/client/methods/chats/join_chat.py | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/get_chat.py b/pyrogram/client/methods/chats/get_chat.py index f5bf19a9..03bf2a08 100644 --- a/pyrogram/client/methods/chats/get_chat.py +++ b/pyrogram/client/methods/chats/get_chat.py @@ -32,13 +32,36 @@ class GetChat(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. + Unique identifier for the target chat in form of a *t.me/joinchat/* link, identifier (int) or username + of the target channel/supergroup (in the format @username). Returns: On success, a :obj:`Chat ` object is returned. Raises: :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` in case the chat invite link refers to a chat you haven't joined yet. """ + match = self.INVITE_LINK_RE.match(str(chat_id)) + + if match: + h = match.group(1) + + r = self.send( + functions.messages.CheckChatInvite( + hash=h + ) + ) + + if isinstance(r, types.ChatInvite): + raise ValueError("You haven't joined \"t.me/joinchat/{}\" yet".format(h)) + + if isinstance(r.chat, types.Chat): + chat_id = -r.chat.id + + if isinstance(r.chat, types.Channel): + chat_id = int("-100" + str(r.chat.id)) + peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChannel): diff --git a/pyrogram/client/methods/chats/join_chat.py b/pyrogram/client/methods/chats/join_chat.py index 2f14c617..2c70a52f 100644 --- a/pyrogram/client/methods/chats/join_chat.py +++ b/pyrogram/client/methods/chats/join_chat.py @@ -27,7 +27,7 @@ class JoinChat(BaseClient): Args: chat_id (``str``): - Unique identifier for the target chat in form of *t.me/joinchat/* links or username of the target + Unique identifier for the target chat in form of a *t.me/joinchat/* link or username of the target channel/supergroup (in the format @username). Raises: