Задать вопрос
  • Не работает FSM в Aiogram 3.18.0, у меня ошибка где-то?

    @nevvery
    @dp.message(F.text)
    async def command_start_handler(message: Message, state: FSMContext) -> None:
        if message.text == "/start":
            builder = RKB()
            regbutton = types.KeyboardButton(text="Создать запрос")
            builder.add(regbutton)
            await message.reply(f"Привет, {html.bold(message.from_user.full_name)}!")
            await message.reply("Для создания запроса нажмите кнопку ниже:", reply_markup=builder.as_markup())
        elif message.text == "Создать запрос":  # использовал elif
            await message.answer("Введите своё ФИО:")
            await state.set_state(Form.name)
            print(Form.name.state)


    У тебя первый хендлер перехватывает все сообщение, потому что он слишком "общий". Какое бы состояние ты не передал, он перехватывает все сообщение, который вводишь (поэтому до следующих хендлеров при проверки даже не доходит). Либо перенеси его под всего остальные хендлеры, чтобы он проверялся в последнею очередь, либо же раздели этот хендлер на два более специфичные

    @dp.message(F.text == '/start')
    async def command_start_handler(message: Message) -> None:
            builder = RKB()
            regbutton = types.KeyboardButton(text="Создать запрос")
            builder.add(regbutton)
            await message.reply(f"Привет, {html.bold(message.from_user.full_name)}!")
            await message.reply("Для создания запроса нажмите кнопку ниже:", reply_markup=builder.as_markup())
    
    
    @dp.message(F.text == 'Создать запрос')
    async def command_start_handler(message: Message, state: FSMContext) -> None:
        await message.answer("Введите своё ФИО:")
        await state.set_state(Form.name)
        print(Form.name.state)


    Грубый пример, но думаю суть ясна.
    Ответ написан
    Комментировать