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