Discord.js v14:非构建器设置服务器斜杠命令及权限配置疑问
在Discord.js v14中为服务器级斜杠命令设置角色权限
在Discord.js v14中,斜杠命令的权限配置需要单独通过ApplicationCommandPermissionsManager操作,无法直接在client.application.commands.set的命令定义中完成。以下是实现仅允许指定角色使用服务器级命令的完整代码:
export default async function(client) { // 定义命令列表 const commands = [ { name: 'start', description: '启动服务', }, { name: 'stop', description: '停止服务', }, ]; // 批量创建服务器级斜杠命令 const createdCommands = await client.application.commands.set(commands, process.env.GUILD); const guildId = process.env.GUILD; // 替换为你要授权的目标角色ID const allowedRoleId = '目标角色ID'; // 为每个命令设置权限 for (const command of createdCommands) { // 构造权限规则:允许指定角色使用,拒绝服务器所有普通成员 const permissionSettings = [ { id: allowedRoleId, type: 2, // 类型2代表角色 permission: true, }, { id: guildId, // @everyone角色的ID等于服务器ID type: 2, permission: false, }, ]; // 应用权限配置 await command.permissions.set({ permissions: permissionSettings, guild: guildId }); } }
关键说明
- 必须先创建命令,再通过
command.permissions.set()设置权限,因为需要依赖创建后的命令对象 - 权限对象的
type取值:1=用户,2=角色,3=频道 - @everyone角色的ID就是服务器本身的ID,设置它的权限为
false可以确保只有指定角色能触发命令 - 机器人账号需要拥有
ManageGuild或ManageRoles权限,才能修改命令权限
内容的提问来源于stack exchange,提问作者wyndmill
相关产品推荐
相关产品推荐

