Авторизация пользователя в тг-боте по api_id и api_hash

Я разрабатываю Telegram-бота на языке Python 3.12 с использованием фреймворков AIogram 3.x и Pyrogram 2.0.106. У меня возникла проблема с авторизацией пользователей.

Код, который я использую, работает нестабильно: иногда код не отправляется, а иногда возникают другие ошибки. Однако основная проблема, после которой код ни разу дальше заходил, это - ошибка [400 CODE_EXPIRED]. Хотя после получения кода до его отправки в мой чат-бот проходит максимум 10 секунд. И по идеи, код должен быть действителен.

Вот мой код:

from aiogram import Router, F, types
from aiogram.filters import CommandStart
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
from aiogram.types import Message, CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup

from pyrogram import Client

class UserAuth(StatesGroup):
    waiting_for_phone = State()
    waiting_for_code = State()


@router.callback_query(lambda cq: cq.data == "add_user")
async def add_user_callback(callback_query: types.CallbackQuery, state: FSMContext):
    await callback_query.answer()
    await callback_query.message.answer("Please enter your phone number:")
    await state.set_state(UserAuth.waiting_for_phone)


@router.message(UserAuth.waiting_for_phone)
async def process_phone(message: types.Message, state: FSMContext):
    phone_number = message.text.strip()
    await state.update_data(phone=phone_number)

    client = Client("user_session", api_id=api_id, api_hash=api_hash)
    await client.connect()

    try:
        sent_code = await client.send_code(phone_number)
        phone_code_hash = sent_code.phone_code_hash

        print(phone_code_hash)
        await message.answer("Code has been sent to your phone. Please enter the code in format: code12345")
        await state.update_data(sent_code=sent_code)
        await state.update_data(phone_code_hash=phone_code_hash)
        await state.set_state(UserAuth.waiting_for_code)
    except Exception as e:
        await message.answer(f"Failed to send code: {e}")
        await state.clear()


@router.message(UserAuth.waiting_for_code)
async def process_code(message: types.Message, state: FSMContext):
    code = message.text.strip()
    data = await state.get_data()
    phone_number = data.get("phone")
    phone_code_hash = data.get("phone_code_hash")

    client = Client("user_session", api_id=api_id, api_hash=api_hash)
    await client.connect()

    try:
        await client.sign_in(phone_number=str(phone_number), phone_code_hash=str(phone_code_hash), phone_code=code)
        await message.answer("Authorization successful! Now you can send messages.")
        await state.clear()

        await client.send_message(chat_id, "You have successfully logged in via the bot!")
    finally:
        await state.clear()
        await client.disconnect()

Помогите, пожалуйста, с моей проблемой. Спасибо!


Ответы (0 шт):