You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:54:36