blackseabreathe
@blackseabreathe
brackets

Как сделать чтобы бот tg понимал к какой команде относится сообщение?

Создал бота, добавил 2 команды /add_in и /add_out (добавить доходы и добавить расходы)

Идея - при клике, к примеру, на "добавить расход" бот присылает сообщение "Укажите сумму", ты в ответ пишешь сумму, отправляешь, затем бот пишет "добавьте описание", ты пишешь описание, отправляешь, бот спрашивает "пришлите чек", отправляешь чек и на этом все. Потом данные сохраню в файл.

Застрял на таком моменте:
Кликаю на "добавить расход", бот присылает сообщение "Укажите сумму", но вот когда я указываю сумму, отправляю, то бот отправляет мое стандартное сообщение когда не ясно что ответить "я не понимаю".

Вопрос: как сделать так чтобы бот понимал что следующее сообщение относится к команде "Добавить расход" и, соответственно, после отправки суммы запрашивал описание и следующий шаг запрашивал чек?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
blackseabreathe
@blackseabreathe Автор вопроса
brackets
Решил вопрос с помощью чтения и хранения номера шага (этапа) в отдельном файле step.json. Спасибо всем за подсказки. Тостер классный!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
FeST1VaL
@FeST1VaL
Тихий
Простой вариант, сохранять в переменную/базу состояние текущего диалога. Т.е ввели команду, записали, задали вопрос. При получении нового сообщения проверяем что в переменной, если есть, то записываем ответ и задаем следующий вопрос итд.
Ответ написан
iggor-markin
@iggor-markin
Python Developer
Это называется Finite State Machine. Запускаешь состояние и тогда сообщения будут знать, к какой команде себя относить. Я не знаю PHP, но вот пример реализации в питоне: https://github.com/aiogram/aiogram/blob/dev-2.x/ex...
Ответ написан
Комментировать
Как выше сказали надо реализовать работу с состояниями (конечные автоматы если хотите). Надо либо где-то хранить состояние чата с пользователем ("сейчас ждём ввода суммы расхода") либо передавать состояние вместе с сообщениями и потом обрабатывать.
Ответ написан
Ваш ответ на вопрос

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

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