InlineKeyboardButton和回调数据



我想问的关于InlineKeyboardMarkup的问题是,当用户用callback_data点击InlineKeyboardButton按钮时,如何捕捉事件,以及如何调用和处理它?

下面是我代码的一部分。

from telegram import InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import Updater, CommandHandler
API        = "1234567890:API_Example"
Bot        = Updater(API, use_context = True)
Dispatcher = Bot.dispatcher
def start_command(update, context):
RM       = InlineKeyboardMarkup(
[[InlineKeyboardButton(
text = "example button text",
callback_data = "example data")
]])
message  = "example message"
context.bot.send_message(update.effective_chat.id, message,reply_markup = RM)
Dispatcher.add_handler(CommandHandler("start", start_command))
Bot.start_polling()

您需要将CallbackQueryHandler添加到Dispatcher中,如:

CallbackQueryHandler(handler_yes_no, pattern=r'^(yes|no)$'),

完整示例:

from telegram import InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import Updater, CommandHandler
API = "1234567890:API_Example"
Bot = Updater(API, use_context = True)
Dispatcher = Bot.dispatcher

def start_command(update, context):
RM = InlineKeyboardMarkup([
[InlineKeyboardButton(text="Yes", callback_data="yes")],
[InlineKeyboardButton(text="No", callback_data="no")],
])
message = "Are you sure?"
context.bot.send_message(update.effective_chat.id, message, reply_markup=RM)

def handler_yes_no(update, context):
callback_data = update.callback_query.data
update.callback_query.answer() 
print(callback_data)

Dispatcher.add_handler(CommandHandler("start", start_command))
Dispatcher.add_handler(CallbackQueryHandler(handler_yes_no, pattern=r'^(yes|no)$'),)
Bot.start_polling()

附言:不要忘记PEP8代码风格指南:(

最新更新