Отправьте команду с помощью телеграмм-бота InlineKeyboardButton python - PullRequest
0 голосов
/ 16 июня 2020

В телеграмм-боте python возможно ли, чтобы InlineKeyboardButton отправлял команду типа /cancel при нажатии?

Например, когда пользователь нажимает кнопку отмены, они будут автоматически отправить команду / cancel, которая затем будет обработана ботом.

Из примера здесь:

https://github.com/python-telegram-bot/python-telegram-bot/blob/master/examples/inlinekeyboard2.py

conv_handler = ConversationHandler(
    entry_points=[CommandHandler('start', start)],
    states={
        FIRST: [CallbackQueryHandler(one, pattern='^' + str(ONE) + '$'),
                CallbackQueryHandler(two, pattern='^' + str(TWO) + '$'),
                CallbackQueryHandler(three, pattern='^' + str(THREE) + '$'),
                CallbackQueryHandler(four, pattern='^' + str(FOUR) + '$')],
        SECOND: [CallbackQueryHandler(start_over, pattern='^' + str(ONE) + '$'),
                 CallbackQueryHandler(end, pattern='^' + str(TWO) + '$')]
    },
    fallbacks=[CommandHandler('start', start)]
)

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

Нажатие кнопки затем сгенерирует команду / cancel, которая приведет бота к другой обработчик разговора.

Возможно ли это?

1 Ответ

0 голосов
/ 17 июня 2020

Для обработки ввода InlineKeyboardButton вы определяете CallbackQueryHandler, который будет обрабатывать callback_data кнопки, нажатой пользователем. Даже если вы укажете команду, CallbackQueryHandler будет обрабатывать ввод

 #'/help' sent to CallbackQueryHandler
 options.append(InlineKeyboardButton("a", callback_data="/help"))

Если я правильно понимаю, чего вы хотите достичь, я бы определил метод CallbackQueryHandler, который затем контролирует рабочий процесс и даже может вызовите команду (если это то, что вам нужно сделать)

def callback_query_handler(update, context):
   # process input
   input = update.callback_query.data
   # invoke handler
   if input == '/help':
       help_command_handler(update, context)  
...