@youdontknowwhohackyou

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

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

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

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

Войти через центр авторизации
Похожие вопросы
от 130 000 ₽
deeplay Новосибирск
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽
27 окт. 2020, в 14:47
1000 руб./в час
27 окт. 2020, в 14:37
10000 руб./за проект