@Nikita235

Состояния в FSM срабатывают со второго раза. Как это исправить?

Вот фрагмент кода:

class Admin(StatesGroup):
    choice = State()
    all_task = State()
    add_task = State()
    name_task = State()
    date = State()
    time = State()

@dp.message_handler(commands=["start"])
async def commands_start(message: types.Message):
    for i in ID:
        if message.from_user.id == i:
            await message.answer("Выберите действие", reply_markup=admin_kb.kb_admin)
            await Admin.choice.set()

@dp.message_handler(state=Admin.choice)
async def choice_buttons(message: types.Message):
    if message.text == "Добавить задачу":
        await Admin.add_task.set()
    elif message.text == "Все задачи":
        await Admin.all_task.set()

@dp.message_handler(text=["Все задачи"], state=Admin.all_task)
async def all_tasks(message: types.Message):
    await message.answer("")

@dp.message_handler(text=["Добавить задачу"], state=Admin.add_task)
async def add_task(message: types.Message):
    await Admin.next()
    await message.answer("Введите задачу")


Это обработчик:
def register_handlers_admin(dp: Dispatcher):
    dp.register_message_handler(commands_start, commands=["start"], state=None)
    dp.register_message_handler(choice_buttons, state=Admin.choice)
    dp.register_message_handler(all_tasks, text=["Все задачи"], state=Admin.all_task)
    dp.register_message_handler(add_task, text=["Добавить задачу"], state=Admin.add_task)
    dp.register_message_handler(task, state=Admin.name_task)
    dp.register_message_handler(inline_kb_answer_callback_handler, state=Admin.date)


Проблема в том, что команды "Добавит задачу", "Все задачи" срабатывают лишь со второго раза. В чем может быть дело?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Как написано - так и работает. Делаем /start - получаем стейт choice и кнопки. Нажимаем "добавить задачу" - получаем стейт add_task и больше в этом обработчике ничего не делается! И только после второго нажатия срабатывает обработчик "добавить задачу" из стейта add_task.

Правильно убрать вообще обработчик для choice и вместо этого указать условия вида state=choice непосредственно у всех обработчиков.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы