Как осуществить прохождение авторизации в терминале при помощи telethon?

  • 22 августа 2023 г. 9:06
Ответы на вопрос 1
Проблема возникает из-за того, что callback функция должна быть асинхронной, чтобы работать с асинхронной очередью. В вашем случае, вы передаете функцию `code_callback`, которая не является асинхронной.

Вместо этого, вы можете изменить ваш код следующим образом:

1. Измените вашу функцию `code_callback` на асинхронную:

```python
async def code_callback():
    code = await auth_code_queue.get()
    print(f"Получен код авторизации в code_callback: {code}")
    return code
```

2. Далее, создайте асинхронную функцию, которая будет вызывать `code_callback`:

```python
async def main():
    client_obj = TelegramClient(phone_number, api_id, api_hash)
    await client_obj.start(phone=phone_number, code_callback=code_callback())

asyncio.run(main())
```

Теперь, при вызове `client_obj.start()`, будет использована асинхронная функция `code_callback`, которая вытягивает код авторизации из очереди.

Относительно альтернативных способов обхода авторизации без ручного ввода кода в терминал, вы можете использовать двухфакторную аутентификацию (2FA). При использовании 2FA, вы можете передать сгенерированный код из вашего приложения аутентификации, чтобы авторизоваться. Примерно так:

```python
await client_obj.start(phone=phone_number, password=lambda: input('Введите код 2FA: '))
```

В этом случае, вы будете вводить код 2FA в терминале, но уже не будете зависеть от бота для получения кода авторизации.
Похожие вопросы