@@ -1,40 +1,29 @@ | |||||
namespace Discord | 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, | |||||
} | } | ||||
} | } |
@@ -34,48 +34,48 @@ namespace Discord | |||||
public ulong RawValue { get; } | public ulong RawValue { get; } | ||||
/// <summary> If True, a user may create invites. </summary> | /// <summary> If True, a user may create invites. </summary> | ||||
public bool CreateInstantInvite => Permissions.GetValue(RawValue, ChannelPermission.CreateInstantInvite); | |||||
public bool CreateInstantInvite => Permissions.GetValue(RawValue, ChannelPermission.CREATE_INSTANT_INVITE); | |||||
/// <summary> If True, a user may create, delete and modify this channel. </summary> | /// <summary> If True, a user may create, delete and modify this channel. </summary> | ||||
public bool ManageChannel => Permissions.GetValue(RawValue, ChannelPermission.ManageChannel); | |||||
public bool ManageChannel => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_CHANNELS); | |||||
/// <summary> If true, a user may add reactions. </summary> | /// <summary> If true, a user may add reactions. </summary> | ||||
public bool AddReactions => Permissions.GetValue(RawValue, ChannelPermission.AddReactions); | |||||
public bool AddReactions => Permissions.GetValue(RawValue, ChannelPermission.ADD_REACTIONS); | |||||
/// <summary> If True, a user may join channels. </summary> | /// <summary> If True, a user may join channels. </summary> | ||||
public bool ReadMessages => Permissions.GetValue(RawValue, ChannelPermission.ReadMessages); | |||||
public bool ReadMessages => Permissions.GetValue(RawValue, ChannelPermission.READ_MESSAGES); | |||||
/// <summary> If True, a user may send messages. </summary> | /// <summary> If True, a user may send messages. </summary> | ||||
public bool SendMessages => Permissions.GetValue(RawValue, ChannelPermission.SendMessages); | |||||
public bool SendMessages => Permissions.GetValue(RawValue, ChannelPermission.SEND_MESSAGES); | |||||
/// <summary> If True, a user may send text-to-speech messages. </summary> | /// <summary> If True, a user may send text-to-speech messages. </summary> | ||||
public bool SendTTSMessages => Permissions.GetValue(RawValue, ChannelPermission.SendTTSMessages); | |||||
public bool SendTTSMessages => Permissions.GetValue(RawValue, ChannelPermission.SEND_TTS_MESSAGES); | |||||
/// <summary> If True, a user may delete messages. </summary> | /// <summary> If True, a user may delete messages. </summary> | ||||
public bool ManageMessages => Permissions.GetValue(RawValue, ChannelPermission.ManageMessages); | |||||
public bool ManageMessages => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_MESSAGES); | |||||
/// <summary> If True, Discord will auto-embed links sent by this user. </summary> | /// <summary> If True, Discord will auto-embed links sent by this user. </summary> | ||||
public bool EmbedLinks => Permissions.GetValue(RawValue, ChannelPermission.EmbedLinks); | |||||
public bool EmbedLinks => Permissions.GetValue(RawValue, ChannelPermission.EMBED_LINKS); | |||||
/// <summary> If True, a user may send files. </summary> | /// <summary> If True, a user may send files. </summary> | ||||
public bool AttachFiles => Permissions.GetValue(RawValue, ChannelPermission.AttachFiles); | |||||
public bool AttachFiles => Permissions.GetValue(RawValue, ChannelPermission.ATTACH_FILES); | |||||
/// <summary> If True, a user may read previous messages. </summary> | /// <summary> If True, a user may read previous messages. </summary> | ||||
public bool ReadMessageHistory => Permissions.GetValue(RawValue, ChannelPermission.ReadMessageHistory); | |||||
public bool ReadMessageHistory => Permissions.GetValue(RawValue, ChannelPermission.READ_MESSAGE_HISTORY); | |||||
/// <summary> If True, a user may mention @everyone. </summary> | /// <summary> If True, a user may mention @everyone. </summary> | ||||
public bool MentionEveryone => Permissions.GetValue(RawValue, ChannelPermission.MentionEveryone); | |||||
public bool MentionEveryone => Permissions.GetValue(RawValue, ChannelPermission.MENTION_EVERYONE); | |||||
/// <summary> If True, a user may use custom emoji from other guilds. </summary> | /// <summary> If True, a user may use custom emoji from other guilds. </summary> | ||||
public bool UseExternalEmojis => Permissions.GetValue(RawValue, ChannelPermission.UseExternalEmojis); | |||||
public bool UseExternalEmojis => Permissions.GetValue(RawValue, ChannelPermission.USE_EXTERNAL_EMOJIS); | |||||
/// <summary> If True, a user may connect to a voice channel. </summary> | /// <summary> If True, a user may connect to a voice channel. </summary> | ||||
public bool Connect => Permissions.GetValue(RawValue, ChannelPermission.Connect); | |||||
public bool Connect => Permissions.GetValue(RawValue, ChannelPermission.CONNECT); | |||||
/// <summary> If True, a user may speak in a voice channel. </summary> | /// <summary> If True, a user may speak in a voice channel. </summary> | ||||
public bool Speak => Permissions.GetValue(RawValue, ChannelPermission.Speak); | |||||
public bool Speak => Permissions.GetValue(RawValue, ChannelPermission.SPEAK); | |||||
/// <summary> If True, a user may mute users. </summary> | /// <summary> If True, a user may mute users. </summary> | ||||
public bool MuteMembers => Permissions.GetValue(RawValue, ChannelPermission.MuteMembers); | |||||
public bool MuteMembers => Permissions.GetValue(RawValue, ChannelPermission.MUTE_MEMBERS); | |||||
/// <summary> If True, a user may deafen users. </summary> | /// <summary> If True, a user may deafen users. </summary> | ||||
public bool DeafenMembers => Permissions.GetValue(RawValue, ChannelPermission.DeafenMembers); | |||||
public bool DeafenMembers => Permissions.GetValue(RawValue, ChannelPermission.DEAFEN_MEMBERS); | |||||
/// <summary> If True, a user may move other users between voice channels. </summary> | /// <summary> If True, a user may move other users between voice channels. </summary> | ||||
public bool MoveMembers => Permissions.GetValue(RawValue, ChannelPermission.MoveMembers); | |||||
public bool MoveMembers => Permissions.GetValue(RawValue, ChannelPermission.MOVE_MEMBERS); | |||||
/// <summary> If True, a user may use voice-activity-detection rather than push-to-talk. </summary> | /// <summary> If True, a user may use voice-activity-detection rather than push-to-talk. </summary> | ||||
public bool UseVAD => Permissions.GetValue(RawValue, ChannelPermission.UseVAD); | |||||
public bool UseVAD => Permissions.GetValue(RawValue, ChannelPermission.USE_VAD); | |||||
/// <summary> If True, a user may adjust permissions. This also implictly grants all other permissions. </summary> | /// <summary> If True, a user may adjust permissions. This also implictly grants all other permissions. </summary> | ||||
public bool ManagePermissions => Permissions.GetValue(RawValue, ChannelPermission.ManagePermissions); | |||||
public bool ManagePermissions => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_ROLES); | |||||
/// <summary> If True, a user may edit the webhooks for this channel. </summary> | /// <summary> If True, a user may edit the webhooks for this channel. </summary> | ||||
public bool ManageWebhooks => Permissions.GetValue(RawValue, ChannelPermission.ManageWebhooks); | |||||
public bool ManageWebhooks => Permissions.GetValue(RawValue, ChannelPermission.MANAGE_WEBHOOKS); | |||||
/// <summary> Creates a new ChannelPermissions with the provided packed value. </summary> | /// <summary> Creates a new ChannelPermissions with the provided packed value. </summary> | ||||
public ChannelPermissions(ulong rawValue) { RawValue = rawValue; } | public ChannelPermissions(ulong rawValue) { RawValue = rawValue; } | ||||
@@ -89,26 +89,26 @@ namespace Discord | |||||
{ | { | ||||
ulong value = initialValue; | 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; | RawValue = value; | ||||
} | } | ||||
@@ -141,11 +141,11 @@ namespace Discord | |||||
public List<ChannelPermission> ToList() | public List<ChannelPermission> ToList() | ||||
{ | { | ||||
var perms = new List<ChannelPermission>(); | var perms = new List<ChannelPermission>(); | ||||
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; | return perms; | ||||
} | } | ||||
@@ -1,40 +1,34 @@ | |||||
namespace Discord | 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 | |||||
} | } | ||||
} | } |
@@ -1,4 +1,5 @@ | |||||
using System.Collections.Generic; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
namespace Discord | namespace Discord | ||||
@@ -11,110 +12,114 @@ namespace Discord | |||||
/// <summary> Gets a GuildPermissions that grants all guild permissions for webhook users. </summary> | /// <summary> Gets a GuildPermissions that grants all guild permissions for webhook users. </summary> | ||||
public static readonly GuildPermissions Webhook = new GuildPermissions(0b00000_0000000_0001101100000_000000); | public static readonly GuildPermissions Webhook = new GuildPermissions(0b00000_0000000_0001101100000_000000); | ||||
/// <summary> Gets a GuildPermissions that grants all guild permissions. </summary> | /// <summary> Gets a GuildPermissions that grants all guild permissions. </summary> | ||||
public static readonly GuildPermissions All = new GuildPermissions(0b11111_1111110_0111111110001_111111); | |||||
public static readonly GuildPermissions All = new GuildPermissions(0b11111_1111110_0111111110011_111111); | |||||
/// <summary> Gets a packed value representing all the permissions in this GuildPermissions. </summary> | /// <summary> Gets a packed value representing all the permissions in this GuildPermissions. </summary> | ||||
public ulong RawValue { get; } | public ulong RawValue { get; } | ||||
/// <summary> If True, a user may create invites. </summary> | /// <summary> If True, a user may create invites. </summary> | ||||
public bool CreateInstantInvite => Permissions.GetValue(RawValue, GuildPermission.CreateInstantInvite); | |||||
public bool CreateInstantInvite => Permissions.GetValue(RawValue, GuildPermission.CREATE_INSTANT_INVITE); | |||||
/// <summary> If True, a user may ban users from the guild. </summary> | /// <summary> If True, a user may ban users from the guild. </summary> | ||||
public bool BanMembers => Permissions.GetValue(RawValue, GuildPermission.BanMembers); | |||||
public bool BanMembers => Permissions.GetValue(RawValue, GuildPermission.BAN_MEMBERS); | |||||
/// <summary> If True, a user may kick users from the guild. </summary> | /// <summary> If True, a user may kick users from the guild. </summary> | ||||
public bool KickMembers => Permissions.GetValue(RawValue, GuildPermission.KickMembers); | |||||
public bool KickMembers => Permissions.GetValue(RawValue, GuildPermission.KICK_MEMBERS); | |||||
/// <summary> If True, a user is granted all permissions, and cannot have them revoked via channel permissions. </summary> | /// <summary> If True, a user is granted all permissions, and cannot have them revoked via channel permissions. </summary> | ||||
public bool Administrator => Permissions.GetValue(RawValue, GuildPermission.Administrator); | |||||
public bool Administrator => Permissions.GetValue(RawValue, GuildPermission.ADMINISTRATOR); | |||||
/// <summary> If True, a user may create, delete and modify channels. </summary> | /// <summary> If True, a user may create, delete and modify channels. </summary> | ||||
public bool ManageChannels => Permissions.GetValue(RawValue, GuildPermission.ManageChannels); | |||||
public bool ManageChannels => Permissions.GetValue(RawValue, GuildPermission.MANAGE_CHANNELS); | |||||
/// <summary> If True, a user may adjust guild properties. </summary> | /// <summary> If True, a user may adjust guild properties. </summary> | ||||
public bool ManageGuild => Permissions.GetValue(RawValue, GuildPermission.ManageGuild); | |||||
public bool ManageGuild => Permissions.GetValue(RawValue, GuildPermission.MANAGE_GUILD); | |||||
/// <summary> If true, a user may add reactions. </summary> | /// <summary> If true, a user may add reactions. </summary> | ||||
public bool AddReactions => Permissions.GetValue(RawValue, GuildPermission.AddReactions); | |||||
public bool AddReactions => Permissions.GetValue(RawValue, GuildPermission.ADD_REACTIONS); | |||||
/// <summary> If true, a user may view the audit log. </summary> | |||||
public bool ViewAuditLog => Permissions.GetValue(RawValue, GuildPermission.VIEW_AUDIT_LOG); | |||||
/// <summary> If True, a user may join channels. </summary> | /// <summary> If True, a user may join channels. </summary> | ||||
public bool ReadMessages => Permissions.GetValue(RawValue, GuildPermission.ReadMessages); | |||||
public bool ReadMessages => Permissions.GetValue(RawValue, GuildPermission.READ_MESSAGES); | |||||
/// <summary> If True, a user may send messages. </summary> | /// <summary> If True, a user may send messages. </summary> | ||||
public bool SendMessages => Permissions.GetValue(RawValue, GuildPermission.SendMessages); | |||||
public bool SendMessages => Permissions.GetValue(RawValue, GuildPermission.SEND_MESSAGES); | |||||
/// <summary> If True, a user may send text-to-speech messages. </summary> | /// <summary> If True, a user may send text-to-speech messages. </summary> | ||||
public bool SendTTSMessages => Permissions.GetValue(RawValue, GuildPermission.SendTTSMessages); | |||||
public bool SendTTSMessages => Permissions.GetValue(RawValue, GuildPermission.SEND_TTS_MESSAGES); | |||||
/// <summary> If True, a user may delete messages. </summary> | /// <summary> If True, a user may delete messages. </summary> | ||||
public bool ManageMessages => Permissions.GetValue(RawValue, GuildPermission.ManageMessages); | |||||
public bool ManageMessages => Permissions.GetValue(RawValue, GuildPermission.MANAGE_MESSAGES); | |||||
/// <summary> If True, Discord will auto-embed links sent by this user. </summary> | /// <summary> If True, Discord will auto-embed links sent by this user. </summary> | ||||
public bool EmbedLinks => Permissions.GetValue(RawValue, GuildPermission.EmbedLinks); | |||||
public bool EmbedLinks => Permissions.GetValue(RawValue, GuildPermission.EMBED_LINKS); | |||||
/// <summary> If True, a user may send files. </summary> | /// <summary> If True, a user may send files. </summary> | ||||
public bool AttachFiles => Permissions.GetValue(RawValue, GuildPermission.AttachFiles); | |||||
public bool AttachFiles => Permissions.GetValue(RawValue, GuildPermission.ATTACH_FILES); | |||||
/// <summary> If True, a user may read previous messages. </summary> | /// <summary> If True, a user may read previous messages. </summary> | ||||
public bool ReadMessageHistory => Permissions.GetValue(RawValue, GuildPermission.ReadMessageHistory); | |||||
public bool ReadMessageHistory => Permissions.GetValue(RawValue, GuildPermission.READ_MESSAGE_HISTORY); | |||||
/// <summary> If True, a user may mention @everyone. </summary> | /// <summary> If True, a user may mention @everyone. </summary> | ||||
public bool MentionEveryone => Permissions.GetValue(RawValue, GuildPermission.MentionEveryone); | |||||
public bool MentionEveryone => Permissions.GetValue(RawValue, GuildPermission.MENTION_EVERYONE); | |||||
/// <summary> If True, a user may use custom emoji from other guilds. </summary> | /// <summary> If True, a user may use custom emoji from other guilds. </summary> | ||||
public bool UseExternalEmojis => Permissions.GetValue(RawValue, GuildPermission.UseExternalEmojis); | |||||
public bool UseExternalEmojis => Permissions.GetValue(RawValue, GuildPermission.USE_EXTERNAL_EMOJIS); | |||||
/// <summary> If True, a user may connect to a voice channel. </summary> | /// <summary> If True, a user may connect to a voice channel. </summary> | ||||
public bool Connect => Permissions.GetValue(RawValue, GuildPermission.Connect); | |||||
public bool Connect => Permissions.GetValue(RawValue, GuildPermission.CONNECT); | |||||
/// <summary> If True, a user may speak in a voice channel. </summary> | /// <summary> If True, a user may speak in a voice channel. </summary> | ||||
public bool Speak => Permissions.GetValue(RawValue, GuildPermission.Speak); | |||||
public bool Speak => Permissions.GetValue(RawValue, GuildPermission.SPEAK); | |||||
/// <summary> If True, a user may mute users. </summary> | /// <summary> If True, a user may mute users. </summary> | ||||
public bool MuteMembers => Permissions.GetValue(RawValue, GuildPermission.MuteMembers); | |||||
public bool MuteMembers => Permissions.GetValue(RawValue, GuildPermission.MUTE_MEMBERS); | |||||
/// <summary> If True, a user may deafen users. </summary> | /// <summary> If True, a user may deafen users. </summary> | ||||
public bool DeafenMembers => Permissions.GetValue(RawValue, GuildPermission.DeafenMembers); | |||||
public bool DeafenMembers => Permissions.GetValue(RawValue, GuildPermission.DEAFEN_MEMBERS); | |||||
/// <summary> If True, a user may move other users between voice channels. </summary> | /// <summary> If True, a user may move other users between voice channels. </summary> | ||||
public bool MoveMembers => Permissions.GetValue(RawValue, GuildPermission.MoveMembers); | |||||
public bool MoveMembers => Permissions.GetValue(RawValue, GuildPermission.MOVE_MEMBERS); | |||||
/// <summary> If True, a user may use voice-activity-detection rather than push-to-talk. </summary> | /// <summary> If True, a user may use voice-activity-detection rather than push-to-talk. </summary> | ||||
public bool UseVAD => Permissions.GetValue(RawValue, GuildPermission.UseVAD); | |||||
public bool UseVAD => Permissions.GetValue(RawValue, GuildPermission.USE_VAD); | |||||
/// <summary> If True, a user may change their own nickname. </summary> | /// <summary> If True, a user may change their own nickname. </summary> | ||||
public bool ChangeNickname => Permissions.GetValue(RawValue, GuildPermission.ChangeNickname); | |||||
public bool ChangeNickname => Permissions.GetValue(RawValue, GuildPermission.CHANGE_NICKNAME); | |||||
/// <summary> If True, a user may change the nickname of other users. </summary> | /// <summary> If True, a user may change the nickname of other users. </summary> | ||||
public bool ManageNicknames => Permissions.GetValue(RawValue, GuildPermission.ManageNicknames); | |||||
public bool ManageNicknames => Permissions.GetValue(RawValue, GuildPermission.MANAGE_NICKNAMES); | |||||
/// <summary> If True, a user may adjust roles. </summary> | /// <summary> If True, a user may adjust roles. </summary> | ||||
public bool ManageRoles => Permissions.GetValue(RawValue, GuildPermission.ManageRoles); | |||||
public bool ManageRoles => Permissions.GetValue(RawValue, GuildPermission.MANAGE_ROLES); | |||||
/// <summary> If True, a user may edit the webhooks for this guild. </summary> | /// <summary> If True, a user may edit the webhooks for this guild. </summary> | ||||
public bool ManageWebhooks => Permissions.GetValue(RawValue, GuildPermission.ManageWebhooks); | |||||
public bool ManageWebhooks => Permissions.GetValue(RawValue, GuildPermission.MANAGE_WEBHOOKS); | |||||
/// <summary> If True, a user may edit the emojis for this guild. </summary> | /// <summary> If True, a user may edit the emojis for this guild. </summary> | ||||
public bool ManageEmojis => Permissions.GetValue(RawValue, GuildPermission.ManageEmojis); | |||||
public bool ManageEmojis => Permissions.GetValue(RawValue, GuildPermission.MANAGE_EMOJIS); | |||||
/// <summary> Creates a new GuildPermissions with the provided packed value. </summary> | /// <summary> Creates a new GuildPermissions with the provided packed value. </summary> | ||||
public GuildPermissions(ulong rawValue) { RawValue = rawValue; } | public GuildPermissions(ulong rawValue) { RawValue = rawValue; } | ||||
private GuildPermissions(ulong initialValue, bool? createInstantInvite = null, bool? kickMembers = null, | 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? readMessages = null, bool? sendMessages = null, bool? sendTTSMessages = null, bool? manageMessages = null, | ||||
bool? embedLinks = null, bool? attachFiles = null, bool? readMessageHistory = null, bool? mentionEveryone = 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? moveMembers = null, bool? useVoiceActivation = null, bool? changeNickname = null, bool? manageNicknames = null, | ||||
bool? manageRoles = null, bool? manageWebhooks = null, bool? manageEmojis = null) | bool? manageRoles = null, bool? manageWebhooks = null, bool? manageEmojis = null) | ||||
{ | { | ||||
ulong value = initialValue; | 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; | RawValue = value; | ||||
} | } | ||||
@@ -122,26 +127,26 @@ namespace Discord | |||||
/// <summary> Creates a new GuildPermissions with the provided permissions. </summary> | /// <summary> Creates a new GuildPermissions with the provided permissions. </summary> | ||||
public GuildPermissions(bool createInstantInvite = false, bool kickMembers = false, | public GuildPermissions(bool createInstantInvite = false, bool kickMembers = false, | ||||
bool banMembers = false, bool administrator = false, bool manageChannels = false, bool manageGuild = 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 readMessages = false, bool sendMessages = false, bool sendTTSMessages = false, bool manageMessages = false, | ||||
bool embedLinks = false, bool attachFiles = false, bool readMessageHistory = false, bool mentionEveryone = 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 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 moveMembers = false, bool useVoiceActivation = false, bool? changeNickname = false, bool? manageNicknames = false, | ||||
bool manageRoles = false, bool manageWebhooks = false, bool manageEmojis = 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, | readMessages, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, mentionEveryone, useExternalEmojis, connect, | ||||
manageWebhooks, manageEmojis) { } | manageWebhooks, manageEmojis) { } | ||||
/// <summary> Creates a new GuildPermissions from this one, changing the provided non-null permissions. </summary> | /// <summary> Creates a new GuildPermissions from this one, changing the provided non-null permissions. </summary> | ||||
public GuildPermissions Modify(bool? createInstantInvite = null, bool? kickMembers = null, | public GuildPermissions Modify(bool? createInstantInvite = null, bool? kickMembers = null, | ||||
bool? banMembers = null, bool? administrator = null, bool? manageChannels = null, bool? manageGuild = 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? readMessages = null, bool? sendMessages = null, bool? sendTTSMessages = null, bool? manageMessages = null, | ||||
bool? embedLinks = null, bool? attachFiles = null, bool? readMessageHistory = null, bool? mentionEveryone = 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? 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? moveMembers = null, bool? useVoiceActivation = null, bool? changeNickname = null, bool? manageNicknames = null, | ||||
bool? manageRoles = null, bool? manageWebhooks = null, bool? manageEmojis = 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, | readMessages, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, mentionEveryone, useExternalEmojis, connect, | ||||
speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, changeNickname, manageNicknames, manageRoles, | speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, changeNickname, manageNicknames, manageRoles, | ||||
manageWebhooks, manageEmojis); | manageWebhooks, manageEmojis); | ||||
@@ -151,11 +156,14 @@ namespace Discord | |||||
public List<GuildPermission> ToList() | public List<GuildPermission> ToList() | ||||
{ | { | ||||
var perms = new List<GuildPermission>(); | var perms = new List<GuildPermission>(); | ||||
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; | return perms; | ||||
} | } | ||||
@@ -1,4 +1,5 @@ | |||||
using System.Collections.Generic; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
namespace Discord | namespace Discord | ||||
@@ -21,47 +22,47 @@ namespace Discord | |||||
public ulong DenyValue { get; } | public ulong DenyValue { get; } | ||||
/// <summary> If Allowed, a user may create invites. </summary> | /// <summary> If Allowed, a user may create invites. </summary> | ||||
public PermValue CreateInstantInvite => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.CreateInstantInvite); | |||||
public PermValue CreateInstantInvite => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.CREATE_INSTANT_INVITE); | |||||
/// <summary> If Allowed, a user may create, delete and modify this channel. </summary> | /// <summary> If Allowed, a user may create, delete and modify this channel. </summary> | ||||
public PermValue ManageChannel => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageChannel); | |||||
public PermValue ManageChannel => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_CHANNELS); | |||||
/// <summary> If Allowed, a user may add reactions. </summary> | /// <summary> If Allowed, a user may add reactions. </summary> | ||||
public PermValue AddReactions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.AddReactions); | |||||
public PermValue AddReactions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ADD_REACTIONS); | |||||
/// <summary> If Allowed, a user may join channels. </summary> | /// <summary> If Allowed, a user may join channels. </summary> | ||||
public PermValue ReadMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ReadMessages); | |||||
public PermValue ReadMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.READ_MESSAGES); | |||||
/// <summary> If Allowed, a user may send messages. </summary> | /// <summary> If Allowed, a user may send messages. </summary> | ||||
public PermValue SendMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SendMessages); | |||||
public PermValue SendMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SEND_MESSAGES); | |||||
/// <summary> If Allowed, a user may send text-to-speech messages. </summary> | /// <summary> If Allowed, a user may send text-to-speech messages. </summary> | ||||
public PermValue SendTTSMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SendTTSMessages); | |||||
public PermValue SendTTSMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SEND_TTS_MESSAGES); | |||||
/// <summary> If Allowed, a user may delete messages. </summary> | /// <summary> If Allowed, a user may delete messages. </summary> | ||||
public PermValue ManageMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageMessages); | |||||
public PermValue ManageMessages => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_MESSAGES); | |||||
/// <summary> If Allowed, Discord will auto-embed links sent by this user. </summary> | /// <summary> If Allowed, Discord will auto-embed links sent by this user. </summary> | ||||
public PermValue EmbedLinks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.EmbedLinks); | |||||
public PermValue EmbedLinks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.EMBED_LINKS); | |||||
/// <summary> If Allowed, a user may send files. </summary> | /// <summary> If Allowed, a user may send files. </summary> | ||||
public PermValue AttachFiles => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.AttachFiles); | |||||
public PermValue AttachFiles => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ATTACH_FILES); | |||||
/// <summary> If Allowed, a user may read previous messages. </summary> | /// <summary> If Allowed, a user may read previous messages. </summary> | ||||
public PermValue ReadMessageHistory => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ReadMessageHistory); | |||||
public PermValue ReadMessageHistory => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.READ_MESSAGE_HISTORY); | |||||
/// <summary> If Allowed, a user may mention @everyone. </summary> | /// <summary> If Allowed, a user may mention @everyone. </summary> | ||||
public PermValue MentionEveryone => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MentionEveryone); | |||||
public PermValue MentionEveryone => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MENTION_EVERYONE); | |||||
/// <summary> If Allowed, a user may use custom emoji from other guilds. </summary> | /// <summary> If Allowed, a user may use custom emoji from other guilds. </summary> | ||||
public PermValue UseExternalEmojis => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.UseExternalEmojis); | |||||
public PermValue UseExternalEmojis => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.USE_EXTERNAL_EMOJIS); | |||||
/// <summary> If Allowed, a user may connect to a voice channel. </summary> | /// <summary> If Allowed, a user may connect to a voice channel. </summary> | ||||
public PermValue Connect => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.Connect); | |||||
public PermValue Connect => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.CONNECT); | |||||
/// <summary> If Allowed, a user may speak in a voice channel. </summary> | /// <summary> If Allowed, a user may speak in a voice channel. </summary> | ||||
public PermValue Speak => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.Speak); | |||||
public PermValue Speak => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.SPEAK); | |||||
/// <summary> If Allowed, a user may mute users. </summary> | /// <summary> If Allowed, a user may mute users. </summary> | ||||
public PermValue MuteMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MuteMembers); | |||||
public PermValue MuteMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MUTE_MEMBERS); | |||||
/// <summary> If Allowed, a user may deafen users. </summary> | /// <summary> If Allowed, a user may deafen users. </summary> | ||||
public PermValue DeafenMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.DeafenMembers); | |||||
public PermValue DeafenMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.DEAFEN_MEMBERS); | |||||
/// <summary> If Allowed, a user may move other users between voice channels. </summary> | /// <summary> If Allowed, a user may move other users between voice channels. </summary> | ||||
public PermValue MoveMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MoveMembers); | |||||
public PermValue MoveMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MOVE_MEMBERS); | |||||
/// <summary> If Allowed, a user may use voice-activity-detection rather than push-to-talk. </summary> | /// <summary> If Allowed, a user may use voice-activity-detection rather than push-to-talk. </summary> | ||||
public PermValue UseVAD => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.UseVAD); | |||||
public PermValue UseVAD => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.USE_VAD); | |||||
/// <summary> If Allowed, a user may adjust permissions. This also implictly grants all other permissions. </summary> | /// <summary> If Allowed, a user may adjust permissions. This also implictly grants all other permissions. </summary> | ||||
public PermValue ManagePermissions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManagePermissions); | |||||
public PermValue ManagePermissions => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_ROLES); | |||||
/// <summary> If True, a user may edit the webhooks for this channel. </summary> | /// <summary> If True, a user may edit the webhooks for this channel. </summary> | ||||
public PermValue ManageWebhooks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageWebhooks); | |||||
public PermValue ManageWebhooks => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MANAGE_WEBHOOKS); | |||||
/// <summary> Creates a new OverwritePermissions with the provided allow and deny packed values. </summary> | /// <summary> Creates a new OverwritePermissions with the provided allow and deny packed values. </summary> | ||||
public OverwritePermissions(ulong allowValue, ulong denyValue) | 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? deafenMembers = null, PermValue? moveMembers = null, PermValue? useVoiceActivation = null, PermValue? managePermissions = null, | ||||
PermValue? manageWebhooks = 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; | AllowValue = allowValue; | ||||
DenyValue = denyValue; | DenyValue = denyValue; | ||||
@@ -128,22 +129,22 @@ namespace Discord | |||||
public List<ChannelPermission> ToAllowList() | public List<ChannelPermission> ToAllowList() | ||||
{ | { | ||||
var perms = new List<ChannelPermission>(); | var perms = new List<ChannelPermission>(); | ||||
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; | return perms; | ||||
} | } | ||||
public List<ChannelPermission> ToDenyList() | public List<ChannelPermission> ToDenyList() | ||||
{ | { | ||||
var perms = new List<ChannelPermission>(); | var perms = new List<ChannelPermission>(); | ||||
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; | return perms; | ||||
} | } | ||||
@@ -7,84 +7,84 @@ namespace Discord | |||||
public const int MaxBits = 53; | public const int MaxBits = 53; | ||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] | [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)] | [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)] | [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; | return PermValue.Allow; | ||||
else if (HasBit(deny, bit)) | |||||
else if (HasFlag(deny, flag)) | |||||
return PermValue.Deny; | return PermValue.Deny; | ||||
else | else | ||||
return PermValue.Inherit; | return PermValue.Inherit; | ||||
} | } | ||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] | [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)] | [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)] | [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)] | [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)] | [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)] | [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.HasValue) | ||||
{ | { | ||||
if (value == true) | if (value == true) | ||||
SetBit(ref rawValue, bit); | |||||
SetFlag(ref rawValue, flag); | |||||
else | else | ||||
UnsetBit(ref rawValue, bit); | |||||
UnsetFlag(ref rawValue, flag); | |||||
} | } | ||||
} | } | ||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] | [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)] | [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)] | [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) | if (value.HasValue) | ||||
{ | { | ||||
switch (value) | switch (value) | ||||
{ | { | ||||
case PermValue.Allow: | case PermValue.Allow: | ||||
SetBit(ref allow, bit); | |||||
UnsetBit(ref deny, bit); | |||||
SetFlag(ref allow, flag); | |||||
UnsetFlag(ref deny, flag); | |||||
break; | break; | ||||
case PermValue.Deny: | case PermValue.Deny: | ||||
UnsetBit(ref allow, bit); | |||||
SetBit(ref deny, bit); | |||||
UnsetFlag(ref allow, flag); | |||||
SetFlag(ref deny, flag); | |||||
break; | break; | ||||
default: | default: | ||||
UnsetBit(ref allow, bit); | |||||
UnsetBit(ref deny, bit); | |||||
UnsetFlag(ref allow, flag); | |||||
UnsetFlag(ref deny, flag); | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] | [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)] | [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)] | [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) | public static ChannelPermissions ToChannelPerms(IGuildChannel channel, ulong guildPermissions) | ||||
=> new ChannelPermissions(guildPermissions & ChannelPermissions.All(channel).RawValue); | => new ChannelPermissions(guildPermissions & ChannelPermissions.All(channel).RawValue); | ||||
@@ -100,7 +100,7 @@ namespace Discord | |||||
{ | { | ||||
foreach (var roleId in user.RoleIds) | foreach (var roleId in user.RoleIds) | ||||
resolvedPermissions |= guild.GetRole(roleId)?.Permissions.RawValue ?? 0; | 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 | resolvedPermissions = GuildPermissions.All.RawValue; //Administrators always have all permissions | ||||
} | } | ||||
return resolvedPermissions; | return resolvedPermissions; | ||||
@@ -115,7 +115,7 @@ namespace Discord | |||||
ulong resolvedPermissions = 0; | ulong resolvedPermissions = 0; | ||||
ulong mask = ChannelPermissions.All(channel).RawValue; | 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 | resolvedPermissions = mask; //Owners and administrators always have all permissions | ||||
else | else | ||||
{ | { | ||||
@@ -152,18 +152,18 @@ namespace Discord | |||||
if (channel is ITextChannel textChannel) | 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 | //No read permission on a text channel removes all other permissions | ||||
resolvedPermissions = 0; | 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 | //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) | resolvedPermissions &= mask; //Ensure we didnt get any permissions this channel doesnt support (from guildPerms, for example) | ||||
@@ -22,7 +22,7 @@ namespace Discord.WebSocket | |||||
public override IReadOnlyCollection<SocketGuildUser> Users | public override IReadOnlyCollection<SocketGuildUser> Users | ||||
=> Guild.Users.Where(x => Permissions.GetValue( | => Guild.Users.Where(x => Permissions.GetValue( | ||||
Permissions.ResolveChannel(Guild, x, this, Permissions.ResolveGuild(Guild, x)), | Permissions.ResolveChannel(Guild, x, this, Permissions.ResolveGuild(Guild, x)), | ||||
ChannelPermission.ReadMessages)).ToImmutableArray(); | |||||
ChannelPermission.READ_MESSAGES)).ToImmutableArray(); | |||||
internal SocketTextChannel(DiscordSocketClient discord, ulong id, SocketGuild guild) | internal SocketTextChannel(DiscordSocketClient discord, ulong id, SocketGuild guild) | ||||
: base(discord, id, guild) | : base(discord, id, guild) | ||||
@@ -103,7 +103,7 @@ namespace Discord.WebSocket | |||||
{ | { | ||||
var guildPerms = Permissions.ResolveGuild(Guild, user); | var guildPerms = Permissions.ResolveGuild(Guild, user); | ||||
var channelPerms = Permissions.ResolveChannel(Guild, user, this, guildPerms); | var channelPerms = Permissions.ResolveChannel(Guild, user, this, guildPerms); | ||||
if (Permissions.GetValue(channelPerms, ChannelPermission.ReadMessages)) | |||||
if (Permissions.GetValue(channelPerms, ChannelPermission.READ_MESSAGES)) | |||||
return user; | return user; | ||||
} | } | ||||
return null; | return null; | ||||