如何将guild.permissions数字转换为权限数组discord.js oauth2

Sou*_*uly 5 permissions oauth-2.0 passport.js discord

我需要验证登录网站的用户是否有足够的权限来修改我的机器人在公会中的行为。我使用 Passport-discord 来获取有关用户的信息,这就是我得到的:

{
  ...
  guilds: [
    {
      id: 'guild id',
      name: 'guild name',
      icon: 'guild icon',
      owner: false,
      permissions: 104189504,
      features: [Array],
      permissions_new: '1037338791488'
    }
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

为了保密起见,我把“所有者”上面的行会信息替换掉了。现在我的问题:如何将“权限”部分转换为用户权限数组?

Mic*_*ski 1

我不知道是否有 API 可以做到这一点(可能没有),但实现起来并不复杂。Discord 提供了两个社区创建的权限计算器,它们执行相反的操作 - 您选择所需的权限,然后获得计算的权限结果:

您可以很容易地创建一个函数来执行相反的操作 - 将十进制权限数字转换为十六进制数字,然后将十六进制映射到命名权限。

例如,您从示例中获得的许可104189504635CE40十六进制表示。权限映射到 1、2、4 或 8,因此如果遇到任何其他十六进制,则意味着存在总和。因此,您的权限 int 包含以下权限:

  • 400万
  • 2000000
  • 200000
  • 100000
  • 40000
  • 10000
  • 8000
  • 4000
  • 800
  • 400
  • 200
  • 40

然后您可以将其映射到名称,例如 4000000 是“更改昵称”,依此类推。