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

如何在Discord Cogs中构建选择菜单?交互失败问题求助

问题分析与解决办法

你的代码存在两个核心问题,直接导致了"Interaction failed"提示:

1. 回调函数语法错误(缩进问题)

select_callback函数内部的代码没有缩进,这会触发语法错误,机器人处理交互时会抛出异常,无法正常响应请求。

2. 数据类型不匹配

你给选项设置的value是整数类型(1、2、3),但回调函数里判断的是字符串类型('1'、'2'、'3'),条件永远无法成立,因此没有发送任何响应给Discord,平台等待超时后就会判定交互失败。


修正后的代码

import discord
from discord.ext import commands
from discord import app_commands

async def select_callback(interaction: discord.Interaction):
    # 修复缩进问题
    result = interaction.data.get('values')
    result = result[0]
    print(result)
    # 统一数据类型,改为判断整数
    if result == 1:
        await interaction.response.send_message("success1")
    elif result == 2:
        await interaction.response.send_message('success2')
    elif result == 3:
        await interaction.response.send_message("success3")


class aButton(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @app_commands.command(name = "view_base", description = "Simple View Example")
    async def view_base(self, interaction: discord.Interaction):
        view = discord.ui.View()
        select1 = discord.ui.Select()
        select1.add_option(label="A", value = 1, description="Explain a")
        select1.add_option(label="B", value = 2, description="Explain B")
        select1.add_option(label="C", value = 3, description="Explain C")
        select1.callback = select_callback
        view.add_item(select1)
        await interaction.response.send_message(view = view)


async def setup(bot):
    await bot.add_cog(aButton(bot))

更规范的写法(推荐)

使用类继承定义Select组件,避免直接赋值callback的潜在作用域问题,代码也更易维护:

import discord
from discord.ext import commands
from discord import app_commands

class MySelect(discord.ui.Select):
    def __init__(self):
        options = [
            discord.SelectOption(label="A", value=1, description="Explain a"),
            discord.SelectOption(label="B", value=2, description="Explain B"),
            discord.SelectOption(label="C", value=3, description="Explain C")
        ]
        super().__init__(options=options)

    async def callback(self, interaction: discord.Interaction):
        result = self.values[0]
        print(result)
        if result == 1:
            await interaction.response.send_message("success1")
        elif result == 2:
            await interaction.response.send_message('success2')
        elif result == 3:
            await interaction.response.send_message("success3")

class MyView(discord.ui.View):
    def __init__(self):
        super().__init__()
        self.add_item(MySelect())

class aButton(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @app_commands.command(name = "view_base", description = "Simple View Example")
    async def view_base(self, interaction: discord.Interaction):
        await interaction.response.send_message(view=MyView())

async def setup(bot):
    await bot.add_cog(aButton(bot))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:44