首页 > 解决方案 > 有没有办法检查频道覆盖?(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);
    }

标签: javascriptnode.jsdiscord.js

解决方案


您需要检查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);
    }

推荐阅读