#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))