Telegram-python-Бот получает ввод текста пользователем с помощью callback_query

#python #user-input #telegram-bot #python-telegram-bot

#python #пользовательский ввод #telegram-бот #python-telegram-bot

Вопрос:

Я пытаюсь получить вводимый текст от пользователя..
Он приходит к функции после взаимодействия с

  keyboard = [[InlineKeyboardButton("exapmple", callback_data='example')]]
 reply_markup = InlineKeyboardMarkup(keyboard)
  

итак, в обновлении я получаю callback_query
после того, как он выбирает пример кнопки, я прошу его ввести текст.
эта работа для меня, я получаю ввод с помощью кнопки, но не с его собственным вводом

 def getInput(update, context):
    query = update.callback_query
    query.answer()
    input = query.data
  

Я хочу получить ввод, подобный

 input = update.message.text
  

но поскольку я получаю callback_query, у меня нет сообщения..
итак, как я переключаюсь на сообщение или получаю ввод с помощью callback_query

редактировать: я прихожу к получению ввода с

     dp.add_handler(CallbackQueryHandler(getInput, pattern='example'))
  

Ответ №1:

Ответ на запрос обратного вызова

 text = update.callback_query.data
  

Если пользователь решает ввести вместо этого что-то, сообщение обрабатывается как текстовое сообщение по умолчанию

 def main_handler(update, context):
   print(update.message.text)

updater.dispatcher.add_handler(MessageHandler(Filters.text, main_handler))
  

Комментарии:

1. как я уже упоминал, это работает для меня с помощью кнопки.. Мне нужно получить http-ссылку, которую пишет клиент..

2. вы имеете в виду, если пользователь вводит что-то вместо нажатия кнопки?

3. Я расширил ответ, вы должны иметь возможность обрабатывать текстовое сообщение (например, когда пользователь отправляет текст чат-боту)

4. большое вам спасибо за вашу помощь .. но я прихожу к main_handler () после того, как я нажимаю какую-то кнопку InlineKeyboardMarkup, я расширяю свой вопрос, как я прихожу к функции

5. не уверен, что я понимаю, вы определили message_handler и callback_handler? Каждый отвечает за обработку ввода (текст или обратный вызов)

Ответ №2:

Если вы хотите получить текст сразу после того, как пользователь нажмет кнопку, используйте ConversationHandler .

Документы: https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.conversationhandler.html

Пример: https://github.com/python-telegram-bot/python-telegram-bot/blob/master/examples/conversationbot.py

Комментарии:

1. Я пытался сделать это, прежде чем спрашивать .. это работает, когда вы используете ReplyKeyboardMarkup В моем случае, в то время как кнопка InlineKeyboardMarkup не работает.

Ответ №3:

def get_text_from_user(средство обновления, контекст): text = updater.message.text # <- это текст от пользователя print(текст)

updater.dispatcher.add_handler(telegram.exe.MessageHandler(telegram.exe.Filters.text,get_text_from_user))