如何在Telegram的aiogram框架中清理内联键盘?
内联键盘重复生成的清理方案
你遇到的问题是每次调用set_kb()时,旧的用户按钮会累积,原因是没有在生成新按钮前清空键盘容器。以下是对应解决方法:
针对python-telegram-bot v20+(使用KeyboardBuilder)
如果你的in_group_kb_players是KeyboardBuilder实例,直接在循环前调用clear()清空已有按钮:
async def set_kb(): in_group_kb_players.clear() # 清空旧按钮 for i in db_show_players(): in_group_kb_players.add(InlineKeyboardButton(text=str(i[0]), callback_data=i[1]))
直接使用InlineKeyboardMarkup的情况
如果是通过维护按钮列表来生成键盘,每次生成前重置列表即可:
# 先定义存储按钮的列表 player_buttons = [] async def set_kb(): global player_buttons player_buttons = [] # 清空旧按钮列表 for i in db_show_players(): # 按行添加按钮(单按钮一行的话用嵌套列表) player_buttons.append([InlineKeyboardButton(text=str(i[0]), callback_data=i[1])]) # 生成最终的内联键盘 in_group_kb_players = InlineKeyboardMarkup(player_buttons)
为什么.clean()无效?
InlineKeyboardMarkup类本身没有clean()方法,只有KeyboardBuilder提供了clear()方法用于清空按钮。如果你之前错误地给InlineKeyboardMarkup实例调用.clean(),自然不会有效果。
内容的提问来源于stack exchange,提问作者Bobomurod
相关产品推荐
相关产品推荐

