Discord 按位权限计算器
Discord bitwise permission calculator
我正在尝试让我的 tool/script 确定登录用户是否具有使用该工具的正确权限。但是 Discord 正在以权限 int 响应。
看来我必须使用按位运算符检查权限,但从我用谷歌搜索或搜索的所有内容来看,我发现的几乎所有内容似乎都完全不相关。
示例权限:2146958591
权限引用;
// General
generalCreateInstantInvite: 0x1,
generalKickMembers: 0x2,
generalBanMembers: 0x4,
generalAdministrator: 0x8,
generalManageChannels: 0x10,
generalManageServer: 0x20,
generalChangeNickname: 0x4000000,
generalManageNicknames: 0x8000000,
generalManageRoles: 0x10000000,
generalManageWebhooks: 0x20000000,
generalManageEmojis: 0x40000000,
generalViewAuditLog: 0x80,
// Text
textAddReactions: 0x40,
textReadMessages: 0x400,
textSendMessages: 0x800,
textSendTTSMessages: 0x1000,
textManageMessages: 0x2000,
textEmbedLinks: 0x4000,
textAttachFiles: 0x8000,
textReadMessageHistory: 0x10000,
textMentionEveryone: 0x20000,
textUseExternalEmojis: 0x40000,
// Voice
voiceViewChannel: 0x400,
voiceConnect: 0x100000,
voiceSpeak: 0x200000,
voiceMuteMembers: 0x400000,
voiceDeafenMembers: 0x800000,
voiceMoveMembers: 0x1000000,
voiceUseVAD: 0x2000000
是否有我可以研究的工具或示例脚本,以确定如何进行此计算?
提前致谢!
要检查给定的权限值是否具有选定的权限,您可以使用按位与运算符。
示例:
$canKickMembers = ($permissionCode & 0x2) != 0;
假设您有 4
个您希望允许或禁止每个用户的不同操作:
- 创建post
- 更新post
- 阅读post
- 删除post.
让我们创建一个 1
和 0
的 4 个字符的字符串。字符串中的第一个字符代表用户进行 create post
操作的可能性。第二个字符 – update post
,第三个 – read post
和第四个 – delete post
。例如,如果用户具有权限 1001
,则他可以创建 post 和删除 post,但不能更新和读取。
存储这些权限的最有效方法是什么?我们在字符串的每个位置只有 0
和 1
,所以我们可以不将此数据存储在字符串中,而是存储在数字的二进制表示中。因此,用户的权限将是一些十进制数,这个数字的每一位都代表对特定操作的权限。
例如,我们的权限字符串 1001
将只是十进制数 9
(= 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3
).
我们可以将每个权限表示为二进制:
- 创建post =
1000
- 更新post =
0100
- 阅读 post =
0010
- 删除 post =
0001
但是我们如何检查用户是否具有特定权限或具有一组权限?很简单,我们用位运算符 &
:
如果用户权限等于9
= 1001
b,则:
1001 & 1000 = 1000
, 1000 > 0
– 用户可以创建 posts
1001 & 0100 = 0000
、0000 == 0
– 用户无法更新 posts
1001 & 0010 = 0000
, 0000 == 0
– 用户无法阅读 posts
1001 & 0001 = 0001
, 0001 > 0
– 用户可以删除 posts
我正在尝试让我的 tool/script 确定登录用户是否具有使用该工具的正确权限。但是 Discord 正在以权限 int 响应。
看来我必须使用按位运算符检查权限,但从我用谷歌搜索或搜索的所有内容来看,我发现的几乎所有内容似乎都完全不相关。
示例权限:2146958591
权限引用;
// General
generalCreateInstantInvite: 0x1,
generalKickMembers: 0x2,
generalBanMembers: 0x4,
generalAdministrator: 0x8,
generalManageChannels: 0x10,
generalManageServer: 0x20,
generalChangeNickname: 0x4000000,
generalManageNicknames: 0x8000000,
generalManageRoles: 0x10000000,
generalManageWebhooks: 0x20000000,
generalManageEmojis: 0x40000000,
generalViewAuditLog: 0x80,
// Text
textAddReactions: 0x40,
textReadMessages: 0x400,
textSendMessages: 0x800,
textSendTTSMessages: 0x1000,
textManageMessages: 0x2000,
textEmbedLinks: 0x4000,
textAttachFiles: 0x8000,
textReadMessageHistory: 0x10000,
textMentionEveryone: 0x20000,
textUseExternalEmojis: 0x40000,
// Voice
voiceViewChannel: 0x400,
voiceConnect: 0x100000,
voiceSpeak: 0x200000,
voiceMuteMembers: 0x400000,
voiceDeafenMembers: 0x800000,
voiceMoveMembers: 0x1000000,
voiceUseVAD: 0x2000000
是否有我可以研究的工具或示例脚本,以确定如何进行此计算?
提前致谢!
要检查给定的权限值是否具有选定的权限,您可以使用按位与运算符。
示例:
$canKickMembers = ($permissionCode & 0x2) != 0;
假设您有 4
个您希望允许或禁止每个用户的不同操作:
- 创建post
- 更新post
- 阅读post
- 删除post.
让我们创建一个 1
和 0
的 4 个字符的字符串。字符串中的第一个字符代表用户进行 create post
操作的可能性。第二个字符 – update post
,第三个 – read post
和第四个 – delete post
。例如,如果用户具有权限 1001
,则他可以创建 post 和删除 post,但不能更新和读取。
存储这些权限的最有效方法是什么?我们在字符串的每个位置只有 0
和 1
,所以我们可以不将此数据存储在字符串中,而是存储在数字的二进制表示中。因此,用户的权限将是一些十进制数,这个数字的每一位都代表对特定操作的权限。
例如,我们的权限字符串 1001
将只是十进制数 9
(= 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3
).
我们可以将每个权限表示为二进制:
- 创建post =
1000
- 更新post =
0100
- 阅读 post =
0010
- 删除 post =
0001
但是我们如何检查用户是否具有特定权限或具有一组权限?很简单,我们用位运算符 &
:
如果用户权限等于9
= 1001
b,则:
1001 & 1000 = 1000
,1000 > 0
– 用户可以创建 posts1001 & 0100 = 0000
、0000 == 0
– 用户无法更新 posts1001 & 0010 = 0000
,0000 == 0
– 用户无法阅读 posts1001 & 0001 = 0001
,0001 > 0
– 用户可以删除 posts