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

Discord机器人下拉菜单报错:AttributeError问题求助

问题分析

报错AttributeError: 'Interaction' object has no attribute 'disabled'的核心原因是你在select_callback方法里错误地将Interaction对象当成了下拉菜单(SelectMenu)组件来操作。回调函数的第一个参数是交互对象(Interaction),而非你创建的下拉菜单实例,自然没有disabled属性。

解决方案

要解决这个问题,你需要先获取到目标下拉菜单组件的实例,再修改其disabled属性,最后更新消息的组件状态。有两种常用实现方式:

方式1:在HelpMenu类中保存下拉菜单引用

在初始化HelpMenu时,将创建的SelectMenu实例保存为类属性,后续在回调中直接调用该属性修改状态:

import discord
from discord.ui import Select, View

class HelpMenu(View):
    def __init__(self):
        super().__init__(timeout=None)
        # 创建下拉菜单并保存为类属性
        self.select = Select(
            placeholder="选择命令分类",
            options=[
                discord.SelectOption(label="基础命令", value="basic"),
                discord.SelectOption(label="管理命令", value="admin")
            ]
        )
        self.select.callback = self.select_callback
        self.add_item(self.select)

    async def select_callback(self, interaction: discord.Interaction):
        # 正确使用类属性中的下拉菜单实例
        self.select.disabled = True
        # 更新消息组件,使禁用状态生效
        await interaction.response.edit_message(view=self)
        # 后续执行你的命令逻辑
        category = interaction.data["values"][0]
        await interaction.followup.send(f"你选择了{category}分类", ephemeral=True)

方式2:从交互消息中查找下拉组件

如果不想保存类属性,可以从interaction.message.components中遍历找到目标SelectMenu组件:

async def select_callback(self, interaction: discord.Interaction):
    # 遍历消息组件找到SelectMenu
    for component in interaction.message.components:
        for item in component.children:
            if isinstance(item, Select):
                item.disabled = True
                break
    # 更新消息组件
    await interaction.response.edit_message(view=interaction.message.view)
    # 后续逻辑...
关键注意点
  • 修改组件属性后,必须通过interaction.response.edit_message()或interaction.followup.edit()更新消息的view,否则前端不会显示状态变化。
  • 如果你的HelpMenu是临时生成的,确保在修改后传递的view是当前实例(或更新后的view对象)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:42:05