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

discord.js实现频道锁定功能调用overwritePermissions方法报错如何解决

报错原因

  • message.channel.overwritePermissions 方法传参不符合Discord.js的接口要求:
    1. 该方法在v12及更早版本中,需要传入包含目标角色/用户ID、权限规则的覆盖对象数组,不能直接传入权限键值对作为唯一参数;
    2. v13及以上版本中该方法已被移除,替换为permissionOverwrites.set(),传参规则同样要求明确指定权限生效的目标对象。
  • 逻辑不符合需求:你已获取服务器全体成员的默认角色allRole,但未将其作为权限设置的目标,且SEND_MESSAGES: true的配置和频道锁定的预期效果相反。
  • 版本兼容问题:v13及以上版本中message.member.hasPermission()方法已废弃,需替换为message.member.permissions.has()。

修复方案

适用Discord.js v12版本

if (message.member.hasPermission("MUTE_MEMBERS")) {
  let allRole = message.guild.roles.cache.find(r => r.id === '902820481110011934');
  // 给全体默认角色设置禁止发消息,实现锁定
  message.channel.updateOverwrite(allRole, {
    SEND_MESSAGES: false
  }).then(() => {
    message.channel.send("频道已锁定");
  }).catch(err => console.error(err));
} else {
  message.channel.send("You don't have permission to do this!");
}

适用Discord.js v13及以上版本

const { PermissionFlagsBits } = require('discord.js');

if (message.member.permissions.has(PermissionFlagsBits.MuteMembers)) {
  const allRole = message.guild.roles.cache.get('902820481110011934');
  await message.channel.permissionOverwrites.edit(allRole, {
    [PermissionFlagsBits.SendMessages]: false
  });
  message.channel.send("频道已锁定");
} else {
  message.channel.send("You don't have permission to do this!");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:09:02