我需要验证登录网站的用户是否有足够的权限来修改我的机器人在公会中的行为。我使用 Passport-discord 来获取有关用户的信息,这就是我得到的:
{
...
guilds: [
{
id: 'guild id',
name: 'guild name',
icon: 'guild icon',
owner: false,
permissions: 104189504,
features: [Array],
permissions_new: '1037338791488'
}
...
]
}
出于保密目的,我替换了“所有者”上方的公会信息。现在我的问题:如何将“权限”部分转换为用户权限数组?
我不知道是否有 API 可以做到这一点(可能没有),但实现起来并不复杂。 Discord 提供了两个社区创建的权限计算器,它们执行相反的操作 - 您选择所需的权限,然后获得计算的权限结果:
您可以很容易地创建一个函数来执行相反的操作 - 将十进制权限数字转换为十六进制数字,然后将十六进制映射到命名权限。
例如您在示例
104189504
中的许可是十六进制表示的 635CE40
。权限映射到 1、2、4 或 8,因此如果遇到任何其他十六进制,则意味着存在总和。因此,您的权限 int 包含以下权限:
然后您可以将其映射到名称,例如4000000 是“更改昵称”,以此类推。
如果您想让机器人的权限检查保持简单,您可能会发现检查执行命令的成员是否具有特定角色就足够了。
如果有人想在discordjs中做同样的事情,你可以使用这个:
new Discord.PermissionsBitField(PERMISSIONNUMBER).toArray()
它将返回一个包含权限名称的数组。