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

discord.js v13中Slash命令仅能在单个Discord服务器生效吗?

报错原因

你遇到的TypeError: Cannot read properties of undefined (reading 'set')错误根本原因是:bot.guilds.cache.map(guild => guild.id)返回的是由所有服务器ID组成的纯数组,数组本身没有commands属性,自然无法调用set方法。

解决方案

你可以根据需求选择以下两种注册方式:

方案1:注册全局Slash命令(推荐)

Discord原生支持全局级别的Slash命令,注册后会自动同步到所有机器人已加入的服务器,不需要手动逐个传入服务器ID操作。
注册单条命令代码:
bot.application.commands.set(command)
批量注册多条命令直接传入命令数组即可:
bot.application.commands.set([command1, command2, command3])
注意:全局命令的同步存在传播延迟,最长可能需要1小时才能在所有服务器生效,适合不紧急的命令更新场景

方案2:遍历所有服务器即时注册(适用于需要立即生效的场景)

如果需要命令在所有服务器立即可用,你可以正确遍历缓存中的所有服务器对象,逐个执行注册操作:
示例代码:

// 遍历所有已缓存的服务器
for (const guild of bot.guilds.cache.values()) {
  await guild.commands.set(command.name, command)
  // 如果服务器数量较多,建议每次注册后加1~2秒延迟,避免触发Discord速率限制
  // await new Promise(resolve => setTimeout(resolve, 1500))
}

注意:如果机器人加入的服务器数量超过100个,不建议使用该方法,频繁调用接口很容易被限制请求,优先使用全局命令注册

内容的提问来源于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 01:54:07