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

如何移除Discord消息按钮?实现点击按钮后编辑并移除按钮

解决Discord按钮点击后移除按钮并编辑消息的问题

原代码实现了点击按钮后切换消息内容,但点击后按钮依然保留,要实现编辑消息同时移除按钮,只需要在编辑消息时指定view=None即可,以下是修改后的完整代码:

button = Button(style = discord.ButtonStyle.green, emoji = ":arrow_backward:", custom_id = "button1")
button2 = Button(style = discord.ButtonStyle.green, emoji = ":arrow_up_small:", custom_id = "button2")
button3 = Button(style = discord.ButtonStyle.green, emoji = ":arrow_forward:", custom_id = "button3")
view = View()
view.add_item(button)
view.add_item(button2)
view.add_item(button3)

async def button_callback(interaction):
    if number != ("⠀⠀1"):
        await message.edit(content="**response 1**", view=None)
    else:
        await message.edit(content="**response 2**", view=None)
    # 响应交互避免Discord提示失败
    await interaction.response.defer()

async def button_callback2(interaction):
    if number != ("⠀⠀⠀⠀⠀⠀⠀⠀⠀2"):
        await message.edit(content="**response 1**", view=None)
    else:
        await message.edit(content="**response 2**", view=None)
    await interaction.response.defer()

async def button_callback3(interaction):
    if number != ("⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀3"):
        await message.edit(content="**response 1**", view=None)
    else:
        await message.edit(content= "**response 2**", view=None)
    await interaction.response.defer()

button.callback = button_callback
button2.callback = button_callback2
button3.callback = button_callback3

await message.edit(content= f"⠀⠀:watermelon:⠀⠀⠀⠀⠀:watermelon:⠀⠀⠀⠀⠀:watermelon:\n{number}", view=view)

关键改动说明:

  • 在每个message.edit()调用中添加view=None参数:Discord会在编辑消息时移除所有按钮组件
  • 新增await interaction.response.defer():点击按钮后必须对交互做出响应,否则Discord会显示"交互失败"的提示,defer表示延迟响应(此处已完成消息编辑,用defer即可)

额外优化建议(可选):

三个回调函数逻辑高度重复,可以合并为一个通用回调,通过interaction.data["custom_id"]区分点击的按钮,减少冗余代码:

async def universal_button_callback(interaction):
    button_id = interaction.data["custom_id"]
    # 根据custom_id匹配对应的number值
    target_number = {
        "button1": "⠀⠀1",
        "button2": "⠀⠀⠀⠀⠀⠀⠀⠀⠀2",
        "button3": "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀3"
    }[button_id]
    
    if number != target_number:
        await message.edit(content="**response 1**", view=None)
    else:
        await message.edit(content="**response 2**", view=None)
    await interaction.response.defer()

# 给所有按钮绑定同一个回调
button.callback = universal_button_callback
button2.callback = universal_button_callback
button3.callback = universal_button_callback

内容的提问来源于stack exchange,提问作者Isohel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:31:38