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

Discord.js开发:如何设置频道权限禁@everyone查看仅允许工单发起者访问

问题修复方案

错误点说明

  • 变量引用错误:获取@everyone角色时使用了未定义的msg对象,上下文仅存在message对象,直接触发引用报错
  • 权限配置语法错误:permissionOverwrites数组要求每个权限主体对应一个独立对象,你将@everyone和用户的权限写在同一个对象内,后面的id会覆盖前值,导致@everyone的权限规则完全失效
  • 语法结构不完整:当前代码片段存在多处大括号、括号未闭合问题,运行直接报语法错误
  • 异步上下文缺失:guild.channels.create使用了await,但外层函数未声明为async,会触发语法错误
  • 版本适配提示:若使用Discord.js v14及以上版本,创建文本频道需额外指定频道类型参数,否则创建失败

修复后代码示例

// 注意:当前代码所在的外层函数必须添加async关键字,否则await会报错
async function yourFunctionName(message) {
  if (message.channel.type !== "text") {
    let active = db.fetch(`support_${message.author.id}`)
    let guild = client.guilds.cache.get('替换为你的服务器ID')
    let channel, found = true

    try {
      if (active) client.channels.cache.get(active.channelID).guild
    } catch (e) {
      found = false;
    }

    if(!active || !found) {
      active = {}
      // 修复变量名错误,将msg改为message
      let everyoneRole = message.guild.roles.cache.find(r => r.name === '@everyone');

      channel = await guild.channels.create(`${message.author.username}-${message.author.discriminator}`, {
        // 若为Discord.js v14+ 请取消下面这行注释,同时导入ChannelType
        // type: ChannelType.GuildText,
        parent: '替换为你的分类ID',
        topic: `Support for ${message.author.tag} | ID: ${message.author.id}`,
        // 修复权限配置错误,拆分为两个独立的权限对象
        permissionOverwrites: [
          {
            id: everyoneRole.id,
            deny: ['VIEW_CHANNEL'],
          },
          {
            id: message.author.id,
            allow: ['VIEW_CHANNEL'],
          }
        ],
      })
      // 后续业务逻辑补充:将频道ID写入数据库留存
      db.set(`support_${message.author.id}`, {
        channelID: channel.id
      })
    }
  }
}

内容的提问来源于stack exchange,提问作者Jason H - Wizard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:07