Discord 权限整数:一个数字如何存储权限
权限整数是一个数字,其中每个二进制位都会开启或关闭一项 Discord 权限。 它是机器人邀请链接中 permissions 后面的数字(值为 8 表示管理员),它让 Discord 和机器人能用一个值存储整套权限。
这个数字如何工作
Discord 有几十项权限,例如"查看频道"、"发送消息"或"封禁成员"。每一项都对应一个固定的 2 的幂。"查看频道"是 1024,"发送消息"是 2048,"管理消息"是 8192,"管理员"是 8。要组合权限,就把数字相加。同时拥有"查看频道"和"发送消息"的角色是 1024 + 2048 = 3072。
由于每项权限都使用自己的位,没有两种组合会得到相同的总和,因此这个和可以被还原成确切的列表。
你会在哪里看到它
- 邀请链接:
permissions=的值表示机器人被添加时,其角色获得哪些权利。参见 OAuth2 作用域。 - 角色和频道覆盖:Discord 以这些数字的形式存储每个角色的权限,以及每个频道的允许和拒绝列表。
- 开发者工具:机器人读取这个值来检查成员是否可以执行某项操作。
为什么它对所有者很重要
有两项权限值得谨慎对待。管理员(8)会绕过每一个频道覆盖,因此拥有它的角色可以做任何事。只留给你完全信任的人。当机器人请求一个很大的整数时,在批准之前先将它解码,因为一个你读不懂的数字可能包含机器人并不需要的"封禁成员"或"管理 Webhook"。权限计算器可以把勾选框转换成一个数字,也可以把数字转换回勾选框。
角色还受其位置的限制。拥有某项权限并不意味着一个角色可以管理位于它之上的其他人,参见角色层级。
权限与 Noxyr
Noxyr 请求的是一份固定的权限列表,而不是管理员权限。其中包括发布和嵌入消息、为工单和验证管理频道与角色、为 anti-nuke 查看审核日志,以及为其保护模块提供踢出、封禁和禁言的权限。权限参考列出了每一项,以及缺少它会有什么影响。在拥有许多频道覆盖的服务器上,管理员仍然是最简单的选择,因为分类上一个被拒绝的覆盖就可能阻止创建工单,但它并非必需。
如需了解如何只给机器人足够的权限,请阅读机器人的最小权限原则。
手动读取一个数字
以数字 3072 为例。减去不超过它的最大权限值(2048),再减去下一个(1024),剩下 0,因此它代表"发送消息"加"查看频道"。计算器会瞬间完成相同的计算,并避免出错。
常见问题
权限值为 8 是什么意思?
值 8 是管理员权限。以它邀请的机器人会在服务器中获得每一项权利。
如何把权限数字转换成列表?
使用权限计算器工具,它可以把任何数字解码为其中包含的各项具体权限。
Noxyr 需要管理员权限吗?
不需要。它的邀请使用一份固定的权限列表。管理员只是在有许多频道覆盖的服务器上最省事的选择。