Как чат-боту дождаться ответа пользователя?

С помощью VK API бот получает последнее сообщение пользователя и обрабатывает его. Но как быть в случае, когда боту нужно дождаться отправки сообщения со стороны пользователя?

Например – бот запрашивает у человека ввод пароля или другого ответа и не должен что-либо отвечать, пока не получит это сообщение. При этом, что именно будет в этом сообщении – неизвестно, поэтому обычными if – else не обойтись. Что можно сделать в такой ситуации?
  • Вопрос задан
  • 1682 просмотра
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Ждать сообщение от конкретного ID. ID можно получить как из самого сообщения, так и другими способами в зависимости от используемой библиотеки, пример:
def func(user_id):
    for event in long_poll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW:
            if event.obj.from_id == user_id:
                print('something')

Только делать нужно это или асинхронно, или в отдельном потоке, иначе пока бот будет ждать сообщения от конкретного пользователя все другие он "не будет видеть".
Т.е. вы получаете начальное сообщение, затем берете из него ID пользователя и с этим ID в отдельном потоке запускаете ожидание сообщения и далее делаете то, что хотите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
Самый простой вариант - привязать поле к пользователю допустим с названием "path". И условно создать структуру как в веб-сайте. Т.е. у всех пользователей изначально path = /
К примеру написал он "Меню" - Ты его отправляешь на path /menu - и следующие сообщения уже обрабатываешь исходя из того места, где пользователь находится.

В твоем случае что то вроде:
Человек написал - ты его отправил на /password
Потом что бы человек не написал - ты его по этому пути обработаешь как ввод пароля. Ну и дальше также отправляешь юзера на нужный path
Ответ написан
Ваш ответ на вопрос

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

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