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
相关产品推荐
相关产品推荐

