У меня есть код, который я запускаю, когда пользователь начинает разговор.
Когда пользователь начинает разговор, мне нужно отправить ему первое изображение и вопрос, видел ли он что-то на рисунке, функция должна дождаться ввода пользователя и вернуть, видел ли он это или нет.
После этого мне нужно будет отправить изображение в цикле, дождаться ответа и запустить алгоритм деления пополам.
Что я пробовал до сих пор:
Я пытался использовать разметку ответа, которая ожидает ответа, или встроенную клавиатуру с обработчиками, но я застрял, потому что мой код работает без ожидания ввода пользователя.
Код:
Алгоритм, который я запускаю для пользовательского ввода, выглядит примерно так:
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