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

discord.js v13斜杠命令中通过UserId获取GuildMember的实现方法

问题根因

你用的client.api.applications(...).commands.post是discord.js v12时期的内部私有API调用方式,这类接口没有对外做稳定性承诺,v13及之后的大版本更新时,内部接口路径、鉴权逻辑都做了调整,旧写法直接失效。目前discord.js稳定版(v14)已经封装了标准化的斜杠命令注册方法,不要直接调用client.api下的未公开路径。

前置要求
  • 使用discord.js v14稳定版本
  • 在Discord开发者门户为机器人开启applications.commands权限,邀请机器人进入服务器时,必须勾选同名称的授权scope,否则会报权限错误
可直接运行的实现代码

所有注册逻辑建议放在client.on('ready')回调里执行,确保机器人和Discord网关连接完成后再调用接口。

单公会(服务器)命令注册

适合开发调试阶段使用,注册后即时生效,最长延迟不超过1分钟:

// 替换为你要注册命令的目标服务器ID
const TARGET_GUILD_ID = "你的服务器ID";
// 命令配置,和你原有配置结构兼容
const testCommand = {
  name: "test",
  description: "测试命令",
  options: [] // 按需填写命令参数选项
};

client.on("ready", async () => {
  try {
    const targetGuild = client.guilds.cache.get(TARGET_GUILD_ID);
    if (!targetGuild) throw new Error("机器人未加入目标服务器,无法注册命令");
    // 提交注册,set方法会全量覆盖该服务器下当前机器人的所有命令
    await targetGuild.commands.set([testCommand]);
    console.log("单公会斜杠命令注册完成");
  } catch (err) {
    console.error("注册失败:", err);
  }
});

全局命令注册

适合正式生产环境使用,注册后Discord会做全球节点缓存,最长需要1小时才能在所有服务器生效,生效后所有和机器人共存的服务器都能看到该命令:

const formalCommand = {
  name: "formal-command",
  description: "正式上线的命令",
  options: []
};

client.on("ready", async () => {
  try {
    // 提交全局命令注册,set方法会全量覆盖当前机器人的所有全局命令
    await client.application.commands.set([formalCommand]);
    console.log("全局斜杠命令提交成功,等待缓存生效即可");
  } catch (err) {
    console.error("注册失败:", err);
  }
});
注意事项
  • 命令名称必须为全小写,不能包含大写字母、特殊空格/符号,长度在1-32字符之间;命令描述长度在1-100字符之间,不符合规则会直接注册报错
  • Discord对命令注册接口有严格频率限制,不要在每次收到消息、每次交互触发时都调用注册接口,建议本地调试时手动触发注册,正式环境只在命令配置有更新时提交一次即可
  • 如果需要配置命令的调用权限(比如仅管理员可调用),可以在命令注册完成后,调用对应命令实例的permissions.set方法配置权限规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:21:53