Discord选择菜单按钮无响应,点击提示‘操作失败’求助
解决Discord性别验证Select菜单点击后"This action failed"错误
错误原因分析
你的代码存在两个核心问题导致报错:
- 类型拼写错误:回调函数里的
interaction参数类型写成了discord.Integration,正确类型应为discord.Interaction,类型不匹配会导致Discord无法正常处理交互请求。 - 视图状态未同步:设置
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
相关产品推荐
相关产品推荐

