RangeError[BitFieldInvalid]:无效的位字段标志或编号:ADMINISTRATOR.(disco



我已更新到discordjs v14.0.3。(此错误不在v13中(

我有一个命令处理程序,在那里我可以访问在数组中传递的命令的权限,然后我遍历每个命令并检查消息作者是否拥有权限。

command.permissions.forEach((permission) => {
if (!message.member.permissions.has(permission)) {
const perm_embed = new EmbedBuilder()
.setColor("#cf1b1b")
.setTitle(`[INFO] ${command_name}`)
.setAuthor({ name: message.author.username, iconURL: message.author.avatarURL() })
.setDescription(`Aceasta comanda cere urmatoarele permisiuni: `${command.permissions}` nDin pacate, tu nu ai urmatoarea permisiune care este nevoita: `${permission}``)
.setTimestamp();
message.reply({ embeds: [perm_embed] }).then((msg) => {
setTimeout(() => msg.delete(), 2000);
return;
});
}
});

command.permissions如下所示:["ADMINISTRATOR"]只有当没有权限的用户运行命令时,我才会收到此错误。(如果我有权限,它不会抛出错误(

RangeError〔BitFieldInvalid〕:无效的位字段标志或编号:ADMINISTRATOR。

我已经仔细检查过了,没有任何打字错误。

编辑:我找到了一个硬编码的解决方法。

for (const perm of command.permissions) {
try {
message.member.permissions.has(perm);
} catch {
const perm_embed = new EmbedBuilder()
.setColor("#cf1b1b")
.setTitle(`[INFO] ${command_name}`)
.setAuthor({ name: message.author.username, iconURL: message.author.avatarURL() })
.setDescription(`Aceasta comanda cere urmatoarele permisiuni: `${command.permissions}` nDin pacate, tu nu ai urmatoarea permisiune care este nevoita: `${perm}``)
.setTimestamp();
message.reply({ embeds: [perm_embed] }).then((msg) => {
setTimeout(() => msg.delete(), 2000);
});
return;
}
}

它只是在成员权限上调用has函数,所以如果它抛出它,它就会继续并说你没有权限,否则它就会继续。

但既然我想要一个好的、可维护的(而不是混乱的(解决方案,还有其他方法吗?

您的command.permissions应该是这样的(而不是使用字符串(:

[PermissionsBitField.Flags.Administrator]

您应该从discord.js:导入PermissionsBitField

const { PermissionsBitField } = require('discord.js');

最新更新