创建Discord频道时permissionOverwrites参数不生效问题咨询
问题原因及解决方案
核心触发原因
你遇到的问题90%以上是父分类权限自动同步机制导致的:
- 你在创建语音频道时指定了
parent: state.categories.raids参数,将频道归到指定分类下,discord.js在这种场景下默认会开启子频道与父分类的权限同步,你在permissionOverwrites中传入的自定义规则会直接被父分类的继承权限覆盖,因此不生效。 - 你在频道创建完成后单独调用
permissionOverwrites.edit修改权限,是在权限同步完成后执行的操作,不会被继承逻辑覆盖,因此可以正常生效。
次要排查点(可跳过)
- 如果你使用的是discord.js v14及以上版本,需确认你传入的权限字符串(比如
VIEW_CHANNEL)是否匹配版本要求的枚举值,不过你后续修改时用了相同的权限名生效,因此该问题可以排除。 - 确认机器人账号本身拥有
MANAGE_ROLES、MANAGE_CHANNELS权限,且机器人的角色等级高于@everyone角色,你后续修改操作可以生效也可以排除该问题。
修复方案
无需额外在回调中修改权限,只需要在创建频道的配置参数中新增lockPermissions: false,关闭父分类权限自动同步即可让你写入的permissionOverwrites规则生效,修改后的代码如下:
client.on('messageCreate', (message) => { let guild = message.guild; if(message.content === '.raid'){ const ch = guild.channels.create(`${message.member.displayName}'s raid`, { type: 'GUILD_VOICE', parent: state.categories.raids, userLimit:50, // 新增这行,关闭父分类权限自动同步 lockPermissions: false, permissionOverwrites: [ { id: state.roles.everyone, deny: ['VIEW_CHANNEL'], }, ], }) } })
内容的提问来源于stack exchange,提问作者Sylent
相关产品推荐
相关产品推荐

