Discord分类内创建带特定权限文本频道遇权限修改失败
解决思路及修正方案
核心问题在于你使用了错误的权限方法名称,且未匹配Discord.js对应版本的API规范。以下是针对性的解决步骤:
1. 确认Discord.js版本
不同版本的Discord.js权限操作API差异很大:
- v12及更早版本:使用
updateOverwrite/overwritePermissions - v13/v14版本:权限覆盖操作统一移至
channel.permissionOverwrites对象下
2. 正确的权限设置方法
针对v14版本(当前主流稳定版)
使用permissionOverwrites.set()批量设置权限覆盖,同时注意权限需使用PermissionsBitField.Flags常量(不能直接传字符串):
const { PermissionsBitField } = require('discord.js'); guild.channels.create({ name: "》《🆔》" + user.user.username, type: 0, parent: "1067910662644314153" // 直接在创建时指定父分类,无需额外调用setParent }) .then(channel => { // 批量设置权限覆盖 channel.permissionOverwrites.set([ // 允许被提及用户访问 { id: user.user.id, allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages] }, // 允许命令调用者访问 { id: author.id, allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages] }, // 拒绝所有普通成员访问(继承分类权限后,需要显式拒绝) { id: guild.roles.everyone, deny: [PermissionsBitField.Flags.ViewChannel] } ]); });
针对v13版本
逻辑与v14类似,仅权限常量为Permissions.FLAGS:
const { Permissions } = require('discord.js'); guild.channels.create({ name: "》《🆔》" + user.user.username, type: 'GUILD_TEXT', // v13中type需用字符串枚举 parent: "1067910662644314153" }) .then(channel => { channel.permissionOverwrites.set([ { id: user.user.id, allow: [Permissions.FLAGS.VIEW_CHANNEL, Permissions.FLAGS.SEND_MESSAGES] }, { id: author.id, allow: [Permissions.FLAGS.VIEW_CHANNEL, Permissions.FLAGS.SEND_MESSAGES] }, { id: guild.roles.everyone, deny: [Permissions.FLAGS.VIEW_CHANNEL] } ]); });
针对v12及更早版本
使用overwritePermissions方法:
guild.channels.create("》《🆔》" + user.user.username, { type: 'text', parent: "1067910662644314153" }) .then(channel => { channel.overwritePermissions([ { id: user.user.id, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES'] }, { id: author.id, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES'] }, { id: guild.roles.everyone, deny: ['VIEW_CHANNEL'] } ]); });
3. 关键注意点
- 必须显式拒绝
@everyone的VIEW_CHANNEL权限,否则服务器所有成员都能看到该频道(因为分类权限可能默认允许访问) - 服务器管理员默认拥有所有频道权限,无需额外设置
- 创建频道时直接指定
parent参数,比后续调用setParent更高效
内容的提问来源于stack exchange,提问作者JAWS Developers
相关产品推荐
相关产品推荐

