Задать вопрос
@denisland

Из-за цикла while не срабатывает @dp.message_handler(), как можно исправить?

Здравствуйте!
Пишу бота для себя, и столкнулся со следующей проблемой: У меня есть цикл while, который должен работать пока я (пользователь) не отправлю боту другое сообщение с другим текстом. Как я думаю, не срабатывает хэндлер из-зато того, что цикл не перестает выполняться. Не помогает ни break, ни искусственно менять условие. Вот код:
@dp.message_handler(state='*', text=['Фрукты'])
async def fruits(message: types.Message, state:FSMContext):
    message.text ==  "Фрукты":
          #тут код

@dp.message_handler(state='*', text=['Ягоды'])


Спасибо!
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
AshBlade
@AshBlade
Просто хочу быть счастливым
Предполагаю, что цикл (условие) должен быть здесь:
message.text == "Фрукты":

Сделай глобальную переменную, в которой будешь хранить последнее сообщение, а когда приходит новое сообщение делаешь проверку с этой переменной.
LAST_MESSAGE = None

@dp.message_handler(state='*', text=['Фрукты'])
async def fruits(message: types.Message, state:FSMContext):
    if message.text == LAST_MESSAGE:
            return
    # Логика
    LAST_MESSAGE = message.text
Ответ написан
Комментировать
насколько я понял здесь вопрос состоит в том, что нужно сделать что-то типа диалога. Отправляешь боту сообщение, он его принял и ждет следующего, чтобы обработать их вместе и выдать какой-то результат. Обычно после первого сообщения нужно сообщить пользователю, что бот ожидает еще какое-то сообщение. Так было бы правильнее.
Делаются такие последовательные диалоги с помощью машины состояний или конечных автоматов.
Здесь гайд https://mastergroosha.github.io/aiogram-2-guide/fsm/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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