Add permission type.
This commit is contained in:
parent
f121a3043d
commit
05d44e314b
|
@ -0,0 +1,83 @@
|
|||
import json, discordobject, nimcordutils
|
||||
|
||||
type
|
||||
PermissionType* = enum
|
||||
permTypeRole,
|
||||
permTypeMember
|
||||
|
||||
Permission* = enum
|
||||
permCreateInstantInvite = 0x00000001,
|
||||
permKickMembers = 0x00000002,
|
||||
permBanMembers = 0x00000004,
|
||||
permAdministrator = 0x00000008,
|
||||
permManageChannels = 0x00000010,
|
||||
permManageGuilds = 0x00000020,
|
||||
permAddReactions = 0x00000040,
|
||||
permViewAuditLog = 0x00000080,
|
||||
permPrioritySpeaker = 0x00000100,
|
||||
permStream = 0x00000200,
|
||||
permReadMessages = 0x00000400,
|
||||
permSendMessages = 0x00000800,
|
||||
permSendTTSMessages = 0x00001000,
|
||||
permManageMessages = 0x00002000,
|
||||
permEmbedLinks = 0x00004000,
|
||||
permAttachFiles = 0x00008000,
|
||||
permReadMessageHistory = 0x00010000,
|
||||
permMentionEveryoneHereAllRoles = 0x00020000,
|
||||
permUseExternalEmojis = 0x00040000,
|
||||
permConnect = 0x00100000,
|
||||
permSpeak = 0x00200000,
|
||||
permMuteMembers = 0x00400000,
|
||||
permDeafenMembers = 0x00800000,
|
||||
permMoveMembers = 0x01000000,
|
||||
permUseVAD = 0x02000000,
|
||||
permChangeNickname = 0x04000000,
|
||||
permManageNicknames = 0x08000000,
|
||||
permManageRoles = 0x10000000,
|
||||
permManageWebhooks = 0x20000000,
|
||||
permManageEmojis = 0x40000000
|
||||
|
||||
Permissions* = ref object
|
||||
## This type referes to a user's permissions given by the role or per user.
|
||||
roleUserID*: snowflake
|
||||
allowPerms*: uint
|
||||
denyPerms*: uint
|
||||
permissionType*: PermissionType
|
||||
|
||||
proc newPermissions*(json: JsonNode): Permissions =
|
||||
## Parses a `Permissions` from json.
|
||||
result = Permissions(
|
||||
roleUserID: getIDFromJson(json["id"].getStr()),
|
||||
allowPerms: uint(json["allow"].getInt()),
|
||||
denyPerms: uint(json["deny"].getInt())
|
||||
)
|
||||
|
||||
if (json["type"].getStr() == "role"):
|
||||
result.permissionType = PermissionType.permTypeRole
|
||||
else:
|
||||
result.permissionType = PermissionType.permTypeMember
|
||||
|
||||
proc hasPermission*(perms: Permissions, perm: Permission): bool =
|
||||
## Check if Permissions has a specific permission.
|
||||
## This also checks if it is not a part of the denyPerms.
|
||||
return (perms.allowPerms and uint(perm)) == uint(perm) and (perms.denyPerms and uint(perm)) != uint(perm)
|
||||
|
||||
proc addAllowPermission*(perms: Permissions, perm: Permission): Permissions =
|
||||
## Add a `Permission` to the `Permissions` allow values.
|
||||
## If it finds the permission in denyPerms, it will remove it from that also.
|
||||
|
||||
# Check if the permission is in deny, and remove it.
|
||||
if ((perms.denyPerms and uint(perm)) == uint(perm)):
|
||||
perms.denyPerms = perms.denyPerms and (not uint(perm))
|
||||
|
||||
perms.allowPerms = perms.allowPerms or uint(perm)
|
||||
|
||||
proc addDenyPermission*(perms: Permissions, perm: Permission): Permissions =
|
||||
## Add a `Permission` to the `Permissions` deny values.
|
||||
## If it finds the permission in allowPerms, it will remove it from that also.
|
||||
|
||||
# Check if the permission is in allowed, and remove it.
|
||||
if ((perms.allowPerms and uint(perm)) == uint(perm)):
|
||||
perms.allowPerms = perms.allowPerms and (not uint(perm))
|
||||
|
||||
perms.denyPerms = perms.denyPerms or uint(perm)
|
Reference in New Issue