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

如何通过discord.js修改@everyone角色的VIEW_CHANNELS权限以隐藏所有频道?

批量修改所有频道的@everyone角色权限

要实现隐藏所有频道,你需要遍历服务器内的所有频道(包括文本、语音、分类频道),逐个修改它们的权限覆盖设置,而不是直接调用Role的方法。你的代码错误在于用了Role.updateOverwrite——这个方法不存在,权限覆盖是针对频道设置的,得用频道对象的updateOverwrite方法。

正确实现代码

// 获取服务器的@everyone角色(无需手动填ID,这个属性直接获取)
const everyoneRole = guild.roles.everyone;

// 遍历服务器内所有频道(text、voice、category都包含)
guild.channels.cache.forEach(channel => {
  // 对每个频道设置@everyone的VIEW_CHANNEL权限为false
  channel.updateOverwrite(everyoneRole, {
    VIEW_CHANNEL: false
  }).catch(error => {
    console.log(`修改频道 ${channel.name} 权限失败: ${error}`);
  });
});

代码说明

  • guild.roles.everyone:直接获取服务器的@everyone角色,比手动写ID更可靠,避免ID写错或角色变更的问题。
  • guild.channels.cache.forEach:遍历服务器缓存里的所有频道,确保每个频道都被处理。
  • channel.updateOverwrite:这是频道对象的方法,用来给指定角色/用户设置该频道的权限覆盖,这里我们禁用@everyone的查看频道权限。
  • 错误捕获:每个频道的修改都单独捕获错误,避免一个频道失败导致整个循环终止,还能看到具体哪个频道出了问题。

注意事项

  • 你的机器人需要有管理频道的权限,否则无法修改频道权限。
  • 如果服务器有大量频道,建议用异步遍历(比如for...of配合await),避免一次性发送太多请求被Discord限流:
const everyoneRole = guild.roles.everyone;

// 异步遍历,避免限流
for (const channel of guild.channels.cache.values()) {
  try {
    await channel.updateOverwrite(everyoneRole, { VIEW_CHANNEL: false });
    console.log(`成功修改频道 ${channel.name} 权限`);
  } catch (error) {
    console.log(`修改频道 ${channel.name} 权限失败: ${error}`);
  }
}

内容的提问来源于stack exchange,提问作者traavvypatty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:02:32