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

discord.js v12.5.3 删除斜杠命令触发DiscordAPIError:404错误如何解决?

错误原因

你触发404的核心原因是请求路径非法:从报错返回的path字段可以看到,路径里重复拼接了多段/commands/[命令ID],这是因为你提前定义的guildCommands是可变的discord.js API构建对象,每次循环调用.commands(slashCommand.id)都会直接修改这个对象的已拼接路径:

  • 第一次循环删除时路径为/applications/[应用ID]/guilds/[服务器ID]/commands/[命令1ID],路径正常
  • 第二次循环删除时会在上述路径后继续追加/commands/[命令2ID],路径已经非法
  • 循环次数越多追加的路径段越多,最终触发404不存在错误

额外还有一个隐藏问题:你用forEach包裹异步删除逻辑,async/await不会按预期等待所有删除请求执行完成,可能出现部分命令漏删的情况。

修复方案

推荐两种实现方式,按需选择即可:

方式1:循环单删(适合删除指定部分命令)

每次请求都重新构建完整路径,同时把forEach替换为for...of保证异步逻辑顺序执行:

async function getCommands(guild) {
    return client.api
        .applications(client.user.id)
        .guilds(guild.id)
        .commands.get();
}

let slashCommands = await getCommands(guild).catch(console.error);
for (const slashCommand of slashCommands) {
    await client.api
        .applications(client.user.id)
        .guilds(guild.id)
        .commands(slashCommand.id)
        .delete();
}

方式2:批量覆盖清空(适合清空所有服务器命令,效率更高)

如果你的需求是清空当前服务器所有已部署的斜杠命令,不需要循环删除,直接调用批量覆盖接口传空数组即可:

await client.api
    .applications(client.user.id)
    .guilds(guild.id)
    .commands.put({ data: [] });

内容的提问来源于stack exchange,提问作者shestakov-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:57:01