Код, который я использую, работает с ошибками: иногда код не отправляется, а иногда возникают другие ошибки. Однако основная проблема, после которой дальше код уже не идет, — это ошибка [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()
Я пробовал использовать Telephon или другие фреймворки для своей задачи, но, насколько мне известно, Pyrogram подходит здесь лучше всего
Подробнее здесь: https://stackoverflow.com/questions/790 ... am-bot-how
Мобильная версия