@wriller51

Не удается вступить в канал телеграм, почему?

Делаю user-bot'а для телеграм, использую библиотеку pyrogram. В ней есть метод join_chat(), который принимает в себя один параметр - ссылку на канала тг, если канал открытый, то он принимает по никнейму канала то-есть "xxxxxxxxx", (без @), если закрытый, то принимает хэш, например в таком видел "https://t.me/+xxxxxxxxxxxxxx".
Однако если есть открытый канал сделал пригласительную ссылку вида "https://t.me/+xxxxxxxxxxxxxx", то метод join_chat() перестает корректно работать, он выдает ошибку:
Telegram says: [400 INVITE_REQUEST_SENT] - The request to join this chat or channel has been successfully sent (caused by "messages.ImportChatInvite")

То-есть, он почему-то думает, что чтобы попасть в канал нужно дождаться одобрения администратора, но если мы вручную попробуем вступить в канал по этой же ссылке, то всё получится моментально.
Поэтому вопрос, какой метод использовать для вступления в открытый канал по пригласительной ссылке?
Вот пример такого неработающего кода:
try:
            await app.join_chat('https://t.me/+xxxxxxxxxxxxx')
            print("успешно подписался на канал")
        except Exception as e:
            print(e)
            print("не удалось присоединиться к каналу")
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 1
Laiwers
@Laiwers
Python, Telegram, Parsing
Покопавшись в документации и коде Pyrogram, стало понятно, что это тот случай, когда ошибка возникает не потому что что-то случилось, а потому что всё хорошо. Даже если перевести то, что написано в ошибке становится понятно, что "Запрос на присоединение к этому чату или каналу был успешно отправлен".
Единственное решение - использовать try except. В Pyrogram кроме исключения InviteRequestSent, ещё есть исключение InviteHashExpired, которое вызывается, когда ссылка уже не действительна.
Пример кода:
from pyrogram.errors.exceptions.bad_request_400 import InviteRequestSent, InviteHashExpired

...

try: 
    await app.join_chat("https://t.me/+xxxxxxxxxxxxx")
except InviteRequestSent:
    print("Запрос отправлен!")
except InviteHashExpired:
    print("Ссылка не действительна!")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы