state handler не слушает сообщения

Я создал StatesGroup:

class SendNotificationState(StatesGroup):
    text = State()
    group = State()
    form_of_education = State()
    confirmation = State()

И, соответственно, создал хендлеры для того, чтобы слушать сообщения в ответ на мои State, вот один из них:

@dp.message(Command("send_notification"))
async def send_notification_handler(message: Message, state: FSMContext):
    logging.debug("the send_notification_handler has worked now")

    await state.clear()
    await state.set_state(SendNotificationState.message)
    await state.update_data({"user_id": message.from_user.id})

    await message.answer("")

@dp.message(SendNotificationState.message)
async def send_notification_message_handler(message: Message, state: FSMContext):
    logging.debug("the send_notification_message_handler has worked now")

    await state.update_data({"message": message.text})
    await state.set_state(SendNotificationState.group)

    keyboard_builder = ReplyKeyboardBuilder().add(KeyboardButton(text="1")).add(KeyboardButton(text="2")).add(KeyboardButton(text="3"))

    await message.answer(
        "",
        reply_markup=keyboard_builder.as_markup())

Исходя из логов, после ввода команды /send_notification человек получает нужный state (SendNotificationState.message), но при этом, когда я ввожу сообщения, нужный хендлер не работает. Нет, ошибки нет, он просто не срабатывает (я не вижу лога по началу его работы).

При этом если ввести /cancel в чат и в хендлере команды вывести в нём текущий state, state будет на месте (SendNotificationState:message).

Если просмотреть все хендлеры dispatcher'a при помощи такой незамысловатой конструкции:

handlers = dispatcher.message.handlers
    
    for handler in handlers:
        print(f"Хендлер: {handler.callback.__name__}, Фильтры: {dp}")

то я увижу все хендлеры (то есть они есть).

В чём же дело?


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

Автор решения: Ben Puls

В вашем примере кода в SendNotificationState отсутствует стейт message, к которому вы обращаетесь в await state.set_state(SendNotificationState.message) и в хенделере. Если же мы меняем несуществующий стейт на какой-либо другой, то всё прекрасно работает.

Если и это не поможет, то тогда скорее всего проблема не в той части кода, которую вы приложили.

→ Ссылка