首页 > 解决方案 > RangeError [BITFIELD_INVALID]:无效的位域标志或数字

问题描述

你好,我正在处理我的静音命令,我想出了这个错误:

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')

我不太知道如何解决它请帮助我

标签: discordbotsdiscord.js

解决方案


我今天偶然发现了这个老问题,虽然我来晚了,但 Androz2091 发布的当前主要答案是不正确的。

您不能将数组用于权限值(它必须是对象):

这是完全错误的。在从 v11 到 v13 的任何版本的 discord.js 中,都没有权限值来创建一个角色,即该答案呈现的形式的对象文字。权限值必须是PermissionResolvable. APermissionResolvable可以是字符串,例如"SEND_MESSAGES",也可以是此类字符串的数组。查看文档

至于 OP 实际出了什么问题,请注意他们是如何指定权限字符串的:

permissions: [
    "SEND_MESSAGES" === false,
    "ADD_REACTIONS" === false
]

这是不正确的。这和做是一样的permissions: [ false, false ]。显然false不是权限,这就是您收到无效位域标志错误的原因。

这不是创建角色时权限的工作方式。如果您查看公会的角色权限,您会发现每个权限都有两种状态:启​​用或禁用。权限值的工作方式guild.roles.create()是,它启用指定的任何权限并禁用所有其他权限。这意味着,如果您想要SEND_MESSAGESADD_REACTIONS禁用您的 Muted 角色,您只需要不将它们包含在权限数组中。

相反,包括静音用户应该拥有的任何权限。例如,如果他们应该能够查看频道,请给他们VIEW_CHANNEL. 这是一个示例解决方案:

permissions: [
    "VIEW_CHANNEL",
    "READ_MESSAGE_HISTORY"
]

这对于静音角色应该很有效。请注意,discord.js v12 和 v13 的权限以这种方式工作的方式仍然相同,但是您创建角色本身的方式在版本之间发生了一些变化。但是,此解决方案仍应适用于这两个版本。


推荐阅读