Логика очень простая. При поступлении события от пользователя (например, команды) нужно загрузить состояние этого пользователя из БД, а потом на основании этого состояния уже решать, как обработать событие. Например, вызывая разные функции обработки.
Например, если бот должен поприветствовать пользователя, а потом узнать у него имя и возраст, то будет 4 возможных состояния:
1. пользователь нам неизвестен, ждём начала работы
2. приветствие отправлено, ожидаем ввод имени
3. введено имя, ожидаем ввод возраста
4. введено имя и возраст
Тогда у нас будет 4 возможных реакции, в зависимости от текущего состояния пользователя. И мы должны будем обновлять состояние пользователя при успешном срабатывании реакции.
Разумеется, такое решение будет несколько велосипедным, тем более что часто в библиотеках для создания ботов есть готовые инструменты реализации автомата состояний. Но идея в целом та же самая.