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

Discord选择菜单按钮无响应,点击提示‘操作失败’求助

解决Discord性别验证Select菜单点击后"This action failed"错误

错误原因分析

你的代码存在两个核心问题导致报错:

  1. 类型拼写错误:回调函数里的interaction参数类型写成了discord.Integration,正确类型应为discord.Interaction,类型不匹配会导致Discord无法正常处理交互请求。
  2. 视图状态未同步:设置select.disabled=True后,没有将更新后的视图同步回Discord服务器,客户端与服务器的组件状态不一致,触发了失败提示。

修正后的代码

class verify(discord.ui.View):
    def __init__(self):
        super().__init__(timeout=None)  # 可选:设置视图永不超时,避免过期后无法交互

    @discord.ui.select(
        placeholder="Choose an option",
        options=[
            discord.SelectOption(label="Men", value="1", emoji="👨"),
            discord.SelectOption(label="Girl", value="2", emoji="👧"),
            discord.SelectOption(label="Undefined", value="3", emoji="🤓")
        ]
    )
    async def select_callback(self, select, interaction: discord.Interaction):
        select.disabled = True
        # 根据选择发送对应消息,并同步更新视图
        if select.value == "1":
            await interaction.response.edit_message(content="You choose Men!", view=self)
        elif select.value == "2":
            await interaction.response.edit_message(content="You choose Girl!", view=self)
        elif select.value == "3":
            await interaction.response.edit_message(content="You choose Undefined!", view=self)

@client.command(name="setgender")
async def setgender(ctx):
    await ctx.send(view=verify())

关键改动说明

  • 修正interaction参数类型为discord.Interaction,确保交互对象被正确识别。
  • 将interaction.response.send_message替换为interaction.response.edit_message,并传入更新后的view=self,同步组件禁用状态到服务器,解决状态不一致问题。
  • 可选添加timeout=None,让视图不会因超时失效(适合需要长期可用的场景)。
  • 把多个独立if改为elif,优化逻辑严谨性,减少不必要的判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:00:46