| @@ -17,6 +17,7 @@ namespace Discord | |||
| /// .</para> | |||
| /// </returns> | |||
| public const int APIVersion = 6; | |||
| public const int VoiceAPIVersion = 3; | |||
| /// <summary> | |||
| /// Gets the Discord.Net version, including the build number. | |||
| /// </summary> | |||
| @@ -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); | |||
| @@ -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-"); | |||
| } | |||
| } | |||
| @@ -23,7 +23,7 @@ namespace Discord.Rest | |||
| private bool _nsfw; | |||
| /// <inheritdoc /> | |||
| 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<IReadOnlyCollection<RestWebhook>> GetWebhooksAsync(RequestOptions options = null) | |||
| => ChannelHelper.GetWebhooksAsync(this, Discord, options); | |||
| public Task<ICategoryChannel> GetCategoryAsync(RequestOptions options = null) | |||
| => ChannelHelper.GetCategoryAsync(this, Discord, options); | |||
| @@ -169,7 +169,7 @@ namespace Discord.Rest | |||
| else | |||
| return AsyncEnumerable.Empty<IReadOnlyCollection<IMessage>>(); | |||
| } | |||
| /// <inheritdoc /> | |||
| IAsyncEnumerable<IReadOnlyCollection<IMessage>> IMessageChannel.GetMessagesAsync(ulong fromMessageId, Direction dir, int limit, CacheMode mode, RequestOptions options) | |||
| { | |||
| @@ -0,0 +1,10 @@ | |||
| using Newtonsoft.Json; | |||
| namespace Discord.API.Voice | |||
| { | |||
| internal class HelloEvent | |||
| { | |||
| [JsonProperty("heartbeat_interval")] | |||
| public int HeartbeatInterval { get; set; } | |||
| } | |||
| } | |||
| @@ -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; } | |||
| } | |||
| } | |||
| @@ -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, | |||
| /// <summary> C→S - Used to keep the connection alive and measure latency. </summary> | |||
| Heartbeat = 3, | |||
| /// <summary> C←S - Used to reply to a client's heartbeat. </summary> | |||
| HeartbeatAck = 3, | |||
| /// <summary> C←S - Used to provide an encryption key to the client. </summary> | |||
| SessionDescription = 4, | |||
| /// <summary> C↔S - Used to inform that a certain user is speaking. </summary> | |||
| Speaking = 5 | |||
| Speaking = 5, | |||
| /// <summary> C←S - Used to reply to a client's heartbeat. </summary> | |||
| HeartbeatAck = 6, | |||
| /// <summary> C→S - Used to resume a connection. </summary> | |||
| Resume = 7, | |||
| /// <summary> C←S - Used to inform the client the heartbeat interval. </summary> | |||
| Hello = 8, | |||
| /// <summary> C←S - Used to acknowledge a resumed connection. </summary> | |||
| Resumed = 9, | |||
| /// <summary> C←S - Used to notify that a client has disconnected. </summary> | |||
| ClientDisconnect = 13, | |||
| } | |||
| } | |||
| @@ -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<HelloEvent>(_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); | |||
| @@ -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); | |||
| @@ -26,7 +26,7 @@ namespace Discord.WebSocket | |||
| private bool _nsfw; | |||
| /// <inheritdoc /> | |||
| public bool IsNsfw => _nsfw || ChannelHelper.IsNsfw(this); | |||
| public bool IsNsfw => _nsfw; | |||
| /// <inheritdoc /> | |||
| public string Mention => MentionUtils.MentionChannel(Id); | |||
| @@ -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); | |||
| @@ -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); | |||
| @@ -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); | |||
| @@ -77,7 +77,7 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// | |||
| /// Tests that text channel permissions get the right value | |||
| /// from the Has method. | |||
| /// </summary> | |||
| @@ -114,7 +114,7 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// | |||
| /// Tests that no channel permissions get the right value | |||
| /// from the Has method. | |||
| /// </summary> | |||
| @@ -151,7 +151,7 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// | |||
| /// Tests that the dm channel permissions get the right value | |||
| /// from the Has method. | |||
| /// </summary> | |||
| @@ -188,7 +188,7 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// | |||
| /// Tests that the group channel permissions get the right value | |||
| /// from the Has method. | |||
| /// </summary> | |||
| @@ -225,7 +225,7 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// | |||
| /// Tests that the voice channel permissions get the right value | |||
| /// from the Has method. | |||
| /// </summary> | |||
| @@ -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 | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// Test that that the Has method of <see cref="Discord.GuildPermissions"/> | |||
| /// | |||
| /// Test that that the Has method of <see cref="Discord.GuildPermissions"/> | |||
| /// returns the correct value when no permissions are set. | |||
| /// </summary> | |||
| /// <returns></returns> | |||
| @@ -305,8 +305,8 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// Test that that the Has method of <see cref="Discord.GuildPermissions"/> | |||
| /// | |||
| /// Test that that the Has method of <see cref="Discord.GuildPermissions"/> | |||
| /// returns the correct value when all permissions are set. | |||
| /// </summary> | |||
| /// <returns></returns> | |||
| @@ -349,8 +349,8 @@ namespace Discord | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| /// Test that that the Has method of <see cref="Discord.GuildPermissions"/> | |||
| /// | |||
| /// Test that that the Has method of <see cref="Discord.GuildPermissions"/> | |||
| /// returns the correct value when webhook permissions are set. | |||
| /// </summary> | |||
| /// <returns></returns> | |||
| @@ -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. | |||
| /// </summary> | |||
| /// <returns></returns> | |||
| [Fact] | |||
| public Task TestOverwritePermissionModifyNoParam() | |||
| { | |||
| // test for all Text allowed, none denied | |||