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

Discord斜杠命令运行正常但提示interaction failed无报错如何解决?

用户提交的命令运行状态截图:
命令运行状态截图

问题产生原因

Discord 斜杠命令有强制规则:服务端必须在交互触发后3秒内返回响应,否则就会弹出「interaction failed」提示。你当前的代码只执行了往频道发送 embed 的逻辑,没有给触发命令的interaction对象返回任何响应,因此就算功能实际运行成功,也会触发超时报错。
另外你代码里then回调的参数命名为interaction,会覆盖外层的交互对象,属于潜在的逻辑隐患。

修复方案

只需要在处理业务逻辑前给交互返回响应即可,你可以根据需求选择响应方式:

  • 若需要给发起命令的用户反馈,返回仅对方可见的消息即可
  • 若不需要给用户任何可见提示,可以先延迟响应再删除回复,Discord 就不会弹出报错

修复后的参考代码:

const { SlashCommandBuilder } = require("@discordjs/builders");
const { MessageEmbed } = require("discord.js");

module.exports = {
  data: new SlashCommandBuilder()
    .setName("suggest")
    .setDescription("将你的建议发送到指定频道")
    .addStringOption((option) =>
      option
        .setName("suggestion")
        .setDescription("你要提交的建议内容")
        .setRequired(true)
    ),
  async execute(interaction) {
    let suggestion = interaction.options.getString("suggestion");
    const embed = new MessageEmbed()
      .setColor("#0099ff")
      .setTitle(`${interaction.member.displayName} 提交了新建议`)
      .setDescription(`${suggestion}`);
    
    // 给交互返回响应,ephemeral参数表示只有发起命令的用户能看到这条消息
    await interaction.reply({ content: "你的建议已提交成功", ephemeral: true });

    await interaction.channel
      .send({
        embeds: [embed],
      })
      .then(function (message) {
        // 修改参数名避免覆盖外层的interaction对象
        message.react(`👍`).then(() => message.react(`👎`));
      });
  },
};

如果不需要用户看到任何提示,可以把上面的interaction.reply部分替换为以下代码:

// 延迟响应,标记为仅发起者可见
await interaction.deferReply({ ephemeral: true });
// 直接删除回复,用户不会看到任何提示
await interaction.deleteReply();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:05