Discord.js 多频道权限配置:@everyone与自定义角色权限设置问题
Discord.js 分类频道权限配置问题修复
现存问题汇总
- 语法错误:你用括号包裹
roles.create、channels.create方法时,内部多余添加了分号,直接触发语法解析报错 - 异步时序错误:角色创建为异步操作,未等待角色创建完成就尝试调用其ID配置频道权限,会出现找不到目标角色的报错
- 权限规则缺失:
permissionOverwrites配置数组中没有添加自定义角色rolee的允许权限规则
修正后完整代码
// 外层函数需要是async修饰的异步函数,否则无法使用await async function createCategoryWithPermissions() { // 先获取@everyone角色 const everyoneRole = message.guild.roles.cache.find(role => role.name === '@everyone'); // 先创建自定义角色,等待创建完成再获取实例 const rolee = await message.guild.roles.create({ data: { name: rolename, color: '3498DB', }, }); // 创建分类频道,配置两组权限规则 const cat = await message.guild.channels.create(category, { type: "category", position: 999, permissionOverwrites: [ { id: everyoneRole.id, deny: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'CONNECT', 'SPEAK'], }, { id: rolee.id, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'CONNECT', 'SPEAK'], } ] }); }
注意事项
- 所有Discord.js的资源创建方法都是异步返回Promise的,必须用
await等待操作完成后再调用返回的实例属性 - 权限字符串必须完全匹配Discord.js官方定义的权限位名称,大小写、拼写错误都会触发权限配置失败
- 代码运行前确保你的机器人账号拥有
MANAGE_ROLES、MANAGE_CHANNELS权限,否则无法创建角色和修改频道权限
内容的提问来源于stack exchange,提问作者Khad
相关产品推荐
相关产品推荐

