selfish-psycho
@selfish-psycho

Как сделать расширенное ветвление логики телеграм бота?

Делаю телеграм бота, не могу придумать лучшего варианта для отслеживания сообщений пользователя по условиям.
Допустим, есть схема, по которой нужно производить разные операции (условия кидаю по inline_keyboard для отслеживания callback_data):
[Найти по ФИО] или [Найти по email]
В первом случае выбрасывается сообщение "Введи ФИО", во втором, соответственно, "Введи email". Как отличить, что пользователь ввел email, а не ФИО и наоборот? Это лишь пример, костыли в виде поиска "@" в сообщении не сработают.
Сейчас работает очень тяжёлая конструкция с записью в отдельный на сервере файл массивов с айдишниками последних сообщений, увеличенными на 2, сравнение айдишника текущего сообщения с тем, что лежит в файле и, при совпадении, дергается его значение (которое привязывается к ниму по нажатию на конкретную кнопку). Выглядит как решение, но, на практике, довольно сложно поддерживать такую конструкцию, когда условие не одно.
  • Вопрос задан
  • 399 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Всё это решается машиной состояний. Скорее всего он есть в вашем фреймворке по умолчанию. А если и нет - то написать его ничего не стоит - создавайте состояния и для каждого chat_id храните текущее состояние. В каждом состоянии есть функции-триггеры, которые приводят к переключению состояния на другое, попутно выполняя что-то полезное
Я о конечных автоматах узнал из этой статьи, в своё время
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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