You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:20:51