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

discord.js v13斜杠命令新增不显示、重复注册问题如何解决?

Discord.js v13 斜杠命令新增不生效/重复问题解决方案

问题根因

  • bot.commands.set()仅用于本地存储命令逻辑的映射,方便后续交互触发时匹配对应执行代码,不会主动调用Discord官方API完成斜杠命令的注册/更新
  • 首次邀请机器人自动注册是部分模板自带的「加入服务器时批量注册命令」逻辑,重复邀请会多次触发注册逻辑,进而生成重复命令条目
  • Discord斜杠命令分为两类:全局命令生效最长有1小时CDN缓存,服务器专属命令注册后即时生效

具体解决步骤

第一步:清理现有重复命令

先清空已注册的残留命令,避免后续冲突,执行以下代码即可(需在机器人ready事件触发后运行,确保客户端实例已完成初始化):

// 清理指定服务器的所有专属命令
const targetGuild = await client.guilds.fetch('你的目标服务器ID');
await targetGuild.commands.set([]);

// 清理所有全局命令
await client.application.commands.set([]);

第二步:改用正确的注册逻辑

不要逐个调用命令创建接口,推荐使用全量覆盖的注册方式,会自动同步本地命令列表的新增、修改、删除操作,不会生成重复条目。

开发测试场景(用服务器专属命令,即时生效)

client.on('ready', async () => {
  const devGuild = client.guilds.cache.get('你的开发服务器ID');
  // 提取本地所有命令的配置数据
  const commandList = client.commands.map(cmd => cmd.data.toJSON());
  // 全量覆盖注册,自动同步差异
  await devGuild.commands.set(commandList);
  console.log('开发服务器命令同步完成');
});

上线运营场景(用全局命令,覆盖所有加入的服务器)

client.on('ready', async () => {
  // 提取本地所有命令的配置数据
  const commandList = client.commands.map(cmd => cmd.data.toJSON());
  // 全量覆盖注册全局命令,首次提交最长1小时全服生效
  await client.application.commands.set(commandList);
  console.log('全局命令同步完成');
});

注意事项

  • 命令注册逻辑仅需在机器人启动时、或你修改了命令配置后运行一次即可,不要在交互事件等高频逻辑中调用,避免触发Discord API限流
  • 如果此前你在「机器人加入服务器」的事件逻辑中使用逐个create的方式注册命令,将其替换为上述set全量覆盖的逻辑即可彻底解决重复注册问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:45:02