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

Discord.js 14如何按用户角色过滤命令列表中的显示命令?

实现按用户角色过滤可查看的Slash命令

完全可以实现这个需求,Discord支持通过命令权限配置来控制不同角色/用户能看到的命令,无需维护多套命令列表,以下是具体实现方案:

方法1:注册命令时直接配置权限

修改你提供的命令加载代码,给每个命令添加权限规则,让Discord自动过滤无权限用户可见的命令:

// 假设每个command对象包含requiredRoles(需要的角色ID数组)或requiredPermissions(权限位)属性
CommandList.forEach((command) => {
  const commandJson = command.data.toJSON() as {
    name: string;
    description?: string;
    type?: number;
    options?: APIApplicationCommandOption[];
    default_member_permissions?: string;
    permissions?: { id: string; type: number; permission: boolean }[];
  };

  // 方式A:设置默认权限(无权限用户默认看不到)
  // 比如仅允许管理员查看,权限位8对应管理员权限
  if (command.requiredPermissions) {
    commandJson.default_member_permissions = command.requiredPermissions.toString();
  }

  // 方式B:针对特定角色开放权限
  if (command.requiredRoles?.length) {
    commandJson.permissions = command.requiredRoles.map(roleId => ({
      id: roleId,
      type: 1, // 1代表角色类型
      permission: true
    }));
  }

  commandData.push(commandJson);
});

const response = (await rest.put(
  Routes.applicationGuildCommands(BOT.user?.id || "missing token", process.env.GUILD_ID as string),
  {
    body: commandData,
  },
)) as [];

logger.debug(`Successfully reloaded ${response.length} application (/) commands.`);

参数说明

  • default_member_permissions:用权限位字符串设置全局默认权限,未满足权限的用户直接看不到命令
  • permissions数组:针对特定角色/用户设置允许/拒绝权限,优先级高于默认权限

方法2:动态更新命令权限(适合后期调整)

如果需要在Bot运行过程中修改权限,可单独调用API更新单个命令的权限规则:

// 示例:给指定命令设置仅允许特定角色访问
async function updateCommandPermissions(commandId: string, allowedRoleIds: string[]) {
  const permissions = allowedRoleIds.map(roleId => ({
    id: roleId,
    type: 1,
    permission: true
  }));

  await rest.put(
    Routes.applicationGuildCommandPermissions(BOT.user?.id || "", process.env.GUILD_ID as string, commandId),
    { body: { permissions } }
  );
}

注意事项

  • Bot需要拥有ManageGuild权限才能修改命令权限
  • 权限位可参考Discord官方定义(如管理员权限为8,管理频道为1024等)
  • 若命令不需要公开给所有用户,建议先设置default_member_permissions为"0",再添加允许的角色,避免无权限用户看到命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:26:04