javascript - 有没有办法检查频道覆盖?(Discord.js v12)
问题描述
我正在创建一个用于锁定频道的命令并使用该.updateOverwrite()
方法来执行此操作。使用下面的代码,我试图检查通道是否已VIEW_CHANNEL
设置为 false 并因此响应错误消息。但是,即使频道已经被锁定,它仍然会再次“锁定”它并跳过检查,这个检查似乎只在频道解锁时被触发。是否有其他方法来检查频道覆盖?
if (message.member.hasPermission('MANAGE_CHANNELS')) {
if (!message.guild.roles.everyone.permissions.has('VIEW_CHANNEL')) {
const errorEmbed = new Discord.MessageEmbed()
.setDescription(`❌ '${message.channel.name}' is already locked.`)
.setColor('RED');
message.channel.send(errorEmbed);
}
else{
message.channel.updateOverwrite(message.channel.guild.roles.everyone, { VIEW_CHANNEL: false }).then(() => {
const msgEmbed = new Discord.MessageEmbed()
.setDescription(`✅ '${message.channel.name}' has been locked.`)
.setColor('GREEN');
message.channel.send(msgEmbed);
});
}
}
else {
const warningEmbed = new Discord.MessageEmbed()
.setDescription(' Sorry, you do not have sufficient permissions to do this.')
.setColor('YELLOW');
message.channel.send(warningEmbed);
}
解决方案
您需要检查channel的权限,您当前正在检查全局角色权限。这是更新的代码:
if (message.member.hasPermission('MANAGE_CHANNELS')) {
if (!message.channel.permissionsFor(message.guild.roles.everyone).has('VIEW_CHANNEL')) {
const errorEmbed = new Discord.MessageEmbed()
.setDescription(`❌ '${message.channel.name}' is already locked.`)
.setColor('RED');
message.channel.send(errorEmbed);
}
else{
message.channel.updateOverwrite(message.channel.guild.roles.everyone, { VIEW_CHANNEL: false }).then(() => {
const msgEmbed = new Discord.MessageEmbed()
.setDescription(`✅ '${message.channel.name}' has been locked.`)
.setColor('GREEN');
message.channel.send(msgEmbed);
});
}
}
else {
const warningEmbed = new Discord.MessageEmbed()
.setDescription(' Sorry, you do not have sufficient permissions to do this.')
.setColor('YELLOW');
message.channel.send(warningEmbed);
}
推荐阅读
- html - WCAG 2.0 验证错误:在此上下文中,元素 span= 不允许作为元素 a 的子级。(抑制来自该子树的更多错误。)
- bash - 将 BASH 变量中的数据插入到 sql 查询中
- javascript - How to change the class of one object inside a Vue container?
- sql - PL/SQL:在 for 循环中加入语句
- r - 我如何编写自己的函数来自动计算 R 中的临床特征和基因
- python - Django ORM:如果表B中具有相同的id(FK),则从表A中选择行,如果满足条件,则选择A中的行:
- audio - 如何从音频文件中删除静音,同时保留一些原本被删除的部分?
- python - NameError 在理解中引用类变量
- spring-boot - 在 Websphere 8.5.5.16 上部署 Spring boot 2.2.1 解决方案时遇到问题
- liquibase - CockroachDB 中 dropIndex 的 CASCADE