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

如何清除Guilds与application.commands中的重复斜杠命令?

解决Discord斜杠命令重复创建后的清除问题

一、全局命令清除的正确姿势

client.application.commands.set([]) 本身是清除全局斜杠命令的正确方法,但你可能忽略了一个关键点:全局命令的同步有1小时左右的缓存延迟,执行完代码后不会立刻在客户端看到变化,得等Discord的缓存刷新。

另外要确保代码在客户端就绪后执行,不然client.application可能没正确初始化,示例代码:

client.on('ready', async () => {
  await client.application.commands.set([]);
  console.log('全局命令清除请求已提交,等待缓存刷新');
});

二、服务器级命令的单独清除

全局命令的清除操作不会影响服务器专属的斜杠命令,你需要单独处理每个服务器:

  • 批量清除所有机器人加入的服务器命令:
client.on('ready', async () => {
  // 先清全局命令
  await client.application.commands.set([]);
  
  // 遍历所有服务器清命令
  for (const guild of client.guilds.cache.values()) {
    try {
      await guild.commands.set([]);
      console.log(`已清除服务器「${guild.name}」的斜杠命令`);
    } catch (err) {
      console.error(`清除服务器「${guild.name}」命令失败:`, err);
    }
  }
});
  • 只清除特定服务器的命令:
const targetGuildId = '你的目标服务器ID';
const guild = client.guilds.cache.get(targetGuildId);
if (guild) {
  await guild.commands.set([]);
}

三、排查set([])无效的常见问题

  • 权限不够:机器人账号必须有applications.commands权限,并且在对应服务器里拥有「管理服务器」权限。
  • 代码执行时机不对:一定要在ready事件触发后再执行命令操作,否则客户端实例还没准备好,调用方法会无效。
  • 客户端缓存没刷新:就算代码执行成功,Discord客户端可能还显示旧命令,试试退出重进客户端,或者等几分钟。
  • 命令是在开发者门户创建的:如果有些命令是你直接在Discord开发者门户里手动添加的,用代码set([])可能清不掉,得去开发者门户的「Bot」->「Commands」页面手动删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:01:28