discord.js实现频道锁定功能调用overwritePermissions方法报错如何解决
报错原因
message.channel.overwritePermissions方法传参不符合Discord.js的接口要求:- 该方法在v12及更早版本中,需要传入包含目标角色/用户ID、权限规则的覆盖对象数组,不能直接传入权限键值对作为唯一参数;
- 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
相关产品推荐
相关产品推荐

