Python-telegram-bot:CallbackQueryHandler触发方法能否用ReplyKeyboardMarkup?
在CallbackQueryHandler中使用ReplyKeyboardMarkup的解决方案
可以在CallbackQueryHandler触发的方法里使用ReplyKeyboardMarkup,但不能通过query.edit_message_text()绑定,这正是你遇到报错的原因。
报错原因
Telegram API明确规定:edit_message_text方法的reply_markup参数仅支持InlineKeyboardMarkup(内联键盘),不允许传入ReplyKeyboardMarkup(普通回复键盘),所以会抛出"text buttons are unallowed in the inline keyboard"的错误。
正确实现方式
在CallbackQuery的处理方法中,通过query.message.reply_text()发送带有ReplyKeyboardMarkup的新消息即可。示例代码如下:
from telegram import ReplyKeyboardMarkup from telegram.ext import CallbackQueryHandler def params_set(update, context): query = update.callback_query # 必须先调用answer()确认回调,否则Telegram会提示用户"无法加载按钮" query.answer() # 构建普通回复键盘 keyboard = [["参数A", "参数B"], ["重置参数"]] reply_markup = ReplyKeyboardMarkup(keyboard, resize_keyboard=True, one_time_keyboard=True) # 发送新消息并绑定回复键盘 query.message.reply_text("请选择要设置的参数:", reply_markup=reply_markup) # 注册回调处理器,pattern根据你的实际回调数据调整 dispatcher.add_handler(CallbackQueryHandler(params_set, pattern=r"^params_set$"))
补充说明
如果你的需求是修改原有消息的键盘,那只能改用InlineKeyboardMarkup类型的内联键盘,Telegram API不支持给已发送的消息替换或添加普通回复键盘。
内容的提问来源于stack exchange,提问作者BaruchLi
相关产品推荐
相关产品推荐

