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;