diff --git a/src/Discord.Net.Rpc/Entities/Channels/RpcCategoryChannel.cs b/experiment/Discord.Net.Rpc/Entities/Channels/RpcCategoryChannel.cs similarity index 100% rename from src/Discord.Net.Rpc/Entities/Channels/RpcCategoryChannel.cs rename to experiment/Discord.Net.Rpc/Entities/Channels/RpcCategoryChannel.cs diff --git a/src/Discord.Net.Core/DiscordConfig.cs b/src/Discord.Net.Core/DiscordConfig.cs index 489219161..c6ad79915 100644 --- a/src/Discord.Net.Core/DiscordConfig.cs +++ b/src/Discord.Net.Core/DiscordConfig.cs @@ -17,6 +17,7 @@ namespace Discord /// . /// public const int APIVersion = 6; + public const int VoiceAPIVersion = 3; /// /// Gets the Discord.Net version, including the build number. /// diff --git a/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs b/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs index 57c42b316..97735c42c 100644 --- a/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs @@ -138,7 +138,7 @@ namespace Discord PermValue createInstantInvite = PermValue.Inherit, PermValue manageChannel = PermValue.Inherit, PermValue addReactions = PermValue.Inherit, - PermValue readMessages = PermValue.Inherit, + PermValue viewChannel = PermValue.Inherit, PermValue sendMessages = PermValue.Inherit, PermValue sendTTSMessages = PermValue.Inherit, PermValue manageMessages = PermValue.Inherit, @@ -155,7 +155,7 @@ namespace Discord PermValue useVoiceActivation = PermValue.Inherit, PermValue manageRoles = PermValue.Inherit, PermValue manageWebhooks = PermValue.Inherit) - : this(0, 0, createInstantInvite, manageChannel, addReactions, readMessages, sendMessages, sendTTSMessages, manageMessages, + : this(0, 0, createInstantInvite, manageChannel, addReactions, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, manageRoles, manageWebhooks) { } @@ -167,7 +167,7 @@ namespace Discord PermValue? createInstantInvite = null, PermValue? manageChannel = null, PermValue? addReactions = null, - PermValue? readMessages = null, + PermValue? viewChannel = null, PermValue? sendMessages = null, PermValue? sendTTSMessages = null, PermValue? manageMessages = null, @@ -184,7 +184,7 @@ namespace Discord PermValue? useVoiceActivation = null, PermValue? manageRoles = null, PermValue? manageWebhooks = null) - => new OverwritePermissions(AllowValue, DenyValue, createInstantInvite, manageChannel, addReactions, readMessages, sendMessages, sendTTSMessages, manageMessages, + => new OverwritePermissions(AllowValue, DenyValue, createInstantInvite, manageChannel, addReactions, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, manageRoles, manageWebhooks); diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs index b8089824d..0362fa600 100644 --- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs +++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs @@ -358,10 +358,5 @@ namespace Discord.Rest author = RestUser.Create(client, guild, model, webhookId); return author; } - - public static bool IsNsfw(IChannel channel) - => IsNsfw(channel.Name); - public static bool IsNsfw(string channelName) => - channelName == "nsfw" || channelName.StartsWith("nsfw-"); } } diff --git a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs index 5321cc36c..1cef7ab4c 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs @@ -23,7 +23,7 @@ namespace Discord.Rest private bool _nsfw; /// - public bool IsNsfw => _nsfw || ChannelHelper.IsNsfw(this); + public bool IsNsfw => _nsfw; internal RestTextChannel(BaseDiscordClient discord, IGuild guild, ulong id) : base(discord, guild, id) @@ -135,7 +135,7 @@ namespace Discord.Rest => ChannelHelper.GetWebhookAsync(this, Discord, id, options); public Task> GetWebhooksAsync(RequestOptions options = null) => ChannelHelper.GetWebhooksAsync(this, Discord, options); - + public Task GetCategoryAsync(RequestOptions options = null) => ChannelHelper.GetCategoryAsync(this, Discord, options); @@ -169,7 +169,7 @@ namespace Discord.Rest else return AsyncEnumerable.Empty>(); } - + /// IAsyncEnumerable> IMessageChannel.GetMessagesAsync(ulong fromMessageId, Direction dir, int limit, CacheMode mode, RequestOptions options) { diff --git a/src/Discord.Net.WebSocket/API/Voice/HelloEvent.cs b/src/Discord.Net.WebSocket/API/Voice/HelloEvent.cs new file mode 100644 index 000000000..8fdb0808f --- /dev/null +++ b/src/Discord.Net.WebSocket/API/Voice/HelloEvent.cs @@ -0,0 +1,10 @@ +using Newtonsoft.Json; + +namespace Discord.API.Voice +{ + internal class HelloEvent + { + [JsonProperty("heartbeat_interval")] + public int HeartbeatInterval { get; set; } + } +} diff --git a/src/Discord.Net.WebSocket/API/Voice/ReadyEvent.cs b/src/Discord.Net.WebSocket/API/Voice/ReadyEvent.cs index 2a134ced1..7188cd8f7 100644 --- a/src/Discord.Net.WebSocket/API/Voice/ReadyEvent.cs +++ b/src/Discord.Net.WebSocket/API/Voice/ReadyEvent.cs @@ -1,5 +1,6 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; +using System; namespace Discord.API.Voice { @@ -14,6 +15,7 @@ namespace Discord.API.Voice [JsonProperty("modes")] public string[] Modes { get; set; } [JsonProperty("heartbeat_interval")] + [Obsolete("This field is errorneous and should not be used", true)] public int HeartbeatInterval { get; set; } } } diff --git a/src/Discord.Net.WebSocket/API/Voice/VoiceOpCode.cs b/src/Discord.Net.WebSocket/API/Voice/VoiceOpCode.cs index ae11a4c8f..67afe6173 100644 --- a/src/Discord.Net.WebSocket/API/Voice/VoiceOpCode.cs +++ b/src/Discord.Net.WebSocket/API/Voice/VoiceOpCode.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 namespace Discord.API.Voice { internal enum VoiceOpCode : byte @@ -11,11 +11,19 @@ namespace Discord.API.Voice Ready = 2, /// C→S - Used to keep the connection alive and measure latency. Heartbeat = 3, - /// C←S - Used to reply to a client's heartbeat. - HeartbeatAck = 3, /// C←S - Used to provide an encryption key to the client. SessionDescription = 4, /// C↔S - Used to inform that a certain user is speaking. - Speaking = 5 + Speaking = 5, + /// C←S - Used to reply to a client's heartbeat. + HeartbeatAck = 6, + /// C→S - Used to resume a connection. + Resume = 7, + /// C←S - Used to inform the client the heartbeat interval. + Hello = 8, + /// C←S - Used to acknowledge a resumed connection. + Resumed = 9, + /// C←S - Used to notify that a client has disconnected. + ClientDisconnect = 13, } } diff --git a/src/Discord.Net.WebSocket/Audio/AudioClient.cs b/src/Discord.Net.WebSocket/Audio/AudioClient.cs index c3960fa67..e6cf20312 100644 --- a/src/Discord.Net.WebSocket/Audio/AudioClient.cs +++ b/src/Discord.Net.WebSocket/Audio/AudioClient.cs @@ -107,7 +107,7 @@ namespace Discord.Audio private async Task OnConnectingAsync() { await _audioLogger.DebugAsync("Connecting ApiClient").ConfigureAwait(false); - await ApiClient.ConnectAsync("wss://" + _url).ConfigureAwait(false); + await ApiClient.ConnectAsync("wss://" + _url + "?v=" + DiscordConfig.VoiceAPIVersion).ConfigureAwait(false); await _audioLogger.DebugAsync("Listening on port " + ApiClient.UdpPort).ConfigureAwait(false); await _audioLogger.DebugAsync("Sending Identity").ConfigureAwait(false); await ApiClient.SendIdentityAsync(_userId, _sessionId, _token).ConfigureAwait(false); @@ -216,6 +216,14 @@ namespace Discord.Audio { switch (opCode) { + case VoiceOpCode.Hello: + { + await _audioLogger.DebugAsync("Received Hello").ConfigureAwait(false); + var data = (payload as JToken).ToObject(_serializer); + + _heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _connection.CancelToken); + } + break; case VoiceOpCode.Ready: { await _audioLogger.DebugAsync("Received Ready").ConfigureAwait(false); @@ -225,8 +233,6 @@ namespace Discord.Audio if (!data.Modes.Contains(DiscordVoiceAPIClient.Mode)) throw new InvalidOperationException($"Discord does not support {DiscordVoiceAPIClient.Mode}"); - - _heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _connection.CancelToken); ApiClient.SetUdpEndpoint(data.Ip, data.Port); await ApiClient.SendDiscoveryAsync(_ssrc).ConfigureAwait(false); diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 66ce6e7e2..d147f365b 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1442,7 +1442,9 @@ namespace Discord.WebSocket after = SocketVoiceState.Create(null, data); } - user = guild.GetUser(data.UserId) ?? guild.AddOrUpdateUser(data.Member.Value); //per g250k, this is always sent + // per g250k, this should always be sent, but apparently not always + user = guild.GetUser(data.UserId) + ?? (data.Member.IsSpecified ? guild.AddOrUpdateUser(data.Member.Value) : null); if (user == null) { await UnknownGuildUserAsync(type, data.UserId, guild.Id).ConfigureAwait(false); diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs index c34cee754..5ff5324b6 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs @@ -26,7 +26,7 @@ namespace Discord.WebSocket private bool _nsfw; /// - public bool IsNsfw => _nsfw || ChannelHelper.IsNsfw(this); + public bool IsNsfw => _nsfw; /// public string Mention => MentionUtils.MentionChannel(Id); diff --git a/test/Discord.Net.Tests/Tests.ChannelPermissions.cs b/test/Discord.Net.Tests/Tests.ChannelPermissions.cs index 51834e30d..dd87c2e24 100644 --- a/test/Discord.Net.Tests/Tests.ChannelPermissions.cs +++ b/test/Discord.Net.Tests/Tests.ChannelPermissions.cs @@ -68,6 +68,7 @@ namespace Discord ulong voiceChannel = (ulong)( ChannelPermission.CreateInstantInvite | ChannelPermission.ManageChannels + | ChannelPermission.ViewChannel | ChannelPermission.Connect | ChannelPermission.Speak | ChannelPermission.MuteMembers @@ -82,7 +83,7 @@ namespace Discord ulong dmChannel = (ulong)( ChannelPermission.ViewChannel | ChannelPermission.SendMessages - | ChannelPermission.EmbedLinks + | ChannelPermission.EmbedLinks | ChannelPermission.AttachFiles | ChannelPermission.ReadMessageHistory | ChannelPermission.UseExternalEmojis @@ -118,7 +119,7 @@ namespace Discord // ensure that when modified it works perm = perm.Modify(createInstantInvite: true); Assert.True(perm.CreateInstantInvite); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.CreateInstantInvite); + Assert.Equal((ulong)ChannelPermission.CreateInstantInvite, perm.RawValue); // set false again, move on to next permission perm = perm.Modify(createInstantInvite: false); @@ -130,7 +131,7 @@ namespace Discord perm = perm.Modify(manageChannel: true); Assert.True(perm.ManageChannel); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.ManageChannels); + Assert.Equal((ulong)ChannelPermission.ManageChannels, perm.RawValue); perm = perm.Modify(manageChannel: false); Assert.False(perm.ManageChannel); @@ -141,7 +142,7 @@ namespace Discord perm = perm.Modify(addReactions: true); Assert.True(perm.AddReactions); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.AddReactions); + Assert.Equal((ulong)ChannelPermission.AddReactions, perm.RawValue); perm = perm.Modify(addReactions: false); Assert.False(perm.AddReactions); @@ -152,7 +153,7 @@ namespace Discord perm = perm.Modify(viewChannel: true); Assert.True(perm.ViewChannel); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.ViewChannel); + Assert.Equal((ulong)ChannelPermission.ViewChannel, perm.RawValue); perm = perm.Modify(viewChannel: false); Assert.False(perm.ViewChannel); @@ -163,7 +164,7 @@ namespace Discord perm = perm.Modify(sendMessages: true); Assert.True(perm.SendMessages); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.SendMessages); + Assert.Equal((ulong)ChannelPermission.SendMessages, perm.RawValue); perm = perm.Modify(sendMessages: false); Assert.False(perm.SendMessages); @@ -174,7 +175,7 @@ namespace Discord perm = perm.Modify(sendTTSMessages: true); Assert.True(perm.SendTTSMessages); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.SendTTSMessages); + Assert.Equal((ulong)ChannelPermission.SendTTSMessages, perm.RawValue); perm = perm.Modify(sendTTSMessages: false); Assert.False(perm.SendTTSMessages); @@ -185,7 +186,7 @@ namespace Discord perm = perm.Modify(manageMessages: true); Assert.True(perm.ManageMessages); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.ManageMessages); + Assert.Equal((ulong)ChannelPermission.ManageMessages, perm.RawValue); perm = perm.Modify(manageMessages: false); Assert.False(perm.ManageMessages); @@ -196,7 +197,7 @@ namespace Discord perm = perm.Modify(embedLinks: true); Assert.True(perm.EmbedLinks); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.EmbedLinks); + Assert.Equal((ulong)ChannelPermission.EmbedLinks, perm.RawValue); perm = perm.Modify(embedLinks: false); Assert.False(perm.EmbedLinks); @@ -207,7 +208,7 @@ namespace Discord perm = perm.Modify(attachFiles: true); Assert.True(perm.AttachFiles); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.AttachFiles); + Assert.Equal((ulong)ChannelPermission.AttachFiles, perm.RawValue); perm = perm.Modify(attachFiles: false); Assert.False(perm.AttachFiles); @@ -218,7 +219,7 @@ namespace Discord perm = perm.Modify(readMessageHistory: true); Assert.True(perm.ReadMessageHistory); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.ReadMessageHistory); + Assert.Equal((ulong)ChannelPermission.ReadMessageHistory, perm.RawValue); perm = perm.Modify(readMessageHistory: false); Assert.False(perm.ReadMessageHistory); @@ -229,7 +230,7 @@ namespace Discord perm = perm.Modify(mentionEveryone: true); Assert.True(perm.MentionEveryone); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.MentionEveryone); + Assert.Equal((ulong)ChannelPermission.MentionEveryone, perm.RawValue); perm = perm.Modify(mentionEveryone: false); Assert.False(perm.MentionEveryone); @@ -240,7 +241,7 @@ namespace Discord perm = perm.Modify(useExternalEmojis: true); Assert.True(perm.UseExternalEmojis); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.UseExternalEmojis); + Assert.Equal((ulong)ChannelPermission.UseExternalEmojis, perm.RawValue); perm = perm.Modify(useExternalEmojis: false); Assert.False(perm.UseExternalEmojis); @@ -251,18 +252,18 @@ namespace Discord perm = perm.Modify(connect: true); Assert.True(perm.Connect); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.Connect); + Assert.Equal((ulong)ChannelPermission.Connect, perm.RawValue); perm = perm.Modify(connect: false); Assert.False(perm.Connect); Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); - + // individual permission test Assert.False(perm.Speak); perm = perm.Modify(speak: true); Assert.True(perm.Speak); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.Speak); + Assert.Equal((ulong)ChannelPermission.Speak, perm.RawValue); perm = perm.Modify(speak: false); Assert.False(perm.Speak); @@ -273,7 +274,7 @@ namespace Discord perm = perm.Modify(muteMembers: true); Assert.True(perm.MuteMembers); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.MuteMembers); + Assert.Equal((ulong)ChannelPermission.MuteMembers, perm.RawValue); perm = perm.Modify(muteMembers: false); Assert.False(perm.MuteMembers); @@ -284,7 +285,7 @@ namespace Discord perm = perm.Modify(deafenMembers: true); Assert.True(perm.DeafenMembers); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.DeafenMembers); + Assert.Equal((ulong)ChannelPermission.DeafenMembers, perm.RawValue); perm = perm.Modify(deafenMembers: false); Assert.False(perm.DeafenMembers); @@ -295,7 +296,7 @@ namespace Discord perm = perm.Modify(moveMembers: true); Assert.True(perm.MoveMembers); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.MoveMembers); + Assert.Equal((ulong)ChannelPermission.MoveMembers, perm.RawValue); perm = perm.Modify(moveMembers: false); Assert.False(perm.MoveMembers); @@ -306,7 +307,7 @@ namespace Discord perm = perm.Modify(useVoiceActivation: true); Assert.True(perm.UseVAD); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.UseVAD); + Assert.Equal((ulong)ChannelPermission.UseVAD, perm.RawValue); perm = perm.Modify(useVoiceActivation: false); Assert.False(perm.UseVAD); @@ -317,7 +318,7 @@ namespace Discord perm = perm.Modify(manageRoles: true); Assert.True(perm.ManageRoles); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.ManageRoles); + Assert.Equal((ulong)ChannelPermission.ManageRoles, perm.RawValue); perm = perm.Modify(manageRoles: false); Assert.False(perm.ManageRoles); @@ -328,7 +329,7 @@ namespace Discord perm = perm.Modify(manageWebhooks: true); Assert.True(perm.ManageWebhooks); - Assert.Equal(perm.RawValue, (ulong)ChannelPermission.ManageWebhooks); + Assert.Equal((ulong)ChannelPermission.ManageWebhooks, perm.RawValue); perm = perm.Modify(manageWebhooks: false); Assert.False(perm.ManageWebhooks); diff --git a/test/Discord.Net.Tests/Tests.Channels.cs b/test/Discord.Net.Tests/Tests.Channels.cs index 2c189c03f..46e28b9da 100644 --- a/test/Discord.Net.Tests/Tests.Channels.cs +++ b/test/Discord.Net.Tests/Tests.Channels.cs @@ -169,7 +169,7 @@ namespace Discord private async Task CheckChannelCategories(RestCategoryChannel[] categories, RestGuildChannel[] allChannels) { // 2 categories - Assert.Equal(categories.Length, 2); + Assert.Equal(2, categories.Length); var cat1 = categories.Where(x => x.Name == "cat1").FirstOrDefault(); var cat2 = categories.Where(x => x.Name == "cat2").FirstOrDefault(); @@ -202,7 +202,7 @@ namespace Discord Assert.NotNull(voice1); Assert.NotNull(voice3); - + Assert.Equal(voice1.CategoryId, cat2.Id); var voice1Cat = await voice1.GetCategoryAsync(); Assert.Equal(voice1Cat.Id, cat2.Id); diff --git a/test/Discord.Net.Tests/Tests.GuildPermissions.cs b/test/Discord.Net.Tests/Tests.GuildPermissions.cs index defaf4d02..bbd6621b5 100644 --- a/test/Discord.Net.Tests/Tests.GuildPermissions.cs +++ b/test/Discord.Net.Tests/Tests.GuildPermissions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Xunit; @@ -38,9 +39,13 @@ namespace Discord copy = GuildPermissions.Webhook.Modify(); Assert.Equal(GuildPermissions.Webhook.RawValue, copy.RawValue); + // Get all distinct values (ReadMessages = ViewChannel) + var enumValues = (Enum.GetValues(typeof(GuildPermission)) as GuildPermission[]) + .Distinct() + .ToArray(); // test GuildPermissions.All ulong sumOfAllGuildPermissions = 0; - foreach(var v in Enum.GetValues(typeof(GuildPermission))) + foreach(var v in enumValues) { sumOfAllGuildPermissions |= (ulong)v; } @@ -49,9 +54,9 @@ namespace Discord Assert.Equal(sumOfAllGuildPermissions, GuildPermissions.All.RawValue); Assert.Equal((ulong)0, GuildPermissions.None.RawValue); - // assert that GuildPermissions.All contains the same number of permissions as the + // assert that GuildPermissions.All contains the same number of permissions as the // GuildPermissions enum - Assert.Equal(Enum.GetValues(typeof(GuildPermission)).Length, GuildPermissions.All.ToList().Count); + Assert.Equal(enumValues.Length, GuildPermissions.All.ToList().Count); // assert that webhook has the same raw value ulong webHookPermissions = (ulong)( @@ -76,7 +81,7 @@ namespace Discord // ensure that when we modify it the parameter works perm = perm.Modify(createInstantInvite: true); Assert.True(perm.CreateInstantInvite); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.CreateInstantInvite); + Assert.Equal((ulong)GuildPermission.CreateInstantInvite, perm.RawValue); // set it false again, then move on to the next permission perm = perm.Modify(createInstantInvite: false); @@ -86,7 +91,7 @@ namespace Discord // individual permission test perm = perm.Modify(kickMembers: true); Assert.True(perm.KickMembers); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.KickMembers); + Assert.Equal((ulong)GuildPermission.KickMembers, perm.RawValue); perm = perm.Modify(kickMembers: false); Assert.False(perm.KickMembers); @@ -95,7 +100,7 @@ namespace Discord // individual permission test perm = perm.Modify(banMembers: true); Assert.True(perm.BanMembers); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.BanMembers); + Assert.Equal((ulong)GuildPermission.BanMembers, perm.RawValue); perm = perm.Modify(banMembers: false); Assert.False(perm.BanMembers); @@ -104,7 +109,7 @@ namespace Discord // individual permission test perm = perm.Modify(administrator: true); Assert.True(perm.Administrator); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.Administrator); + Assert.Equal((ulong)GuildPermission.Administrator, perm.RawValue); perm = perm.Modify(administrator: false); Assert.False(perm.Administrator); @@ -113,7 +118,7 @@ namespace Discord // individual permission test perm = perm.Modify(manageChannels: true); Assert.True(perm.ManageChannels); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageChannels); + Assert.Equal((ulong)GuildPermission.ManageChannels, perm.RawValue); perm = perm.Modify(manageChannels: false); Assert.False(perm.ManageChannels); @@ -122,7 +127,7 @@ namespace Discord // individual permission test perm = perm.Modify(manageGuild: true); Assert.True(perm.ManageGuild); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageGuild); + Assert.Equal((ulong)GuildPermission.ManageGuild, perm.RawValue); perm = perm.Modify(manageGuild: false); Assert.False(perm.ManageGuild); @@ -132,7 +137,7 @@ namespace Discord // individual permission test perm = perm.Modify(addReactions: true); Assert.True(perm.AddReactions); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.AddReactions); + Assert.Equal((ulong)GuildPermission.AddReactions, perm.RawValue); perm = perm.Modify(addReactions: false); Assert.False(perm.AddReactions); @@ -142,7 +147,7 @@ namespace Discord // individual permission test perm = perm.Modify(viewAuditLog: true); Assert.True(perm.ViewAuditLog); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ViewAuditLog); + Assert.Equal((ulong)GuildPermission.ViewAuditLog, perm.RawValue); perm = perm.Modify(viewAuditLog: false); Assert.False(perm.ViewAuditLog); @@ -152,7 +157,7 @@ namespace Discord // individual permission test perm = perm.Modify(viewChannel: true); Assert.True(perm.ViewChannel); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ViewChannel); + Assert.Equal((ulong)GuildPermission.ViewChannel, perm.RawValue); perm = perm.Modify(viewChannel: false); Assert.False(perm.ViewChannel); @@ -162,7 +167,7 @@ namespace Discord // individual permission test perm = perm.Modify(sendMessages: true); Assert.True(perm.SendMessages); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.SendMessages); + Assert.Equal((ulong)GuildPermission.SendMessages, perm.RawValue); perm = perm.Modify(sendMessages: false); Assert.False(perm.SendMessages); @@ -171,7 +176,7 @@ namespace Discord // individual permission test perm = perm.Modify(embedLinks: true); Assert.True(perm.EmbedLinks); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.EmbedLinks); + Assert.Equal((ulong)GuildPermission.EmbedLinks, perm.RawValue); perm = perm.Modify(embedLinks: false); Assert.False(perm.EmbedLinks); @@ -180,7 +185,7 @@ namespace Discord // individual permission test perm = perm.Modify(attachFiles: true); Assert.True(perm.AttachFiles); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.AttachFiles); + Assert.Equal((ulong)GuildPermission.AttachFiles, perm.RawValue); perm = perm.Modify(attachFiles: false); Assert.False(perm.AttachFiles); @@ -189,7 +194,7 @@ namespace Discord // individual permission test perm = perm.Modify(readMessageHistory: true); Assert.True(perm.ReadMessageHistory); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ReadMessageHistory); + Assert.Equal((ulong)GuildPermission.ReadMessageHistory, perm.RawValue); perm = perm.Modify(readMessageHistory: false); Assert.False(perm.ReadMessageHistory); @@ -198,7 +203,7 @@ namespace Discord // individual permission test perm = perm.Modify(mentionEveryone: true); Assert.True(perm.MentionEveryone); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.MentionEveryone); + Assert.Equal((ulong)GuildPermission.MentionEveryone, perm.RawValue); perm = perm.Modify(mentionEveryone: false); Assert.False(perm.MentionEveryone); @@ -207,7 +212,7 @@ namespace Discord // individual permission test perm = perm.Modify(useExternalEmojis: true); Assert.True(perm.UseExternalEmojis); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.UseExternalEmojis); + Assert.Equal((ulong)GuildPermission.UseExternalEmojis, perm.RawValue); perm = perm.Modify(useExternalEmojis: false); Assert.False(perm.UseExternalEmojis); @@ -216,7 +221,7 @@ namespace Discord // individual permission test perm = perm.Modify(connect: true); Assert.True(perm.Connect); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.Connect); + Assert.Equal((ulong)GuildPermission.Connect, perm.RawValue); perm = perm.Modify(connect: false); Assert.False(perm.Connect); @@ -225,7 +230,7 @@ namespace Discord // individual permission test perm = perm.Modify(speak: true); Assert.True(perm.Speak); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.Speak); + Assert.Equal((ulong)GuildPermission.Speak, perm.RawValue); perm = perm.Modify(speak: false); Assert.False(perm.Speak); @@ -234,7 +239,7 @@ namespace Discord // individual permission test perm = perm.Modify(muteMembers: true); Assert.True(perm.MuteMembers); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.MuteMembers); + Assert.Equal((ulong)GuildPermission.MuteMembers, perm.RawValue); perm = perm.Modify(muteMembers: false); Assert.False(perm.MuteMembers); @@ -243,7 +248,7 @@ namespace Discord // individual permission test perm = perm.Modify(deafenMembers: true); Assert.True(perm.DeafenMembers); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.DeafenMembers); + Assert.Equal((ulong)GuildPermission.DeafenMembers, perm.RawValue); perm = perm.Modify(deafenMembers: false); Assert.False(perm.DeafenMembers); @@ -252,7 +257,7 @@ namespace Discord // individual permission test perm = perm.Modify(moveMembers: true); Assert.True(perm.MoveMembers); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.MoveMembers); + Assert.Equal((ulong)GuildPermission.MoveMembers, perm.RawValue); perm = perm.Modify(moveMembers: false); Assert.False(perm.MoveMembers); @@ -261,7 +266,7 @@ namespace Discord // individual permission test perm = perm.Modify(useVoiceActivation: true); Assert.True(perm.UseVAD); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.UseVAD); + Assert.Equal((ulong)GuildPermission.UseVAD, perm.RawValue); perm = perm.Modify(useVoiceActivation: false); Assert.False(perm.UseVAD); @@ -270,7 +275,7 @@ namespace Discord // individual permission test perm = perm.Modify(changeNickname: true); Assert.True(perm.ChangeNickname); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ChangeNickname); + Assert.Equal((ulong)GuildPermission.ChangeNickname, perm.RawValue); perm = perm.Modify(changeNickname: false); Assert.False(perm.ChangeNickname); @@ -279,7 +284,7 @@ namespace Discord // individual permission test perm = perm.Modify(manageNicknames: true); Assert.True(perm.ManageNicknames); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageNicknames); + Assert.Equal((ulong)GuildPermission.ManageNicknames, perm.RawValue); perm = perm.Modify(manageNicknames: false); Assert.False(perm.ManageNicknames); @@ -288,7 +293,7 @@ namespace Discord // individual permission test perm = perm.Modify(manageRoles: true); Assert.True(perm.ManageRoles); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageRoles); + Assert.Equal((ulong)GuildPermission.ManageRoles, perm.RawValue); perm = perm.Modify(manageRoles: false); Assert.False(perm.ManageRoles); @@ -297,7 +302,7 @@ namespace Discord // individual permission test perm = perm.Modify(manageWebhooks: true); Assert.True(perm.ManageWebhooks); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageWebhooks); + Assert.Equal((ulong)GuildPermission.ManageWebhooks, perm.RawValue); perm = perm.Modify(manageWebhooks: false); Assert.False(perm.ManageWebhooks); @@ -306,7 +311,7 @@ namespace Discord // individual permission test perm = perm.Modify(manageEmojis: true); Assert.True(perm.ManageEmojis); - Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageEmojis); + Assert.Equal((ulong)GuildPermission.ManageEmojis, perm.RawValue); perm = perm.Modify(manageEmojis: false); Assert.False(perm.ManageEmojis); diff --git a/test/Discord.Net.Tests/Tests.Permissions.cs b/test/Discord.Net.Tests/Tests.Permissions.cs index 5a7b5a16b..2f72f272d 100644 --- a/test/Discord.Net.Tests/Tests.Permissions.cs +++ b/test/Discord.Net.Tests/Tests.Permissions.cs @@ -77,7 +77,7 @@ namespace Discord /// /// Tests for the class. - /// + /// /// Tests that text channel permissions get the right value /// from the Has method. /// @@ -114,7 +114,7 @@ namespace Discord /// /// Tests for the class. - /// + /// /// Tests that no channel permissions get the right value /// from the Has method. /// @@ -151,7 +151,7 @@ namespace Discord /// /// Tests for the class. - /// + /// /// Tests that the dm channel permissions get the right value /// from the Has method. /// @@ -188,7 +188,7 @@ namespace Discord /// /// Tests for the class. - /// + /// /// Tests that the group channel permissions get the right value /// from the Has method. /// @@ -225,7 +225,7 @@ namespace Discord /// /// Tests for the class. - /// + /// /// Tests that the voice channel permissions get the right value /// from the Has method. /// @@ -239,7 +239,7 @@ namespace Discord TestHelper(value, ChannelPermission.CreateInstantInvite, true); TestHelper(value, ChannelPermission.ManageChannels, true); TestHelper(value, ChannelPermission.AddReactions, false); - TestHelper(value, ChannelPermission.ViewChannel, false); + TestHelper(value, ChannelPermission.ViewChannel, true); TestHelper(value, ChannelPermission.SendMessages, false); TestHelper(value, ChannelPermission.SendTTSMessages, false); TestHelper(value, ChannelPermission.ManageMessages, false); @@ -262,8 +262,8 @@ namespace Discord /// /// Tests for the class. - /// - /// Test that that the Has method of + /// + /// Test that that the Has method of /// returns the correct value when no permissions are set. /// /// @@ -305,8 +305,8 @@ namespace Discord /// /// Tests for the class. - /// - /// Test that that the Has method of + /// + /// Test that that the Has method of /// returns the correct value when all permissions are set. /// /// @@ -349,8 +349,8 @@ namespace Discord /// /// Tests for the class. - /// - /// Test that that the Has method of + /// + /// Test that that the Has method of /// returns the correct value when webhook permissions are set. /// /// @@ -659,7 +659,7 @@ namespace Discord TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Allow); TestHelper(value, ChannelPermission.ManageChannels, PermValue.Allow); TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); - TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Allow); TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); @@ -682,7 +682,7 @@ namespace Discord TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Deny); TestHelper(value, ChannelPermission.ManageChannels, PermValue.Deny); TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); - TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Deny); TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); @@ -709,6 +709,7 @@ namespace Discord /// of the OverwritePermissions. /// /// + [Fact] public Task TestOverwritePermissionModifyNoParam() { // test for all Text allowed, none denied