Как лучше организовать Telegram бота с несколькими экранами?
Приветствую!
Задача такова - имеем несколько экранов бота телеграм, между которыми надо передвигаться. Для примера возьмём следующую структуру: Главная -> Баланс -> История платежей.
На экране "История платежей" мы можем ввести текстом дату и бот должен показать платежи за эту дату. Бот, получив сообщение, сначала должен понять что это сообщение с экрана "История платежей", а потом уже парсить полученный текст на предмет корректной даты.
Теперь вопрос - как это всё организовать?
Пока единственный вариант, который есть в голове, это хранить какой то Step пользователя. Типа таблицы в БД, где есть UserID и Step, в Step храним соответственно текущую страницу пользователя (страница "Баланс" к примеру)
И когда мы вводим дату мы берем этот Step, видим, что находится юзер на странице "История платежей" и соответственно парсим текст. Либо юзер на другой странице, и там соответственно другие действия.
Но как то это всё дерьмово выглядит, неудобно хранится, ненадёжно, легко ломается (если юзер сделает простейшую манипуляцию типа рестарта бота)
Есть ли у кого либо решения?
P.S.: Да, интерес в самом алгоритме, а не в реализации. Так что можете приводить примеры хоть на Java, но лучше не стоит)
UPD: К сожалению, решений удобных не нашёл. В своём проекте остановился на единственном, описанном выше решении - хранить user_step в БД.
Как вариант можно саму команду редактировать. я не знаю как устроено api у телеги, но к примеру:
1) Человек написал дату будучи на странице "История платежей"
2) Мы парсим текст и формируем для себя по сути что-то типа url'a. И сам текст спаршенный уже записываем к себе в виде: '/История платежей?date="дата, которую ввел юзер"'
3) Дальше уже эту команду отправляем дальше и обрабатываем по все канонам.
Для телеграма вообще нет сущности "экран" или "страница". Есть лишь ответ на сообщение, при желании можно получить последнее отправленное ботом сообщение.
Егор Давыдов, ну тк здесь и не нужно всего этого.
ты же как то получаешь сообщение отправленное пользователем?
потом сохраняешь полюбому в бд для последующей обработки.
ну тк вот между получение и сохранением - тебе нужно отредактировать полученное сообщение пользователя и отправить на обработку уже в другом виде