@youdontknowwhohackyou

Как заставить телеграмм бота ожидать ответа от пользователя?

Здравствуйте, возникла такая проблема. Решил написать простого телеграмм бота, который осуществляет рассылку о погоде базе пользователей. Проблема в следующем! Пользователь вводит команду /weather и бот спрашивает пользователя хочет ли тот подписаться на рассылку о погоде (да/нет). Если пользователь отвечает да, то бот должен запрашивать город пользователя. В этот момент бот должен начать ожидание сообщения от пользователя и на любое сообщение он должен осуществлять запрос на сайт с погодой и проверять правильность введённого города. Он должен делать это до тех пор пока пользователь не нажмёт на отмену или пока не будет введён корректный город.
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Miit
async awaiter
Вам нужно хранить для конкретного пользователя значение, которое вы будете проверять при новом сообщении юзера. К примеру: После того как пользователю предлагается написать свой город, вы можете записать в каком-либо хранилище\кеше - объект с ключем chat_id и значение. Далее при каждом новом сообщении юзера проверяем сначала ввел ли он команду "/cancel"\"Отмена", если да, то чистим объект с данным chat_id. Если же нет, то в следующей проверке пытаемся получить значение из хранилища\кеша. Найдено? пишем дальнейший код. Не найдено? проверяем какую команду ввел пользователь.
Ответ написан
shurshur
@shurshur
Сисадмин, просто сисадмин...
Получить сообщения можно либо через long poll (запрос /getUpdates бота), либо через вебхук. Второй вариант для простых ботов без особой нагрузки излишний. Так что скрипт можно организовать в виде цикла: выполняем запрос, смотрим нет ли там новых сообщений - обрабатываем.

Если использовать популярную библиотеку telebot, то даже цикл писать не надо - только обработчик события "новое сообщение".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект