简体   繁体   English

检查权限覆盖时的 RangeError [BITFIELD_INVALID] (Discord.js v12)

[英]RangeError [BITFIELD_INVALID] when checking for permission overwrites (Discord.js v12)

I was trying to create a lock command where the user can select what permission gets overwritten.我试图创建一个锁定命令,用户可以在其中 select 覆盖什么权限。 However, this only works if the 3rd and 4th if statements (which check for existing permission overwrites) are removed as the following error is produced: RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number.但是,这仅在删除第 3 和第 4 个if语句(检查现有权限覆盖)时才有效,因为会产生以下错误: RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number. Would there be a workaround for this?会有解决方法吗?

const channel = bot.channels.cache.get(args[0]);

      if(!channel) {
        return message.reply('Please provide a channel id!');
      }

      if(!args[1]) {
        return message.reply('Please set the lock type!');
      }

      if (!channel.permissionsFor(message.guild.roles.everyone).has('VIEW_CHANNEL')) {
        const errorEmbed = new Discord.MessageEmbed()
          .setDescription(`❌ \`VIEW_CHANNEL\` for \`${channel.name}\` is already disabled.`)
          .setColor('RED');
        return message.channel.send(errorEmbed);
      }

      if (!channel.permissionsFor(message.guild.roles.everyone).has('READ_MESSAGES')) {
        const errorEmbed = new Discord.MessageEmbed()
          .setDescription(`❌ \`READ_MESSAGES\` for \`${channel.name}\` is already disabled.`)
          .setColor('RED');
        return message.channel.send(errorEmbed);
      }

      else if (args[1] === 'view' || args[1] === 'read') {
        channel.updateOverwrite(message.channel.guild.roles.everyone, { VIEW_CHANNEL: false }).then(() => {
          const msgEmbed = new Discord.MessageEmbed()
            .setDescription(`✅ The channel\`${message.channel.name}\` has been locked.`)
            .setColor('GREEN');
          message.channel.send(msgEmbed);
        }).catch((error) => {
          console.log(error);
          const errorEmbed = new Discord.MessageEmbed()
            .setDescription(`❌ Unable to lock \`${channel.name}\`.`)
            .setColor('RED');
          message.channel.send(errorEmbed);
        });
      }
      else if (args[1] === 'send') {
        channel.updateOverwrite(message.channel.guild.roles.everyone, { SEND_MESSAGES: false }).then(() => {
          const msgEmbed = new Discord.MessageEmbed()
            .setDescription(`✅ The channel\`${channel.name}\` has been locked.`)
            .setColor('GREEN');
          message.channel.send(msgEmbed);
        }).catch((error) => {
          console.log(error);
          const errorEmbed = new Discord.MessageEmbed()
            .setDescription(`❌ Unable to lock \`${channel.name}\`.`)
            .setColor('RED');
          message.channel.send(errorEmbed);
        });
      }

I think it's because you're using READ_MESSAGES instead of using VIEW_CHANNEL everywhere (it's the same and I think READ_MESSAGES has been removed from Discord.js v12).我认为这是因为您使用的是READ_MESSAGES而不是到处使用VIEW_CHANNEL (它是相同的,我认为READ_MESSAGES已从 Discord.js v12 中删除)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM