Задать вопрос
@ArtemMik
Python

Как создать .session с помощью состояния state aiogram 2.25.1?

@dp.message_handler(commands=['login'])
async def ask_for_phone(message: types.Message):
    await message.reply(" Введите номер телефона в формате +71234567890:")
    await AuthState.waiting_for_phone.set()

@dp.message_handler(state=AuthState.waiting_for_phone)
async def process_phone(message: types.Message, state: FSMContext):
    phone = message.text.strip()
    if not phone.startswith("+") or not phone[1:].isdigit():
        await message.reply("❌ Неверный формат. Пример: +71234567890")
        return

    try:
        client = TelegramClient(StringSession(), API_ID, API_HASH)
        await client.connect()
        await client.send_code_request(phone)
        await client.disconnect()

        await state.update_data(phone=phone)
        await message.reply("✉️ Введите код из Telegram:")
        await AuthState.waiting_for_code.set()
    except Exception as e:
        await message.reply(f" Ошибка при отправке кода: {e}")
        await state.finish()

@dp.message_handler(state=AuthState.waiting_for_code)
async def process_code(message: types.Message, state: FSMContext):
    code = message.text.strip()
    data = await state.get_data()
    phone = data.get("phone")

    try:
        client = TelegramClient(StringSession(), API_ID, API_HASH)
        await client.connect()
        await client.send_code_request(phone)
        await client.sign_in(phone=phone, code=code)

        session_str = client.session.save()
        with open(f"sessions/{phone}.session", "w") as f:
            f.write(session_str)

        await message.reply("✅ Сессия успешно сохранена.")
        await state.finish()
        await client.disconnect()

    except SessionPasswordNeededError:
        await state.update_data(code=code)
        await message.reply(" Аккаунт защищён 2FA. Введите пароль:")
        await AuthState.waiting_for_2fa.set()

    except Exception as e:
        await message.reply(f"❌ Ошибка входа: {e}")
        await state.finish()

@dp.message_handler(state=AuthState.waiting_for_2fa)
async def process_2fa(message: types.Message, state: FSMContext):
    password = message.text.strip()
    data = await state.get_data()
    phone = data.get("phone")
    code = data.get("code")

    try:
        client = TelegramClient(StringSession(), API_ID, API_HASH)
        await client.connect()
        await client.send_code_request(phone)
        await client.sign_in(phone=phone, code=code)
        await client.sign_in(password=password)

        session_str = client.session.save()
        with open(f"sessions/{phone}.session", "w") as f:
            f.write(session_str)

        await message.reply("✅ Сессия успешно сохранена (с 2FA).")
        await state.finish()
        await client.disconnect()

    except Exception as e:
        await message.reply(f"❌ Ошибка входа (2FA): {e}")
        await state.finish()


как не крути код выдает ошибку после ввода номера - Ошибка при отправке кода: bytes or str expected, not
class int

Пробовал делать через with TelegramClient(StringSession(), API_ID, API_HASH) as client: но запрашивает номер и код в консоль как не крути
  • Вопрос задан
  • 7 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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