Структура самого простого бот имеет такой вид:
1) Получили сообщение
2) Обработали его
3) Ответили
Но как делаются многоуровневые боты?
Грубый пример: мы хотим получить от пользователя его имя и возраст.
П - пользователь, Б - бот
П: Ввод личных данных
Б: Введите Ваш возраст
П: 25
Б: Введите Ваше имя
П: Иван
Б: Иван - 25 лет. Всё верно?
П: Подтвердить
В этом примере обработка команд на получение возраста и имени происходит только после того, как пользователь захотел ввести данные о себе. То есть, команды: "получить возраст" и "получить имя" являются подкомандами "получить данные пользователя".
Чтобы просто введя "25" или "Иван" ничего не происходило. Иначе говоря, чтобы бот понимал, что сейчас будет производиться сбор данных от пользователя.
Автор Ботодрома (автоматизация Telegram, VK и др.)
Для этого нужно всем стадиям присвоить, например, цифровой ид. Для каждого пользователя хранить его текущее состояние, включая ид стадии. При получении сообщений от пользователя применять логику в зависимости от текущей стадии, и обновлять ид при переходе на другую стадию.
Пока что я вижу только такое решение:
Хранить в базе данных пользователей уникальный id последней введенной команды и каждый раз проверять, какая команда была последней у пользователя и уже из этого выстраивать порядок действий.
Уверен, что есть более простой и грамотный вариант.