diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs index a93f02497..8c58145ad 100644 --- a/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs @@ -1,40 +1,29 @@ namespace Discord { - public enum ChannelPermission : byte + public enum ChannelPermission : ulong { - //General - CreateInstantInvite = 0, - //KickMembers = 1, - //BanMembers = 2, - //Administrator = 3, - ManageChannel = 4, - //ManageGuild = 5, + CREATE_INSTANT_INVITE = 0x00000001, + MANAGE_CHANNELS = 0x00000010, + + ADD_REACTIONS = 0x00000040, + READ_MESSAGES = 0x00000400, + SEND_MESSAGES = 0x00000800, + SEND_TTS_MESSAGES = 0x00001000, + MANAGE_MESSAGES = 0x00002000, + EMBED_LINKS = 0x00004000, + ATTACH_FILES = 0x00008000, + READ_MESSAGE_HISTORY = 0x00010000, + MENTION_EVERYONE = 0x00020000, + USE_EXTERNAL_EMOJIS = 0x00040000, - //Text - AddReactions = 6, - ReadMessages = 10, - SendMessages = 11, - SendTTSMessages = 12, - ManageMessages = 13, - EmbedLinks = 14, - AttachFiles = 15, - ReadMessageHistory = 16, - MentionEveryone = 17, - UseExternalEmojis = 18, + CONNECT = 0x00100000, + SPEAK = 0x00200000, + MUTE_MEMBERS = 0x00400000, + DEAFEN_MEMBERS = 0x00800000, + MOVE_MEMBERS = 0x01000000, + USE_VAD = 0x02000000, - //Voice - Connect = 20, - Speak = 21, - MuteMembers = 22, - DeafenMembers = 23, - MoveMembers = 24, - UseVAD = 25, - - //General2 - //ChangeNickname = 26, - //ManageNicknames = 27, - ManagePermissions = 28, - ManageWebhooks = 29, - //ManageEmojis = 30 + MANAGE_ROLES = 0x10000000, + MANAGE_WEBHOOKS = 0x20000000, } } diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs index 94596e0e6..d5fd52f3a 100644 --- a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs @@ -34,48 +34,48 @@ namespace Discord public ulong RawValue { get; } /// If True, a user may create invites. - public bool CreateInstantInvite => Permissions.GetValue(RawValue, ChannelPermission.CreateInstantInvite); + public bool CreateInstantInvite => Permissions.GetValue(RawValue, ChannelPermission.CREATE_INSTANT_INVITE); /// If True, a user may create, delete and modify this channel. - public bool ManageChannel => Permissions.GetValue(RawValue, ChannelPermission.ManageChannel); + public bool ManageChannel => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_CHANNELS); /// If true, a user may add reactions. - public bool AddReactions => Permissions.GetValue(RawValue, ChannelPermission.AddReactions); + public bool AddReactions => Permissions.GetValue(RawValue, ChannelPermission.ADD_REACTIONS); /// If True, a user may join channels. - public bool ReadMessages => Permissions.GetValue(RawValue, ChannelPermission.ReadMessages); + public bool ReadMessages => Permissions.GetValue(RawValue, ChannelPermission.READ_MESSAGES); /// If True, a user may send messages. - public bool SendMessages => Permissions.GetValue(RawValue, ChannelPermission.SendMessages); + public bool SendMessages => Permissions.GetValue(RawValue, ChannelPermission.SEND_MESSAGES); /// If True, a user may send text-to-speech messages. - public bool SendTTSMessages => Permissions.GetValue(RawValue, ChannelPermission.SendTTSMessages); + public bool SendTTSMessages => Permissions.GetValue(RawValue, ChannelPermission.SEND_TTS_MESSAGES); /// If True, a user may delete messages. - public bool ManageMessages => Permissions.GetValue(RawValue, ChannelPermission.ManageMessages); + public bool ManageMessages => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_MESSAGES); /// If True, Discord will auto-embed links sent by this user. - public bool EmbedLinks => Permissions.GetValue(RawValue, ChannelPermission.EmbedLinks); + public bool EmbedLinks => Permissions.GetValue(RawValue, ChannelPermission.EMBED_LINKS); /// If True, a user may send files. - public bool AttachFiles => Permissions.GetValue(RawValue, ChannelPermission.AttachFiles); + public bool AttachFiles => Permissions.GetValue(RawValue, ChannelPermission.ATTACH_FILES); /// If True, a user may read previous messages. - public bool ReadMessageHistory => Permissions.GetValue(RawValue, ChannelPermission.ReadMessageHistory); + public bool ReadMessageHistory => Permissions.GetValue(RawValue, ChannelPermission.READ_MESSAGE_HISTORY); /// If True, a user may mention @everyone. - public bool MentionEveryone => Permissions.GetValue(RawValue, ChannelPermission.MentionEveryone); + public bool MentionEveryone => Permissions.GetValue(RawValue, ChannelPermission.MENTION_EVERYONE); /// If True, a user may use custom emoji from other guilds. - public bool UseExternalEmojis => Permissions.GetValue(RawValue, ChannelPermission.UseExternalEmojis); + public bool UseExternalEmojis => Permissions.GetValue(RawValue, ChannelPermission.USE_EXTERNAL_EMOJIS); /// If True, a user may connect to a voice channel. - public bool Connect => Permissions.GetValue(RawValue, ChannelPermission.Connect); + public bool Connect => Permissions.GetValue(RawValue, ChannelPermission.CONNECT); /// If True, a user may speak in a voice channel. - public bool Speak => Permissions.GetValue(RawValue, ChannelPermission.Speak); + public bool Speak => Permissions.GetValue(RawValue, ChannelPermission.SPEAK); /// If True, a user may mute users. - public bool MuteMembers => Permissions.GetValue(RawValue, ChannelPermission.MuteMembers); + public bool MuteMembers => Permissions.GetValue(RawValue, ChannelPermission.MUTE_MEMBERS); /// If True, a user may deafen users. - public bool DeafenMembers => Permissions.GetValue(RawValue, ChannelPermission.DeafenMembers); + public bool DeafenMembers => Permissions.GetValue(RawValue, ChannelPermission.DEAFEN_MEMBERS); /// If True, a user may move other users between voice channels. - public bool MoveMembers => Permissions.GetValue(RawValue, ChannelPermission.MoveMembers); + public bool MoveMembers => Permissions.GetValue(RawValue, ChannelPermission.MOVE_MEMBERS); /// If True, a user may use voice-activity-detection rather than push-to-talk. - public bool UseVAD => Permissions.GetValue(RawValue, ChannelPermission.UseVAD); + public bool UseVAD => Permissions.GetValue(RawValue, ChannelPermission.USE_VAD); /// If True, a user may adjust permissions. This also implictly grants all other permissions. - public bool ManagePermissions => Permissions.GetValue(RawValue, ChannelPermission.ManagePermissions); + public bool ManagePermissions => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_ROLES); /// If True, a user may edit the webhooks for this channel. - public bool ManageWebhooks => Permissions.GetValue(RawValue, ChannelPermission.ManageWebhooks); + public bool ManageWebhooks => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_WEBHOOKS); /// Creates a new ChannelPermissions with the provided packed value. public ChannelPermissions(ulong rawValue) { RawValue = rawValue; } @@ -89,26 +89,26 @@ namespace Discord { ulong value = initialValue; - Permissions.SetValue(ref value, createInstantInvite, ChannelPermission.CreateInstantInvite); - Permissions.SetValue(ref value, manageChannel, ChannelPermission.ManageChannel); - Permissions.SetValue(ref value, addReactions, ChannelPermission.AddReactions); - Permissions.SetValue(ref value, readMessages, ChannelPermission.ReadMessages); - Permissions.SetValue(ref value, sendMessages, ChannelPermission.SendMessages); - Permissions.SetValue(ref value, sendTTSMessages, ChannelPermission.SendTTSMessages); - Permissions.SetValue(ref value, manageMessages, ChannelPermission.ManageMessages); - Permissions.SetValue(ref value, embedLinks, ChannelPermission.EmbedLinks); - Permissions.SetValue(ref value, attachFiles, ChannelPermission.AttachFiles); - Permissions.SetValue(ref value, readMessageHistory, ChannelPermission.ReadMessageHistory); - Permissions.SetValue(ref value, mentionEveryone, ChannelPermission.MentionEveryone); - Permissions.SetValue(ref value, useExternalEmojis, ChannelPermission.UseExternalEmojis); - Permissions.SetValue(ref value, connect, ChannelPermission.Connect); - Permissions.SetValue(ref value, speak, ChannelPermission.Speak); - Permissions.SetValue(ref value, muteMembers, ChannelPermission.MuteMembers); - Permissions.SetValue(ref value, deafenMembers, ChannelPermission.DeafenMembers); - Permissions.SetValue(ref value, moveMembers, ChannelPermission.MoveMembers); - Permissions.SetValue(ref value, useVoiceActivation, ChannelPermission.UseVAD); - Permissions.SetValue(ref value, managePermissions, ChannelPermission.ManagePermissions); - Permissions.SetValue(ref value, manageWebhooks, ChannelPermission.ManageWebhooks); + Permissions.SetValue(ref value, createInstantInvite, ChannelPermission.CREATE_INSTANT_INVITE); + Permissions.SetValue(ref value, manageChannel, ChannelPermission.MANAGE_CHANNELS); + Permissions.SetValue(ref value, addReactions, ChannelPermission.ADD_REACTIONS); + Permissions.SetValue(ref value, readMessages, ChannelPermission.READ_MESSAGES); + Permissions.SetValue(ref value, sendMessages, ChannelPermission.SEND_MESSAGES); + Permissions.SetValue(ref value, sendTTSMessages, ChannelPermission.SEND_TTS_MESSAGES); + Permissions.SetValue(ref value, manageMessages, ChannelPermission.MANAGE_MESSAGES); + Permissions.SetValue(ref value, embedLinks, ChannelPermission.EMBED_LINKS); + Permissions.SetValue(ref value, attachFiles, ChannelPermission.ATTACH_FILES); + Permissions.SetValue(ref value, readMessageHistory, ChannelPermission.READ_MESSAGE_HISTORY); + Permissions.SetValue(ref value, mentionEveryone, ChannelPermission.MENTION_EVERYONE); + Permissions.SetValue(ref value, useExternalEmojis, ChannelPermission.USE_EXTERNAL_EMOJIS); + Permissions.SetValue(ref value, connect, ChannelPermission.CONNECT); + Permissions.SetValue(ref value, speak, ChannelPermission.SPEAK); + Permissions.SetValue(ref value, muteMembers, ChannelPermission.MUTE_MEMBERS); + Permissions.SetValue(ref value, deafenMembers, ChannelPermission.DEAFEN_MEMBERS); + Permissions.SetValue(ref value, moveMembers, ChannelPermission.MOVE_MEMBERS); + Permissions.SetValue(ref value, useVoiceActivation, ChannelPermission.USE_VAD); + Permissions.SetValue(ref value, managePermissions, ChannelPermission.MANAGE_ROLES); + Permissions.SetValue(ref value, manageWebhooks, ChannelPermission.MANAGE_WEBHOOKS); RawValue = value; } @@ -141,11 +141,11 @@ namespace Discord public List ToList() { var perms = new List(); - ulong x = 1; - for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) + for (byte i = 0; i < Permissions.MaxBits; i++) { - if ((RawValue & x) != 0) - perms.Add((ChannelPermission)i); + ulong flag = (ulong)Math.Pow(2, i); + if ((RawValue & flag) != 0) + perms.Add((ChannelPermission)flag); } return perms; } diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs index 3975c1b8b..a73bd62a4 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs @@ -1,40 +1,34 @@ namespace Discord { - public enum GuildPermission : byte + public enum GuildPermission : ulong { - //General - CreateInstantInvite = 0, - KickMembers = 1, - BanMembers = 2, - Administrator = 3, - ManageChannels = 4, - ManageGuild = 5, - - //Text - AddReactions = 6, - ReadMessages = 10, - SendMessages = 11, - SendTTSMessages = 12, - ManageMessages = 13, - EmbedLinks = 14, - AttachFiles = 15, - ReadMessageHistory = 16, - MentionEveryone = 17, - UseExternalEmojis = 18, - - //Voice - Connect = 20, - Speak = 21, - MuteMembers = 22, - DeafenMembers = 23, - MoveMembers = 24, - UseVAD = 25, - - //General2 - ChangeNickname = 26, - ManageNicknames = 27, - ManageRoles = 28, - ManageWebhooks = 29, - ManageEmojis = 30 + CREATE_INSTANT_INVITE = 0x00000001, + KICK_MEMBERS = 0x00000002, + BAN_MEMBERS = 0x00000004, + ADMINISTRATOR = 0x00000008, + MANAGE_CHANNELS = 0x00000010, + MANAGE_GUILD = 0x00000020, + ADD_REACTIONS = 0x00000040, + VIEW_AUDIT_LOG = 0x00000080, + READ_MESSAGES = 0x00000400, + SEND_MESSAGES = 0x00000800, + SEND_TTS_MESSAGES = 0x00001000, + MANAGE_MESSAGES = 0x00002000, + EMBED_LINKS = 0x00004000, + ATTACH_FILES = 0x00008000, + READ_MESSAGE_HISTORY = 0x00010000, + MENTION_EVERYONE = 0x00020000, + USE_EXTERNAL_EMOJIS = 0x00040000, + CONNECT = 0x00100000, + SPEAK = 0x00200000, + MUTE_MEMBERS = 0x00400000, + DEAFEN_MEMBERS = 0x00800000, + MOVE_MEMBERS = 0x01000000, + USE_VAD = 0x02000000, + CHANGE_NICKNAME = 0x04000000, + MANAGE_NICKNAMES = 0x08000000, + MANAGE_ROLES = 0x10000000, + MANAGE_WEBHOOKS = 0x20000000, + MANAGE_EMOJIS = 0x40000000 } } diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs index c5f1efab0..4e835624d 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Diagnostics; namespace Discord @@ -11,110 +12,114 @@ namespace Discord /// Gets a GuildPermissions that grants all guild permissions for webhook users. public static readonly GuildPermissions Webhook = new GuildPermissions(0b00000_0000000_0001101100000_000000); /// Gets a GuildPermissions that grants all guild permissions. - public static readonly GuildPermissions All = new GuildPermissions(0b11111_1111110_0111111110001_111111); + public static readonly GuildPermissions All = new GuildPermissions(0b11111_1111110_0111111110011_111111); /// Gets a packed value representing all the permissions in this GuildPermissions. public ulong RawValue { get; } /// If True, a user may create invites. - public bool CreateInstantInvite => Permissions.GetValue(RawValue, GuildPermission.CreateInstantInvite); + public bool CreateInstantInvite => Permissions.GetValue(RawValue, GuildPermission.CREATE_INSTANT_INVITE); /// If True, a user may ban users from the guild. - public bool BanMembers => Permissions.GetValue(RawValue, GuildPermission.BanMembers); + public bool BanMembers => Permissions.GetValue(RawValue, GuildPermission.BAN_MEMBERS); /// If True, a user may kick users from the guild. - public bool KickMembers => Permissions.GetValue(RawValue, GuildPermission.KickMembers); + public bool KickMembers => Permissions.GetValue(RawValue, GuildPermission.KICK_MEMBERS); /// If True, a user is granted all permissions, and cannot have them revoked via channel permissions. - public bool Administrator => Permissions.GetValue(RawValue, GuildPermission.Administrator); + public bool Administrator => Permissions.GetValue(RawValue, GuildPermission.ADMINISTRATOR); /// If True, a user may create, delete and modify channels. - public bool ManageChannels => Permissions.GetValue(RawValue, GuildPermission.ManageChannels); + public bool ManageChannels => Permissions.GetValue(RawValue, GuildPermission.MANAGE_CHANNELS); /// If True, a user may adjust guild properties. - public bool ManageGuild => Permissions.GetValue(RawValue, GuildPermission.ManageGuild); + public bool ManageGuild => Permissions.GetValue(RawValue, GuildPermission.MANAGE_GUILD); /// If true, a user may add reactions. - public bool AddReactions => Permissions.GetValue(RawValue, GuildPermission.AddReactions); + public bool AddReactions => Permissions.GetValue(RawValue, GuildPermission.ADD_REACTIONS); + /// If true, a user may view the audit log. + public bool ViewAuditLog => Permissions.GetValue(RawValue, GuildPermission.VIEW_AUDIT_LOG); + /// If True, a user may join channels. - public bool ReadMessages => Permissions.GetValue(RawValue, GuildPermission.ReadMessages); + public bool ReadMessages => Permissions.GetValue(RawValue, GuildPermission.READ_MESSAGES); /// If True, a user may send messages. - public bool SendMessages => Permissions.GetValue(RawValue, GuildPermission.SendMessages); + public bool SendMessages => Permissions.GetValue(RawValue, GuildPermission.SEND_MESSAGES); /// If True, a user may send text-to-speech messages. - public bool SendTTSMessages => Permissions.GetValue(RawValue, GuildPermission.SendTTSMessages); + public bool SendTTSMessages => Permissions.GetValue(RawValue, GuildPermission.SEND_TTS_MESSAGES); /// If True, a user may delete messages. - public bool ManageMessages => Permissions.GetValue(RawValue, GuildPermission.ManageMessages); + public bool ManageMessages => Permissions.GetValue(RawValue, GuildPermission.MANAGE_MESSAGES); /// If True, Discord will auto-embed links sent by this user. - public bool EmbedLinks => Permissions.GetValue(RawValue, GuildPermission.EmbedLinks); + public bool EmbedLinks => Permissions.GetValue(RawValue, GuildPermission.EMBED_LINKS); /// If True, a user may send files. - public bool AttachFiles => Permissions.GetValue(RawValue, GuildPermission.AttachFiles); + public bool AttachFiles => Permissions.GetValue(RawValue, GuildPermission.ATTACH_FILES); /// If True, a user may read previous messages. - public bool ReadMessageHistory => Permissions.GetValue(RawValue, GuildPermission.ReadMessageHistory); + public bool ReadMessageHistory => Permissions.GetValue(RawValue, GuildPermission.READ_MESSAGE_HISTORY); /// If True, a user may mention @everyone. - public bool MentionEveryone => Permissions.GetValue(RawValue, GuildPermission.MentionEveryone); + public bool MentionEveryone => Permissions.GetValue(RawValue, GuildPermission.MENTION_EVERYONE); /// If True, a user may use custom emoji from other guilds. - public bool UseExternalEmojis => Permissions.GetValue(RawValue, GuildPermission.UseExternalEmojis); + public bool UseExternalEmojis => Permissions.GetValue(RawValue, GuildPermission.USE_EXTERNAL_EMOJIS); /// If True, a user may connect to a voice channel. - public bool Connect => Permissions.GetValue(RawValue, GuildPermission.Connect); + public bool Connect => Permissions.GetValue(RawValue, GuildPermission.CONNECT); /// If True, a user may speak in a voice channel. - public bool Speak => Permissions.GetValue(RawValue, GuildPermission.Speak); + public bool Speak => Permissions.GetValue(RawValue, GuildPermission.SPEAK); /// If True, a user may mute users. - public bool MuteMembers => Permissions.GetValue(RawValue, GuildPermission.MuteMembers); + public bool MuteMembers => Permissions.GetValue(RawValue, GuildPermission.MUTE_MEMBERS); /// If True, a user may deafen users. - public bool DeafenMembers => Permissions.GetValue(RawValue, GuildPermission.DeafenMembers); + public bool DeafenMembers => Permissions.GetValue(RawValue, GuildPermission.DEAFEN_MEMBERS); /// If True, a user may move other users between voice channels. - public bool MoveMembers => Permissions.GetValue(RawValue, GuildPermission.MoveMembers); + public bool MoveMembers => Permissions.GetValue(RawValue, GuildPermission.MOVE_MEMBERS); /// If True, a user may use voice-activity-detection rather than push-to-talk. - public bool UseVAD => Permissions.GetValue(RawValue, GuildPermission.UseVAD); + public bool UseVAD => Permissions.GetValue(RawValue, GuildPermission.USE_VAD); /// If True, a user may change their own nickname. - public bool ChangeNickname => Permissions.GetValue(RawValue, GuildPermission.ChangeNickname); + public bool ChangeNickname => Permissions.GetValue(RawValue, GuildPermission.CHANGE_NICKNAME); /// If True, a user may change the nickname of other users. - public bool ManageNicknames => Permissions.GetValue(RawValue, GuildPermission.ManageNicknames); + public bool ManageNicknames => Permissions.GetValue(RawValue, GuildPermission.MANAGE_NICKNAMES); /// If True, a user may adjust roles. - public bool ManageRoles => Permissions.GetValue(RawValue, GuildPermission.ManageRoles); + public bool ManageRoles => Permissions.GetValue(RawValue, GuildPermission.MANAGE_ROLES); /// If True, a user may edit the webhooks for this guild. - public bool ManageWebhooks => Permissions.GetValue(RawValue, GuildPermission.ManageWebhooks); + public bool ManageWebhooks => Permissions.GetValue(RawValue, GuildPermission.MANAGE_WEBHOOKS); /// If True, a user may edit the emojis for this guild. - public bool ManageEmojis => Permissions.GetValue(RawValue, GuildPermission.ManageEmojis); + public bool ManageEmojis => Permissions.GetValue(RawValue, GuildPermission.MANAGE_EMOJIS); /// Creates a new GuildPermissions with the provided packed value. public GuildPermissions(ulong rawValue) { RawValue = rawValue; } private GuildPermissions(ulong initialValue, bool? createInstantInvite = null, bool? kickMembers = null, - bool? banMembers = null, bool? administrator = null, bool? manageChannel = null, bool? manageGuild = null, - bool? addReactions = null, + bool? banMembers = null, bool? administrator = null, bool? manageChannels = null, bool? manageGuild = null, + bool? addReactions = null, bool? viewAuditLog = null, bool? readMessages = null, bool? sendMessages = null, bool? sendTTSMessages = null, bool? manageMessages = null, bool? embedLinks = null, bool? attachFiles = null, bool? readMessageHistory = null, bool? mentionEveryone = null, - bool? userExternalEmojis = null, bool? connect = null, bool? speak = null, bool? muteMembers = null, bool? deafenMembers = null, + bool? useExternalEmojis = null, bool? connect = null, bool? speak = null, bool? muteMembers = null, bool? deafenMembers = null, bool? moveMembers = null, bool? useVoiceActivation = null, bool? changeNickname = null, bool? manageNicknames = null, bool? manageRoles = null, bool? manageWebhooks = null, bool? manageEmojis = null) { ulong value = initialValue; - Permissions.SetValue(ref value, createInstantInvite, GuildPermission.CreateInstantInvite); - Permissions.SetValue(ref value, banMembers, GuildPermission.BanMembers); - Permissions.SetValue(ref value, kickMembers, GuildPermission.KickMembers); - Permissions.SetValue(ref value, administrator, GuildPermission.Administrator); - Permissions.SetValue(ref value, manageChannel, GuildPermission.ManageChannels); - Permissions.SetValue(ref value, manageGuild, GuildPermission.ManageGuild); - Permissions.SetValue(ref value, addReactions, GuildPermission.AddReactions); - Permissions.SetValue(ref value, readMessages, GuildPermission.ReadMessages); - Permissions.SetValue(ref value, sendMessages, GuildPermission.SendMessages); - Permissions.SetValue(ref value, sendTTSMessages, GuildPermission.SendTTSMessages); - Permissions.SetValue(ref value, manageMessages, GuildPermission.ManageMessages); - Permissions.SetValue(ref value, embedLinks, GuildPermission.EmbedLinks); - Permissions.SetValue(ref value, attachFiles, GuildPermission.AttachFiles); - Permissions.SetValue(ref value, readMessageHistory, GuildPermission.ReadMessageHistory); - Permissions.SetValue(ref value, mentionEveryone, GuildPermission.MentionEveryone); - Permissions.SetValue(ref value, userExternalEmojis, GuildPermission.UseExternalEmojis); - Permissions.SetValue(ref value, connect, GuildPermission.Connect); - Permissions.SetValue(ref value, speak, GuildPermission.Speak); - Permissions.SetValue(ref value, muteMembers, GuildPermission.MuteMembers); - Permissions.SetValue(ref value, deafenMembers, GuildPermission.DeafenMembers); - Permissions.SetValue(ref value, moveMembers, GuildPermission.MoveMembers); - Permissions.SetValue(ref value, useVoiceActivation, GuildPermission.UseVAD); - Permissions.SetValue(ref value, changeNickname, GuildPermission.ChangeNickname); - Permissions.SetValue(ref value, manageNicknames, GuildPermission.ManageNicknames); - Permissions.SetValue(ref value, manageRoles, GuildPermission.ManageRoles); - Permissions.SetValue(ref value, manageWebhooks, GuildPermission.ManageWebhooks); - Permissions.SetValue(ref value, manageEmojis, GuildPermission.ManageEmojis); + Permissions.SetValue(ref value, createInstantInvite, GuildPermission.CREATE_INSTANT_INVITE); + Permissions.SetValue(ref value, banMembers, GuildPermission.BAN_MEMBERS); + Permissions.SetValue(ref value, kickMembers, GuildPermission.KICK_MEMBERS); + Permissions.SetValue(ref value, administrator, GuildPermission.ADMINISTRATOR); + Permissions.SetValue(ref value, manageChannels, GuildPermission.MANAGE_CHANNELS); + Permissions.SetValue(ref value, manageGuild, GuildPermission.MANAGE_GUILD); + Permissions.SetValue(ref value, addReactions, GuildPermission.ADD_REACTIONS); + Permissions.SetValue(ref value, viewAuditLog, GuildPermission.VIEW_AUDIT_LOG); + Permissions.SetValue(ref value, readMessages, GuildPermission.READ_MESSAGES); + Permissions.SetValue(ref value, sendMessages, GuildPermission.SEND_MESSAGES); + Permissions.SetValue(ref value, sendTTSMessages, GuildPermission.SEND_TTS_MESSAGES); + Permissions.SetValue(ref value, manageMessages, GuildPermission.MANAGE_MESSAGES); + Permissions.SetValue(ref value, embedLinks, GuildPermission.EMBED_LINKS); + Permissions.SetValue(ref value, attachFiles, GuildPermission.ATTACH_FILES); + Permissions.SetValue(ref value, readMessageHistory, GuildPermission.READ_MESSAGE_HISTORY); + Permissions.SetValue(ref value, mentionEveryone, GuildPermission.MENTION_EVERYONE); + Permissions.SetValue(ref value, useExternalEmojis, GuildPermission.USE_EXTERNAL_EMOJIS); + Permissions.SetValue(ref value, connect, GuildPermission.CONNECT); + Permissions.SetValue(ref value, speak, GuildPermission.SPEAK); + Permissions.SetValue(ref value, muteMembers, GuildPermission.MUTE_MEMBERS); + Permissions.SetValue(ref value, deafenMembers, GuildPermission.DEAFEN_MEMBERS); + Permissions.SetValue(ref value, moveMembers, GuildPermission.MOVE_MEMBERS); + Permissions.SetValue(ref value, useVoiceActivation, GuildPermission.USE_VAD); + Permissions.SetValue(ref value, changeNickname, GuildPermission.CHANGE_NICKNAME); + Permissions.SetValue(ref value, manageNicknames, GuildPermission.MANAGE_NICKNAMES); + Permissions.SetValue(ref value, manageRoles, GuildPermission.MANAGE_ROLES); + Permissions.SetValue(ref value, manageWebhooks, GuildPermission.MANAGE_WEBHOOKS); + Permissions.SetValue(ref value, manageEmojis, GuildPermission.MANAGE_EMOJIS); RawValue = value; } @@ -122,26 +127,26 @@ namespace Discord /// Creates a new GuildPermissions with the provided permissions. public GuildPermissions(bool createInstantInvite = false, bool kickMembers = false, bool banMembers = false, bool administrator = false, bool manageChannels = false, bool manageGuild = false, - bool addReactions = false, + bool addReactions = false, bool viewAuditLog = false, bool readMessages = false, bool sendMessages = false, bool sendTTSMessages = false, bool manageMessages = false, bool embedLinks = false, bool attachFiles = false, bool readMessageHistory = false, bool mentionEveryone = false, bool useExternalEmojis = false, bool connect = false, bool speak = false, bool muteMembers = false, bool deafenMembers = false, bool moveMembers = false, bool useVoiceActivation = false, bool? changeNickname = false, bool? manageNicknames = false, bool manageRoles = false, bool manageWebhooks = false, bool manageEmojis = false) - : this(0, createInstantInvite, manageRoles, kickMembers, banMembers, manageChannels, manageGuild, addReactions, + : this(0, createInstantInvite, manageRoles, kickMembers, banMembers, manageChannels, manageGuild, addReactions, viewAuditLog, readMessages, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, mentionEveryone, useExternalEmojis, connect, manageWebhooks, manageEmojis) { } /// Creates a new GuildPermissions from this one, changing the provided non-null permissions. public GuildPermissions Modify(bool? createInstantInvite = null, bool? kickMembers = null, bool? banMembers = null, bool? administrator = null, bool? manageChannels = null, bool? manageGuild = null, - bool? addReactions = null, + bool? addReactions = null, bool? viewAuditLog = null, bool? readMessages = null, bool? sendMessages = null, bool? sendTTSMessages = null, bool? manageMessages = null, bool? embedLinks = null, bool? attachFiles = null, bool? readMessageHistory = null, bool? mentionEveryone = null, bool? useExternalEmojis = null, bool? connect = null, bool? speak = null, bool? muteMembers = null, bool? deafenMembers = null, bool? moveMembers = null, bool? useVoiceActivation = null, bool? changeNickname = null, bool? manageNicknames = null, bool? manageRoles = null, bool? manageWebhooks = null, bool? manageEmojis = null) - => new GuildPermissions(RawValue, createInstantInvite, manageRoles, kickMembers, banMembers, manageChannels, manageGuild, addReactions, + => new GuildPermissions(RawValue, createInstantInvite, manageRoles, kickMembers, banMembers, manageChannels, manageGuild, addReactions, viewAuditLog, readMessages, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, changeNickname, manageNicknames, manageRoles, manageWebhooks, manageEmojis); @@ -151,11 +156,14 @@ namespace Discord public List ToList() { var perms = new List(); - ulong x = 1; - for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) + + // bitwise operations on raw value + // each of the GuildPermissions increments by 2^i from 0 to MaxBits + for (byte i = 0; i < Permissions.MaxBits; i++) { - if ((RawValue & x) != 0) - perms.Add((GuildPermission)i); + ulong flag = (ulong)Math.Pow(2, i); + if ((RawValue & flag) != 0) + perms.Add((GuildPermission)flag); } return perms; } diff --git a/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs b/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs index c3f8b2bab..f648951d9 100644 --- a/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Diagnostics; namespace Discord @@ -21,47 +22,47 @@ namespace Discord public ulong DenyValue { get; } /// If Allowed, a user may create invites. - public PermValue CreateInstantInvite => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.CreateInstantInvite); + public PermValue CreateInstantInvite => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.CREATE_INSTANT_INVITE); /// If Allowed, a user may create, delete and modify this channel. - public PermValue ManageChannel => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageChannel); + public PermValue ManageChannel => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_CHANNELS); /// If Allowed, a user may add reactions. - public PermValue AddReactions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.AddReactions); + public PermValue AddReactions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ADD_REACTIONS); /// If Allowed, a user may join channels. - public PermValue ReadMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ReadMessages); + public PermValue ReadMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.READ_MESSAGES); /// If Allowed, a user may send messages. - public PermValue SendMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SendMessages); + public PermValue SendMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SEND_MESSAGES); /// If Allowed, a user may send text-to-speech messages. - public PermValue SendTTSMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SendTTSMessages); + public PermValue SendTTSMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SEND_TTS_MESSAGES); /// If Allowed, a user may delete messages. - public PermValue ManageMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageMessages); + public PermValue ManageMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_MESSAGES); /// If Allowed, Discord will auto-embed links sent by this user. - public PermValue EmbedLinks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.EmbedLinks); + public PermValue EmbedLinks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.EMBED_LINKS); /// If Allowed, a user may send files. - public PermValue AttachFiles => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.AttachFiles); + public PermValue AttachFiles => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ATTACH_FILES); /// If Allowed, a user may read previous messages. - public PermValue ReadMessageHistory => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ReadMessageHistory); + public PermValue ReadMessageHistory => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.READ_MESSAGE_HISTORY); /// If Allowed, a user may mention @everyone. - public PermValue MentionEveryone => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MentionEveryone); + public PermValue MentionEveryone => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MENTION_EVERYONE); /// If Allowed, a user may use custom emoji from other guilds. - public PermValue UseExternalEmojis => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.UseExternalEmojis); + public PermValue UseExternalEmojis => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.USE_EXTERNAL_EMOJIS); /// If Allowed, a user may connect to a voice channel. - public PermValue Connect => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.Connect); + public PermValue Connect => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.CONNECT); /// If Allowed, a user may speak in a voice channel. - public PermValue Speak => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.Speak); + public PermValue Speak => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SPEAK); /// If Allowed, a user may mute users. - public PermValue MuteMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MuteMembers); + public PermValue MuteMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MUTE_MEMBERS); /// If Allowed, a user may deafen users. - public PermValue DeafenMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.DeafenMembers); + public PermValue DeafenMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.DEAFEN_MEMBERS); /// If Allowed, a user may move other users between voice channels. - public PermValue MoveMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MoveMembers); + public PermValue MoveMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MOVE_MEMBERS); /// If Allowed, a user may use voice-activity-detection rather than push-to-talk. - public PermValue UseVAD => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.UseVAD); + public PermValue UseVAD => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.USE_VAD); /// If Allowed, a user may adjust permissions. This also implictly grants all other permissions. - public PermValue ManagePermissions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManagePermissions); + public PermValue ManagePermissions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_ROLES); /// If True, a user may edit the webhooks for this channel. - public PermValue ManageWebhooks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageWebhooks); + public PermValue ManageWebhooks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_WEBHOOKS); /// Creates a new OverwritePermissions with the provided allow and deny packed values. public OverwritePermissions(ulong allowValue, ulong denyValue) @@ -78,26 +79,26 @@ namespace Discord PermValue? deafenMembers = null, PermValue? moveMembers = null, PermValue? useVoiceActivation = null, PermValue? managePermissions = null, PermValue? manageWebhooks = null) { - Permissions.SetValue(ref allowValue, ref denyValue, createInstantInvite, ChannelPermission.CreateInstantInvite); - Permissions.SetValue(ref allowValue, ref denyValue, manageChannel, ChannelPermission.ManageChannel); - Permissions.SetValue(ref allowValue, ref denyValue, addReactions, ChannelPermission.AddReactions); - Permissions.SetValue(ref allowValue, ref denyValue, readMessages, ChannelPermission.ReadMessages); - Permissions.SetValue(ref allowValue, ref denyValue, sendMessages, ChannelPermission.SendMessages); - Permissions.SetValue(ref allowValue, ref denyValue, sendTTSMessages, ChannelPermission.SendTTSMessages); - Permissions.SetValue(ref allowValue, ref denyValue, manageMessages, ChannelPermission.ManageMessages); - Permissions.SetValue(ref allowValue, ref denyValue, embedLinks, ChannelPermission.EmbedLinks); - Permissions.SetValue(ref allowValue, ref denyValue, attachFiles, ChannelPermission.AttachFiles); - Permissions.SetValue(ref allowValue, ref denyValue, readMessageHistory, ChannelPermission.ReadMessageHistory); - Permissions.SetValue(ref allowValue, ref denyValue, mentionEveryone, ChannelPermission.MentionEveryone); - Permissions.SetValue(ref allowValue, ref denyValue, useExternalEmojis, ChannelPermission.UseExternalEmojis); - Permissions.SetValue(ref allowValue, ref denyValue, connect, ChannelPermission.Connect); - Permissions.SetValue(ref allowValue, ref denyValue, speak, ChannelPermission.Speak); - Permissions.SetValue(ref allowValue, ref denyValue, muteMembers, ChannelPermission.MuteMembers); - Permissions.SetValue(ref allowValue, ref denyValue, deafenMembers, ChannelPermission.DeafenMembers); - Permissions.SetValue(ref allowValue, ref denyValue, moveMembers, ChannelPermission.MoveMembers); - Permissions.SetValue(ref allowValue, ref denyValue, useVoiceActivation, ChannelPermission.UseVAD); - Permissions.SetValue(ref allowValue, ref denyValue, managePermissions, ChannelPermission.ManagePermissions); - Permissions.SetValue(ref allowValue, ref denyValue, manageWebhooks, ChannelPermission.ManageWebhooks); + Permissions.SetValue(ref allowValue, ref denyValue, createInstantInvite, ChannelPermission.CREATE_INSTANT_INVITE); + Permissions.SetValue(ref allowValue, ref denyValue, manageChannel, ChannelPermission.MANAGE_CHANNELS); + Permissions.SetValue(ref allowValue, ref denyValue, addReactions, ChannelPermission.ADD_REACTIONS); + Permissions.SetValue(ref allowValue, ref denyValue, readMessages, ChannelPermission.READ_MESSAGES); + Permissions.SetValue(ref allowValue, ref denyValue, sendMessages, ChannelPermission.SEND_MESSAGES); + Permissions.SetValue(ref allowValue, ref denyValue, sendTTSMessages, ChannelPermission.SEND_TTS_MESSAGES); + Permissions.SetValue(ref allowValue, ref denyValue, manageMessages, ChannelPermission.MANAGE_MESSAGES); + Permissions.SetValue(ref allowValue, ref denyValue, embedLinks, ChannelPermission.EMBED_LINKS); + Permissions.SetValue(ref allowValue, ref denyValue, attachFiles, ChannelPermission.ATTACH_FILES); + Permissions.SetValue(ref allowValue, ref denyValue, readMessageHistory, ChannelPermission.READ_MESSAGE_HISTORY); + Permissions.SetValue(ref allowValue, ref denyValue, mentionEveryone, ChannelPermission.MENTION_EVERYONE); + Permissions.SetValue(ref allowValue, ref denyValue, useExternalEmojis, ChannelPermission.USE_EXTERNAL_EMOJIS); + Permissions.SetValue(ref allowValue, ref denyValue, connect, ChannelPermission.CONNECT); + Permissions.SetValue(ref allowValue, ref denyValue, speak, ChannelPermission.SPEAK); + Permissions.SetValue(ref allowValue, ref denyValue, muteMembers, ChannelPermission.MUTE_MEMBERS); + Permissions.SetValue(ref allowValue, ref denyValue, deafenMembers, ChannelPermission.DEAFEN_MEMBERS); + Permissions.SetValue(ref allowValue, ref denyValue, moveMembers, ChannelPermission.MOVE_MEMBERS); + Permissions.SetValue(ref allowValue, ref denyValue, useVoiceActivation, ChannelPermission.USE_VAD); + Permissions.SetValue(ref allowValue, ref denyValue, managePermissions, ChannelPermission.MANAGE_ROLES); + Permissions.SetValue(ref allowValue, ref denyValue, manageWebhooks, ChannelPermission.MANAGE_WEBHOOKS); AllowValue = allowValue; DenyValue = denyValue; @@ -128,22 +129,22 @@ namespace Discord public List ToAllowList() { var perms = new List(); - ulong x = 1; - for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) + for (byte i = 0; i < Permissions.MaxBits; i++) { - if ((AllowValue & x) != 0) - perms.Add((ChannelPermission)i); + ulong flag = (ulong)Math.Pow(2, i); + if ((AllowValue & flag) != 0) + perms.Add((ChannelPermission)flag); } return perms; } public List ToDenyList() { var perms = new List(); - ulong x = 1; - for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) + for (byte i = 0; i < Permissions.MaxBits; i++) { - if ((DenyValue & x) != 0) - perms.Add((ChannelPermission)i); + ulong flag = (ulong)Math.Pow(2, i); + if ((DenyValue & flag) != 0) + perms.Add((ChannelPermission)flag); } return perms; } diff --git a/src/Discord.Net.Core/Utils/Permissions.cs b/src/Discord.Net.Core/Utils/Permissions.cs index c2b7e83ea..05a0c89b1 100644 --- a/src/Discord.Net.Core/Utils/Permissions.cs +++ b/src/Discord.Net.Core/Utils/Permissions.cs @@ -7,84 +7,84 @@ namespace Discord public const int MaxBits = 53; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static PermValue GetValue(ulong allow, ulong deny, ChannelPermission bit) - => GetValue(allow, deny, (byte)bit); + public static PermValue GetValue(ulong allow, ulong deny, ChannelPermission flag) + => GetValue(allow, deny, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static PermValue GetValue(ulong allow, ulong deny, GuildPermission bit) - => GetValue(allow, deny, (byte)bit); + public static PermValue GetValue(ulong allow, ulong deny, GuildPermission flag) + => GetValue(allow, deny, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static PermValue GetValue(ulong allow, ulong deny, byte bit) + public static PermValue GetValue(ulong allow, ulong deny, ulong flag) { - if (HasBit(allow, bit)) + if (HasFlag(allow, flag)) return PermValue.Allow; - else if (HasBit(deny, bit)) + else if (HasFlag(deny, flag)) return PermValue.Deny; else return PermValue.Inherit; } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool GetValue(ulong value, ChannelPermission bit) - => GetValue(value, (byte)bit); + public static bool GetValue(ulong value, ChannelPermission flag) + => GetValue(value, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool GetValue(ulong value, GuildPermission bit) - => GetValue(value, (byte)bit); + public static bool GetValue(ulong value, GuildPermission flag) + => GetValue(value, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool GetValue(ulong value, byte bit) => HasBit(value, bit); + public static bool GetValue(ulong value, ulong flag) => HasFlag(value, flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetValue(ref ulong rawValue, bool? value, ChannelPermission bit) - => SetValue(ref rawValue, value, (byte)bit); + public static void SetValue(ref ulong rawValue, bool? value, ChannelPermission flag) + => SetValue(ref rawValue, value, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetValue(ref ulong rawValue, bool? value, GuildPermission bit) - => SetValue(ref rawValue, value, (byte)bit); + public static void SetValue(ref ulong rawValue, bool? value, GuildPermission flag) + => SetValue(ref rawValue, value, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetValue(ref ulong rawValue, bool? value, byte bit) + public static void SetValue(ref ulong rawValue, bool? value, ulong flag) { if (value.HasValue) { if (value == true) - SetBit(ref rawValue, bit); + SetFlag(ref rawValue, flag); else - UnsetBit(ref rawValue, bit); + UnsetFlag(ref rawValue, flag); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetValue(ref ulong allow, ref ulong deny, PermValue? value, ChannelPermission bit) - => SetValue(ref allow, ref deny, value, (byte)bit); + public static void SetValue(ref ulong allow, ref ulong deny, PermValue? value, ChannelPermission flag) + => SetValue(ref allow, ref deny, value, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetValue(ref ulong allow, ref ulong deny, PermValue? value, GuildPermission bit) - => SetValue(ref allow, ref deny, value, (byte)bit); + public static void SetValue(ref ulong allow, ref ulong deny, PermValue? value, GuildPermission flag) + => SetValue(ref allow, ref deny, value, (ulong)flag); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetValue(ref ulong allow, ref ulong deny, PermValue? value, byte bit) + public static void SetValue(ref ulong allow, ref ulong deny, PermValue? value, ulong flag) { if (value.HasValue) { switch (value) { case PermValue.Allow: - SetBit(ref allow, bit); - UnsetBit(ref deny, bit); + SetFlag(ref allow, flag); + UnsetFlag(ref deny, flag); break; case PermValue.Deny: - UnsetBit(ref allow, bit); - SetBit(ref deny, bit); + UnsetFlag(ref allow, flag); + SetFlag(ref deny, flag); break; default: - UnsetBit(ref allow, bit); - UnsetBit(ref deny, bit); + UnsetFlag(ref allow, flag); + UnsetFlag(ref deny, flag); break; } } } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static bool HasBit(ulong value, byte bit) => (value & (1U << bit)) != 0; + private static bool HasFlag(ulong value, ulong flag) => (value & flag) != 0; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetBit(ref ulong value, byte bit) => value |= (1U << bit); + public static void SetFlag(ref ulong value, ulong flag) => value |= flag; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void UnsetBit(ref ulong value, byte bit) => value &= ~(1U << bit); + public static void UnsetFlag(ref ulong value, ulong flag) => value &= ~flag; public static ChannelPermissions ToChannelPerms(IGuildChannel channel, ulong guildPermissions) => new ChannelPermissions(guildPermissions & ChannelPermissions.All(channel).RawValue); @@ -100,7 +100,7 @@ namespace Discord { foreach (var roleId in user.RoleIds) resolvedPermissions |= guild.GetRole(roleId)?.Permissions.RawValue ?? 0; - if (GetValue(resolvedPermissions, GuildPermission.Administrator)) + if (GetValue(resolvedPermissions, GuildPermission.ADMINISTRATOR)) resolvedPermissions = GuildPermissions.All.RawValue; //Administrators always have all permissions } return resolvedPermissions; @@ -115,7 +115,7 @@ namespace Discord ulong resolvedPermissions = 0; ulong mask = ChannelPermissions.All(channel).RawValue; - if (GetValue(guildPermissions, GuildPermission.Administrator)) //Includes owner + if (GetValue(guildPermissions, GuildPermission.ADMINISTRATOR)) //Includes owner resolvedPermissions = mask; //Owners and administrators always have all permissions else { @@ -152,18 +152,18 @@ namespace Discord if (channel is ITextChannel textChannel) { - if (!GetValue(resolvedPermissions, ChannelPermission.ReadMessages)) + if (!GetValue(resolvedPermissions, ChannelPermission.READ_MESSAGES)) { //No read permission on a text channel removes all other permissions resolvedPermissions = 0; } - else if (!GetValue(resolvedPermissions, ChannelPermission.SendMessages)) + else if (!GetValue(resolvedPermissions, ChannelPermission.SEND_MESSAGES)) { //No send permissions on a text channel removes all send-related permissions - resolvedPermissions &= ~(1UL << (int)ChannelPermission.SendTTSMessages); - resolvedPermissions &= ~(1UL << (int)ChannelPermission.MentionEveryone); - resolvedPermissions &= ~(1UL << (int)ChannelPermission.EmbedLinks); - resolvedPermissions &= ~(1UL << (int)ChannelPermission.AttachFiles); + resolvedPermissions &= ~(1UL << (int)ChannelPermission.SEND_TTS_MESSAGES); + resolvedPermissions &= ~(1UL << (int)ChannelPermission.MENTION_EVERYONE); + resolvedPermissions &= ~(1UL << (int)ChannelPermission.EMBED_LINKS); + resolvedPermissions &= ~(1UL << (int)ChannelPermission.ATTACH_FILES); } } resolvedPermissions &= mask; //Ensure we didnt get any permissions this channel doesnt support (from guildPerms, for example) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs index c22523e00..f20e9d69d 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs @@ -22,7 +22,7 @@ namespace Discord.WebSocket public override IReadOnlyCollection Users => Guild.Users.Where(x => Permissions.GetValue( Permissions.ResolveChannel(Guild, x, this, Permissions.ResolveGuild(Guild, x)), - ChannelPermission.ReadMessages)).ToImmutableArray(); + ChannelPermission.READ_MESSAGES)).ToImmutableArray(); internal SocketTextChannel(DiscordSocketClient discord, ulong id, SocketGuild guild) : base(discord, id, guild) @@ -103,7 +103,7 @@ namespace Discord.WebSocket { var guildPerms = Permissions.ResolveGuild(Guild, user); var channelPerms = Permissions.ResolveChannel(Guild, user, this, guildPerms); - if (Permissions.GetValue(channelPerms, ChannelPermission.ReadMessages)) + if (Permissions.GetValue(channelPerms, ChannelPermission.READ_MESSAGES)) return user; } return null;