【问题标题】:RangeError [BITFIELD_INVALID]: Invalid bitfield flag or numberRangeError [BITFIELD_INVALID]:无效的位域标志或数字
【发布时间】: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')

我不知道怎么解决,请帮帮我

【问题讨论】:

    标签: discord bots discord.js


    【解决方案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 中,都没有权限值来创建一个角色,即该答案呈现的形式的对象文字。权限值必须是PermissionResolvablePermissionResolvable 可以是诸如"SEND_MESSAGES" 之类的字符串,也可以是此类字符串的数组。查看docs

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

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

    这是不正确的。这与permissions: [ false, false ] 相同。显然false 不是权限,这就是为什么您会收到无效位字段标志错误。

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

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

    permissions: [
        "VIEW_CHANNEL",
        "READ_MESSAGE_HISTORY"
    ]
    

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

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 2022-06-13
      • 2021-12-25
      • 1970-01-01
      • 2021-12-12
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多