Discord.js中调用permissionOverwrites.set时数据无法执行的问题
Discord.js 频道权限覆盖设置失败问题解决
问题核心
你代码里的ArrayPermission数组结构不符合Discord.js的要求,permissionOverwrites.set()接受的是直接包含id、allow、deny字段的对象数组,但你给的是嵌套了PermissionOverwrites外层键的结构,这会导致API无法识别参数。另外还有几个冗余/不严谨的点:
- 用
map配合push属于冗余写法,直接用map生成数组更高效 user != 0的判断逻辑不够严谨,建议用存在性判断替代
修正后的代码
// 初始化权限数组,直接过滤并映射为正确格式 const ArrayPermission = interaction.channel.permissionOverwrites.cache .filter(f => { const targetId = user ? user.id : interaction.guild.roles.everyone.id; return f.id !== targetId; }) .map(x => ({ id: x.id, deny: x.deny.bitfield, allow: x.allow.bitfield })); // 添加新的权限规则,保持格式和原有元素一致 const targetId = user ? user.id : interaction.guild.roles.everyone.id; ArrayPermission.push({ id: targetId, [status]: value }); // 执行权限设置(需在异步函数中,添加await确保操作完成) await interaction.channel.permissionOverwrites.set(ArrayPermission);
关键说明
- 移除了多余的
PermissionOverwrites外层键,每个数组元素直接是权限配置对象 - 用
const声明变量避免全局污染 - 提取重复的
targetId逻辑,提升代码可读性 - 补充
await确保异步权限设置操作执行完成
内容的提问来源于stack exchange,提问作者Hi 1999
相关产品推荐
相关产品推荐

