Ошибка диапазона [BITFIELD_INVALID] при проверке перезаписи разрешений (Discord.js версия 12)

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

Я пытался создать команду блокировки, в которой пользователь может выбрать, какое разрешение будет перезаписано. Однако это работает только в том случае, если 3-й и 4-й if операторы (которые проверяют существующие перезаписи разрешений) удалены, поскольку возникает следующая ошибка: RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number. Существует ли обходной путь для этого?

 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);
        });
      }
  

Ответ №1:

Я думаю, это потому, что вы используете READ_MESSAGES вместо того, чтобы использовать VIEW_CHANNEL везде (это одно и то же, и я думаю, что READ_MESSAGES это было удалено из Discord.js версия 12).

Комментарии:

1. Спасибо, да, я действительно использовал READ_MESSAGES вместо SEND_MESSAGES