#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