调用telebot的edit_message_text方法时报错期望inline keyboard如何解决
报错原因
edit_message_text方法的reply_markup参数仅支持InlineKeyboardMarkup类型的内联键盘,你定义的main_keyboard()返回的是ReplyKeyboardMarkup类型的底部普通回复键盘,不符合Telegram API参数要求,因此触发报错。- 其他位置调用该键盘正常,是因为调用场景为
send_message等发送新消息的方法,这类方法的reply_markup参数支持传入普通回复键盘。
解决方案
根据你的使用需求选择对应方案即可,无需替换原有键盘方法,原有方法可继续在发送新消息的场景中使用:
方案1:仍需要使用底部普通回复键盘
拆分操作逻辑,先编辑消息文本,再单独发一条消息带出普通回复键盘即可,代码示例:
elif (merchant_id == 2): # 仅编辑消息文本,不传入reply_markup参数 bot.edit_message_text( chat_id=call.message.chat.id, message_id=call.message.message_id, text='Your request was accepted', parse_mode="Markdown" ) # 发送新消息带出普通回复键盘 bot.send_message( chat_id=call.message.chat.id, text="请选择后续操作:", reply_markup=keyboard.main_keyboard() )
方案2:需要在编辑后的消息下方直接附带键盘
额外定义一个内联键盘方法,在编辑消息时传入该内联键盘即可,代码示例:
# 新增内联键盘定义 def main_inline_keyboard(): markup = types.InlineKeyboardMarkup() btn1 = types.InlineKeyboardButton('Hello', callback_data='hello') btn2 = types.InlineKeyboardButton('Start', callback_data='start') btn3 = types.InlineKeyboardButton('Add', callback_data='add') btn4 = types.InlineKeyboardButton('Stop', callback_data='stop') markup.add(btn1, btn3) markup.add(btn2) markup.add(btn4) return markup # 编辑消息时传入内联键盘 elif (merchant_id == 2): bot.edit_message_text( chat_id=call.message.chat.id, message_id=call.message.message_id, text='Your request was accepted', parse_mode="Markdown", reply_markup=keyboard.main_inline_keyboard() )
内容的提问来源于stack exchange,提问作者Саша Афти
相关产品推荐
相关产品推荐

