是否有在用户响应后删除 InlineKeyboardMarkup 的功能?(蟒蛇电报机器人)

Aky*_*icx 1 python telegram python-telegram-bot

我正在寻找一种在用户响应后删除内联键盘按钮的方法。在用户输入 /default 后,电报机器人会要求用户选择一个选项。我希望能够删除用户多次选择响应按钮的选项。下面是我的示例代码,我使用的是 python-telegram-bot 包。

list_default_options = ['a', 'b',
                         'c', 'd']

def default_options(update, context):
"""Generates responses for default options."""
button_list = []
for each in list_options:
    button_list.append(InlineKeyboardButton(each, callback_data=each))
reply_markup = InlineKeyboardMarkup(build_menu(button_list, n_cols=2))
context.bot.send_message(chat_id=update.message.chat_id,
                         text="Choose option",
                         reply_markup=reply_markup)

def build_menu(buttons, n_cols=1, header_buttons=None, footer_buttons=None):
"""
Returns a list of inline buttons used to generate inlinekeyboard responses

:param buttons: `List` of InlineKeyboardButton
:param n_cols: Number of columns (number of list of buttons)
:param header_buttons: First button value
:param footer_buttons: Last button value
:return: `List` of inline buttons
"""
menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
if header_buttons:
    menu.insert(0, header_buttons)
if footer_buttons:
    menu.append(footer_buttons)
return menu

def query_default_option(update, context):
"""Callback function when inline response is selected"""
print("Default Option: " + update.callback_query.data)
context.bot.send_message(chat_id=update.effective_chat.id,
                         text="Registered: " + update.callback_query.data)

def main():
# Define telegram updater and dispatcher
updater = Updater(token=API_KEY, use_context=True)
dp = updater.dispatcher

# Register handlers

# Different commands or Text
dp.add_handler(CommandHandler('start', start))
dp.add_handler(MessageHandler(Filters.text & (~Filters.command),
                              handle_message))
dp.add_handler(CommandHandler('default', default_options))
dp.add_handler(CallbackQueryHandler(query_default_option,
                                    pattern='^a$'))
dp.add_handler(CallbackQueryHandler(query_default_option,
                                    pattern='^b$'))
dp.add_handler(CallbackQueryHandler(query_default_option,
                                    pattern='^c$'))
dp.add_handler(CallbackQueryHandler(query_default_option,
                                    pattern='^d$'))
Run Code Online (Sandbox Code Playgroud)

Cal*_*tag 7

我首先链接到另一个问题,但实际上它并不能完全回答你的问题,而且我没有找到其他答案使它更清楚,所以我们开始吧。

要编辑内联键盘(请阅读:附加新键盘或将其全部删除),Bot API 提供了方法edit_message_reply_markup。要附加新键盘,您必须将新键盘传递给该方法。要删除它,请通过None.

请注意,python-telegram-bot为此提供了方便的快捷方式,这样您就不必担心阅读chat_idmessage_id接收传入的更新。因此,要删除键盘,您可以使用update.callback_query.edit_message_reply_markup(None)update.effective_message.edit_reply_markup(None),它们是等效的。请参阅此处此处的文档。您可能还想看看这里的示例。

另请注意,还有一些其他edit_message_*方法,其中大多数还接受可选reply_markup参数。不传递该参数(或者传递reply_markup=None将在调用这些方法时删除键盘,但如果您只想更改键盘并保留消息的其余部分,那么edit_message_reply_markup就是正确的方法。


免责声明:我目前是python-telegram-bot.