RangeError [BITFIELD_INVALID]:无效的位域标志或数字
Posted
技术标签:
【中文标题】RangeError [BITFIELD_INVALID]:无效的位域标志或数字【英文标题】:RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number 【发布时间】:2020-12-10 20:07:16 【问题描述】:您好,我正在处理我的静音命令,但遇到了这个错误:
RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number.
at Function.resolve (/app/node_modules/discord.js/src/util/BitField.js:150:19)
at /app/node_modules/discord.js/src/util/BitField.js:148:54
at Array.map (<anonymous>)
at Function.resolve (/app/node_modules/discord.js/src/util/BitField.js:148:40)
at RoleManager.create (/app/node_modules/discord.js/src/managers/RoleManager.js:112:58)
at Client.<anonymous> (/app/index.js:586:41)
at Client.emit (events.js:327:22)
at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
我想为我的静音命令设置一个静音角色 这是我的命令:
message.guild.roles.create(
data:
name: 'muted',
color: '#ff0000',
permissions: [
"SEND_MESSAGES" === false,
"ADD_REACTIONS" === false
]
,
reason: 'to mute people',
)
.catch(console.error);
catch (e)
console.log(e.stack);
return message.channel.send('Cant')
我不知道怎么解决,请帮帮我
【问题讨论】:
【参考方案1】:permissions
值不能使用数组(它必须是对象):
message.guild.roles.create(
data:
name: 'muted',
color: '#ff0000',
permissions:
SEND_MESSAGES: false,
ADD_REACTIONS: false
,
reason: 'to mute people',
)
.catch(console.error);
catch (e)
console.log(e.stack);
return message.channel.send('Cant')
【讨论】:
它仍然显示 RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number 是的,我有同样的错误,即使它是一个对象,那么问题是什么?【参考方案2】:我今天偶然发现了这个老问题,虽然我有点晚了,但 Androz2091 发布的当前主要答案是不正确的。
您不能使用数组作为权限值(它必须是一个对象):
这完全是错误的。在从 v11 到 v13 的任何版本的 discord.js 中,都没有权限值来创建一个角色,即该答案呈现的形式的对象文字。权限值必须是PermissionResolvable
。 PermissionResolvable
可以是诸如"SEND_MESSAGES"
之类的字符串,也可以是此类字符串的数组。查看docs。
至于 OP 究竟出了什么问题,请注意他们是如何指定权限字符串的:
permissions: [
"SEND_MESSAGES" === false,
"ADD_REACTIONS" === false
]
这是不正确的。这与permissions: [ false, false ]
相同。显然false
不是权限,这就是为什么您会收到无效位字段标志错误。
创建角色时权限的工作方式并非如此。如果您查看公会的角色权限,您会发现每个权限都有两种状态:启用或禁用。权限值在guild.roles.create()
中的工作方式是,它启用任何指定的权限并禁用所有其他权限。这意味着,如果您希望为您的 Muted 角色禁用 SEND_MESSAGES
和 ADD_REACTIONS
,您只需不将它们包含在权限数组中。
相反,包括被静音的用户应该拥有的任何权限。例如,如果他们应该能够观看频道,请给他们VIEW_CHANNEL
。这是一个示例解决方案:
permissions: [
"VIEW_CHANNEL",
"READ_MESSAGE_HISTORY"
]
这对于静音角色应该很有效。请注意,discord.js v12 和 v13 的权限以这种方式工作的方式仍然相同,但是您创建角色本身的方式在版本之间发生了一些变化。但是,这个解决方案应该仍然适用于这两个版本。
【讨论】:
以上是关于RangeError [BITFIELD_INVALID]:无效的位域标志或数字的主要内容,如果未能解决你的问题,请参考以下文章
Datepicker - RangeError:无效的时间值