Задать вопрос
@utsiye

Почему telethon/pyrogram не отправляет код?

При запуске ввожу номер телефона в формате +..., но код не присылается в телеграмм или ввиде смс. В чем проблема? Пробовал и в telethon, и в pyrogram:
from telethon import TelegramClient
from telethon.sessions import StringSession
import asyncio

app_id = ...
app_hash = '...'
session_name = 'wasd'

target_chat = '...'
client = TelegramClient(f"{session_name}.session", app_id, app_hash)

async def main():
    print(f"Подключаемся к чату: {target_chat}...")
    
    try:
        # 1. Получаем объект чата/диалога
        entity = await client.get_entity(target_chat)
        
        # 2. Получаем последнее сообщение (limit=1)
        messages = await client.get_messages(entity, limit=1)
        
        if not messages:
            print("Диалог пуст.")
            return

        last_message = messages[0]
        
        if last_message.buttons:
            print(f"Найдено сообщение ID {last_message.id}. Пробуем нажать кнопку...")
            await last_message.click(0)
            
            print("Успешно нажали на первую кнопку!")
        else:
            print("В последнем сообщении нет кнопок.")

    except Exception as e:
        print(f"Произошла ошибка: {e}")

with client:
    asyncio.run(main())
  • Вопрос задан
  • 2116 просмотров
Подписаться 2 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • Skillbox
    Профессия 1С-программист
    8 месяцев
    Далее
Решения вопроса 2
@utsiye Автор вопроса
Похоже, что проблема в самом телеграмме. Удалось каким-то образом получить код, добавив имя девайса, платформу и т.д. (в сам TelegramClient) и перелогинившись из аккаунта на 1 устройстве.
Ответ написан
@alexandrsemen4ukk
Выброс из аккаунтов (SESSION_REVOKE) - происходит из-за одновременного использования одной телеграмм-сессии. Я смог победить ограничив приложение только одним ядром
WSGIDaemonProcess some.app \
    user=some-usr \
    group=www-data \
    processes=1 \
    threads=16 \


Лично у меня клиент telethon инициировался в Django, а он мог выполнить несколько действий с одной сессией (телега ожидает, что одна .session (телетон сесисия) = одно устройство / соединение).
Соответственно, телега расценивает это как подозрительную активность и выполняет SESSION_REVOKE отключая все устройства от аккаунта.

Не приходят пуши авторизации - нужно было указать lang_code и system_lang_code при инициализации клиента.
client = TelegramClient(
    "session",
    API_ID,
    API_HASH,
    lang_code="ru", # видимо стали обязательными
    system_lang_code="ru-RU" #  видимо стали обязательными
)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы