Discord.js创建频道时如何避免自动同步所属分类的权限
Discord.js创建子频道时取消父分类权限同步的解决方法
当前写法的问题有两个:
- 先创建绑定父分类的频道时没有指定自定义权限,触发了Discord默认的父分类权限同步逻辑
- 直接给
channel.permissionOverwrites赋值是无效的,Discord.js不支持直接修改该属性,必须调用官方提供的方法修改权限
方案1:创建频道时直接指定权限(推荐)
创建频道时直接传入permissionOverwrites参数,此时频道不会自动同步父分类的权限,直接使用你指定的规则:
message.guild.channels .create('test', { type: 'text', parent: '868148689644957726', permissionOverwrites: [ { type: 'member', id: message.member.id, allow: ['VIEW_CHANNEL'], }, // 可在此追加其他角色/成员的权限规则 ] })
方案2:频道创建完成后主动覆盖权限
如果需要先创建频道再修改权限,调用permissionOverwrites.set()方法即可,该操作会自动断开和父分类的权限同步:
message.guild.channels .create('test', { type: 'text', parent: '868148689644957726', }) .then(async (channel) => { await channel.permissionOverwrites.set([ { type: 'member', id: message.member.id, allow: ['VIEW_CHANNEL'], }, ]); });
版本适配说明
如果你使用的是Discord.js v14及以上版本,需要调整频道类型参数:
- 先从discord.js导入枚举:
const { ChannelType } = require('discord.js') - 将创建参数中的
type: 'text'修改为type: ChannelType.GuildText
内容的提问来源于stack exchange,提问作者Patrick Frederiksen
相关产品推荐
相关产品推荐

