Как ждать сообщение от пользователя Telegram bot python

У меня есть код, который я запускаю, когда пользователь начинает разговор.

Когда пользователь начинает разговор, мне нужно отправить ему первое изображение и вопрос, видел ли он что-то на рисунке, функция должна дождаться ввода пользователя и вернуть, видел ли он это или нет.

После этого мне нужно будет отправить изображение в цикле, дождаться ответа и запустить алгоритм деления пополам.

Что я пробовал до сих пор:

Я пытался использовать разметку ответа, которая ожидает ответа, или встроенную клавиатуру с обработчиками, но я застрял, потому что мой код работает без ожидания ввода пользователя.

Код:

Алгоритм, который я запускаю для пользовательского ввода, выглядит примерно так:

def bisect(n, mapper, tester): «»» Runs a bisection. — `n` is the number of elements to be bisected — `mapper` is a callable that will transform an integer from «0» to «n» into a value that can be tested — `tester` returns true if the value is within the «right» range «»» if n < 1: raise ValueError(‘Cannot bissect an empty array’) left = 0 right = n — 1 while left + 1 < right: mid = int((left + right) / 2) val = mapper(mid) tester_values = tester(val) # Here is where I am using the ouput from Telegram bot if tester_values: right = mid else: left = mid return mapper(right)

Я надеюсь, что я четко объяснил проблему, не стесняйтесь спрашивать любые разъяснения. Если вы знаете что-то, что может направить меня в правильном направлении, чтобы решить эту проблему, дайте мне знать.

Создание телеграм-ботов на python (telebot) #4 / Ответы на сообщения, именованный аргумент func

Еще по теме:  Качественная упаковка спортивного Телеграмм канала

Я пробовал подобный вопрос, но я не получаю ответы.

Источник: question-it.com

Как получить сообщение от юзера?

Имеется бот Telegram. Пишу на Python с использованием Telebot.Такой код:

if message.text == «Помочь советом»: bot.send_message(message.from_user.id, «Напишите Ваш совет») .

Как осуществить ожидание сообщения от юзера? При использовании message.text получаю «помочь советом», а надо то, что введет юзер после появления «Напишите Ваш совет»

Ответы (2 шт):

Вы таким образом хотите сделать блокировку бота, чтобы ждать в хэндлере ответа пользователя — не надо так. запомните предыдущий ответ, например:

prevAnswer = message.text

И получается будем ждать момента, когда следующий раз сработает хэндлер, и проверяем:

if «Помочь советом» in prevAnswer: # здесь в messge.text поидее и имеем текст совета от пользователя

А вообще я бы советовал вам прочитать про Finite State Machine и реализовать алгоритм бота с применением данной абстракции.

Вот тут есть хороший пример как это реализовать. Смысл такой, что бот отвечает на сообщение и сохраняет в новый объект все параметры, потом ими можно манипулировать

TelegramBot + Python: пересылаем сообщения в Ваш чат

Источник: husl.ru

Python Telegram Bot как дождаться ответа пользователя на вопрос и вернуть его

У меня есть код, который я запускаю, когда пользователь начинает разговор.

Когда пользователь начинает разговор, мне нужно отправить ему первое изображение и вопрос, если он что-то увидел на картинке, функция должна дождаться ввода пользователя и вернуть, видел он это или нет.

После этого мне нужно будет продолжать посылать изображение в цикле, ждать ответа и запускать на нем алгоритм деления пополам.

Что я пробовал до сих пор:

Я попытался использовать разметку ответа, которая ожидает ответа, или встроенную клавиатуру с обработчиками, но я застрял, потому что мой код выполняется, не дожидаясь ввода пользователя.

Еще по теме:  Как в Телеграмм сохранить сообщение в избранное на Айфоне

Код:

Алгоритм, который я использую для пользовательского ввода, выглядит примерно так:

def bisect(n, mapper, tester): «»» Runs a bisection. — `n` is the number of elements to be bisected — `mapper` is a callable that will transform an integer from «0» to «n» into a value that can be tested — `tester` returns true if the value is within the «right» range «»» if n < 1: raise ValueError(‘Cannot bissect an empty array’) left = 0 right = n — 1 while left + 1 < right: mid = int((left + right) / 2) val = mapper(mid) tester_values = tester(val) # Here is where I am using the ouput from Telegram bot if tester_values: right = mid else: left = mid return mapper(right)

Надеюсь, я ясно объяснил проблему, не стесняйтесь спрашивать любые разъяснения. Если вы знаете что-то, что может указать мне правильное направление для решения этой проблемы, дайте мне знать.

Я задавал аналогичный вопрос, но не получаю ответов.

Источник: stackru.com

Рейтинг
( Пока оценок нет )
Загрузка ...