From b8fa464125ebffeef079f122eb68653bdd9dd81a Mon Sep 17 00:00:00 2001 From: Paulo Date: Fri, 10 Jul 2020 01:13:01 -0300 Subject: [PATCH 01/76] fix: Stop TaskCanceledException from bubbling up (#1580) --- src/Discord.Net.WebSocket/ConnectionManager.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/ConnectionManager.cs b/src/Discord.Net.WebSocket/ConnectionManager.cs index 8c9c743cb..e009674e7 100644 --- a/src/Discord.Net.WebSocket/ConnectionManager.cs +++ b/src/Discord.Net.WebSocket/ConnectionManager.cs @@ -141,7 +141,16 @@ namespace Discord catch (OperationCanceledException) { } }); - await _onConnecting().ConfigureAwait(false); + try + { + await _onConnecting().ConfigureAwait(false); + } + catch (TaskCanceledException ex) + { + Exception innerEx = ex.InnerException ?? new OperationCanceledException("Failed to connect."); + Error(innerEx); + throw innerEx; + } await _logger.InfoAsync("Connected").ConfigureAwait(false); State = ConnectionState.Connected; From 468f8264d00d1f5c9cacd7f6fa55e861a197e0a1 Mon Sep 17 00:00:00 2001 From: Mustafa Salih ASLIM Date: Fri, 10 Jul 2020 07:13:46 +0300 Subject: [PATCH 02/76] fix: unsupported property causes an exception (#1469) fix for: https://github.com/discord-net/Discord.Net/issues/1436 `SlowModeInterval` property causes an exception for Announcement Channel feature if it is enabled on discord. Should be checked whether it is specified or not before set to property. --- src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs index c7ff7fa65..a85ef4f0b 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs @@ -42,7 +42,8 @@ namespace Discord.Rest base.Update(model); CategoryId = model.CategoryId; Topic = model.Topic.Value; - SlowModeInterval = model.SlowMode.Value; + if (model.SlowMode.IsSpecified) + SlowModeInterval = model.SlowMode.Value; IsNsfw = model.Nsfw.GetValueOrDefault(); } From 42ba3720e3b2206a54d96425aa78b268efc6da15 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sat, 18 Jul 2020 14:52:23 -0300 Subject: [PATCH 03/76] fix: Trim token before passing it to the authorization header (#1578) * Trim token * Trim when assigning to AuthToken --- src/Discord.Net.Rest/DiscordRestApiClient.cs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index 30984c0e9..c29f5e217 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -80,17 +80,13 @@ namespace Discord.API /// Unknown OAuth token type. internal static string GetPrefixedToken(TokenType tokenType, string token) { - switch (tokenType) + return tokenType switch { - case default(TokenType): - return token; - case TokenType.Bot: - return $"Bot {token}"; - case TokenType.Bearer: - return $"Bearer {token}"; - default: - throw new ArgumentException(message: "Unknown OAuth token type.", paramName: nameof(tokenType)); - } + default(TokenType) => token, + TokenType.Bot => $"Bot {token}", + TokenType.Bearer => $"Bearer {token}", + _ => throw new ArgumentException(message: "Unknown OAuth token type.", paramName: nameof(tokenType)), + }; } internal virtual void Dispose(bool disposing) { @@ -133,7 +129,7 @@ namespace Discord.API RestClient.SetCancelToken(_loginCancelToken.Token); AuthTokenType = tokenType; - AuthToken = token; + AuthToken = token?.TrimEnd(); if (tokenType != TokenType.Webhook) RestClient.SetHeader("authorization", GetPrefixedToken(AuthTokenType, AuthToken)); From 2d80037f6b0f25e04e7ceeac9f3e6f04fb2fffa5 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sat, 1 Aug 2020 02:26:24 -0300 Subject: [PATCH 04/76] feature: Add missing channel properties (#1596) --- .../Channels/GuildChannelProperties.cs | 6 ++++ .../API/Rest/CreateGuildChannelParams.cs | 4 +++ .../Entities/Channels/ChannelHelper.cs | 12 ++++++- .../Entities/Guilds/GuildHelper.cs | 34 +++++++++++++++++-- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs index 9552b0a60..93ca2e59a 100644 --- a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs +++ b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; + namespace Discord { /// @@ -30,5 +32,9 @@ namespace Discord /// is set. /// public Optional CategoryId { get; set; } + /// + /// Gets or sets the permission overwrites for this channel. + /// + public Optional> PermissionOverwrites { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs b/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs index a102bd38d..aec43dbef 100644 --- a/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs +++ b/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs @@ -14,12 +14,16 @@ namespace Discord.API.Rest public Optional CategoryId { get; set; } [JsonProperty("position")] public Optional Position { get; set; } + [JsonProperty("permission_overwrites")] + public Optional Overwrites { get; set; } //Text channels [JsonProperty("topic")] public Optional Topic { get; set; } [JsonProperty("nsfw")] public Optional IsNsfw { get; set; } + [JsonProperty("rate_limit_per_user")] + public Optional SlowModeInterval { get; set; } //Voice channels [JsonProperty("bitrate")] diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs index 55b6f03a4..09507f1d7 100644 --- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs +++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs @@ -46,6 +46,15 @@ namespace Discord.Rest Topic = args.Topic, IsNsfw = args.IsNsfw, SlowModeInterval = args.SlowModeInterval, + Overwrites = args.PermissionOverwrites.IsSpecified + ? args.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite + { + TargetId = overwrite.TargetId, + TargetType = overwrite.TargetType, + Allow = overwrite.Permissions.AllowValue, + Deny = overwrite.Permissions.DenyValue + }).ToArray() + : Optional.Create(), }; return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); } @@ -413,7 +422,8 @@ namespace Discord.Rest var apiArgs = new ModifyGuildChannelParams { Overwrites = category.PermissionOverwrites - .Select(overwrite => new API.Overwrite{ + .Select(overwrite => new API.Overwrite + { TargetId = overwrite.TargetId, TargetType = overwrite.TargetType, Allow = overwrite.Permissions.AllowValue, diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs index 675847b58..ccc02466e 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs @@ -176,7 +176,17 @@ namespace Discord.Rest CategoryId = props.CategoryId, Topic = props.Topic, IsNsfw = props.IsNsfw, - Position = props.Position + Position = props.Position, + SlowModeInterval = props.SlowModeInterval, + Overwrites = props.PermissionOverwrites.IsSpecified + ? props.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite + { + TargetId = overwrite.TargetId, + TargetType = overwrite.TargetType, + Allow = overwrite.Permissions.AllowValue, + Deny = overwrite.Permissions.DenyValue + }).ToArray() + : Optional.Create(), }; var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); return RestTextChannel.Create(client, guild, model); @@ -195,7 +205,16 @@ namespace Discord.Rest CategoryId = props.CategoryId, Bitrate = props.Bitrate, UserLimit = props.UserLimit, - Position = props.Position + Position = props.Position, + Overwrites = props.PermissionOverwrites.IsSpecified + ? props.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite + { + TargetId = overwrite.TargetId, + TargetType = overwrite.TargetType, + Allow = overwrite.Permissions.AllowValue, + Deny = overwrite.Permissions.DenyValue + }).ToArray() + : Optional.Create(), }; var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); return RestVoiceChannel.Create(client, guild, model); @@ -211,7 +230,16 @@ namespace Discord.Rest var args = new CreateGuildChannelParams(name, ChannelType.Category) { - Position = props.Position + Position = props.Position, + Overwrites = props.PermissionOverwrites.IsSpecified + ? props.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite + { + TargetId = overwrite.TargetId, + TargetType = overwrite.TargetType, + Allow = overwrite.Permissions.AllowValue, + Deny = overwrite.Permissions.DenyValue + }).ToArray() + : Optional.Create(), }; var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); From 421a0c12ccf97ae01d1467a103db7392c30bef9e Mon Sep 17 00:00:00 2001 From: Paulo Date: Sat, 1 Aug 2020 13:43:56 -0300 Subject: [PATCH 05/76] feature: support reading multiple activities (#1520) --- .../Entities/Users/IPresence.cs | 4 +++ src/Discord.Net.Rest/API/Common/Presence.cs | 5 +++ .../Entities/Users/RestUser.cs | 2 ++ .../DiscordSocketClient.cs | 4 +-- .../Entities/Users/SocketGuildUser.cs | 2 ++ .../Entities/Users/SocketPresence.cs | 31 ++++++++++++++++--- .../Entities/Users/SocketUnknownUser.cs | 2 +- .../Entities/Users/SocketUser.cs | 2 ++ .../Entities/Users/SocketWebhookUser.cs | 2 +- 9 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Users/IPresence.cs b/src/Discord.Net.Core/Entities/Users/IPresence.cs index 620eb907c..a17ac0df2 100644 --- a/src/Discord.Net.Core/Entities/Users/IPresence.cs +++ b/src/Discord.Net.Core/Entities/Users/IPresence.cs @@ -19,5 +19,9 @@ namespace Discord /// Gets the set of clients where this user is currently active. /// IImmutableSet ActiveClients { get; } + /// + /// Gets the list of activities that this user currently has available. + /// + IImmutableList Activities { get; } } } diff --git a/src/Discord.Net.Rest/API/Common/Presence.cs b/src/Discord.Net.Rest/API/Common/Presence.cs index 22526e8ac..b37ad4229 100644 --- a/src/Discord.Net.Rest/API/Common/Presence.cs +++ b/src/Discord.Net.Rest/API/Common/Presence.cs @@ -1,5 +1,6 @@ #pragma warning disable CS1591 using Newtonsoft.Json; +using System; using System.Collections.Generic; namespace Discord.API @@ -26,5 +27,9 @@ namespace Discord.API // "client_status": { "desktop": "dnd", "mobile": "dnd" } [JsonProperty("client_status")] public Optional> ClientStatus { get; set; } + [JsonProperty("activities")] + public List Activities { get; set; } + [JsonProperty("premium_since")] + public Optional PremiumSince { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs index d5fffca94..f5becd3ff 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs @@ -35,6 +35,8 @@ namespace Discord.Rest /// public virtual IImmutableSet ActiveClients => ImmutableHashSet.Empty; /// + public virtual IImmutableList Activities => ImmutableList.Empty; + /// public virtual bool IsWebhook => false; internal RestUser(BaseDiscordClient discord, ulong id) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 1bfa467b6..004c6179c 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -342,7 +342,7 @@ namespace Discord.WebSocket { var user = SocketGlobalUser.Create(this, state, model); user.GlobalUser.AddRef(); - user.Presence = new SocketPresence(UserStatus.Online, null, null); + user.Presence = new SocketPresence(UserStatus.Online, null, null, null); return user; }); } @@ -450,7 +450,7 @@ namespace Discord.WebSocket return; var status = Status; var statusSince = _statusSince; - CurrentUser.Presence = new SocketPresence(status, Activity, null); + CurrentUser.Presence = new SocketPresence(status, Activity, null, null); var gameModel = new GameModel(); // Discord only accepts rich presence over RPC, don't even bother building a payload diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs index e5dbfa01d..a506a5d7f 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs @@ -154,6 +154,8 @@ namespace Discord.WebSocket Nickname = model.Nick.Value; if (model.Roles.IsSpecified) UpdateRoles(model.Roles.Value); + if (model.PremiumSince.IsSpecified) + _premiumSinceTicks = model.PremiumSince.Value?.UtcTicks; } private void UpdateRoles(ulong[] roleIds) { diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketPresence.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketPresence.cs index 52f111303..407e14419 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketPresence.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketPresence.cs @@ -18,16 +18,20 @@ namespace Discord.WebSocket public IActivity Activity { get; } /// public IImmutableSet ActiveClients { get; } - internal SocketPresence(UserStatus status, IActivity activity, IImmutableSet activeClients) + /// + public IImmutableList Activities { get; } + internal SocketPresence(UserStatus status, IActivity activity, IImmutableSet activeClients, IImmutableList activities) { Status = status; - Activity= activity; - ActiveClients = activeClients; + Activity = activity; + ActiveClients = activeClients ?? ImmutableHashSet.Empty; + Activities = activities ?? ImmutableList.Empty; } internal static SocketPresence Create(Model model) { var clients = ConvertClientTypesDict(model.ClientStatus.GetValueOrDefault()); - return new SocketPresence(model.Status, model.Game?.ToEntity(), clients); + var activities = ConvertActivitiesList(model.Activities); + return new SocketPresence(model.Status, model.Game?.ToEntity(), clients, activities); } /// /// Creates a new containing all of the client types @@ -53,6 +57,25 @@ namespace Discord.WebSocket } return set.ToImmutableHashSet(); } + /// + /// Creates a new containing all the activities + /// that a user has from the data supplied in the Presence update frame. + /// + /// + /// A list of . + /// + /// + /// A list of all that this user currently has available. + /// + private static IImmutableList ConvertActivitiesList(IList activities) + { + if (activities == null || activities.Count == 0) + return ImmutableList.Empty; + var list = new List(); + foreach (var activity in activities) + list.Add(activity.ToEntity()); + return list.ToImmutableList(); + } /// /// Gets the status of the user. diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUnknownUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUnknownUser.cs index 840a1c30b..dd2e747b4 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketUnknownUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUnknownUser.cs @@ -25,7 +25,7 @@ namespace Discord.WebSocket /// public override bool IsWebhook => false; /// - internal override SocketPresence Presence { get { return new SocketPresence(UserStatus.Offline, null, null); } set { } } + internal override SocketPresence Presence { get { return new SocketPresence(UserStatus.Offline, null, null, null); } set { } } /// /// This field is not supported for an unknown user. internal override SocketGlobalUser GlobalUser => diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs index b830ce79c..7d3c2d23b 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs @@ -41,6 +41,8 @@ namespace Discord.WebSocket public UserStatus Status => Presence.Status; /// public IImmutableSet ActiveClients => Presence.ActiveClients ?? ImmutableHashSet.Empty; + /// + public IImmutableList Activities => Presence.Activities ?? ImmutableList.Empty; /// /// Gets mutual guilds shared with this user. /// diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs index 8819fe1b4..d400e1ae7 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs @@ -30,7 +30,7 @@ namespace Discord.WebSocket /// public override bool IsWebhook => true; /// - internal override SocketPresence Presence { get { return new SocketPresence(UserStatus.Offline, null, null); } set { } } + internal override SocketPresence Presence { get { return new SocketPresence(UserStatus.Offline, null, null, null); } set { } } internal override SocketGlobalUser GlobalUser => throw new NotSupportedException(); From 2f6c0175c82dc17781e5f0c204cca4baf3209eab Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 5 Aug 2020 21:16:21 -0300 Subject: [PATCH 06/76] fix: Different ratelimits for the same route (implement discord buckets) (#1546) * Don't disable when there's no resetTick Sometimes Discord won't send any ratelimit headers, disabling the semaphore for endpoints that should have them. * Undo changes and change comment * Add HttpMethod to BucketIds * Add X-RateLimit-Bucket * BucketId changes - BucketId is it's own class now - Add WebhookId as a major parameter - Add shared buckets using the hash and major parameters * Add webhookId to BucketIds * Update BucketId and redirect requests * General bugfixes * Assign semaphore and follow the same standard as Reset for ResetAfter --- src/Discord.Net.Core/Net/BucketId.cs | 118 ++++++++++++++++++ src/Discord.Net.Core/RequestOptions.cs | 3 +- src/Discord.Net.Rest/BaseDiscordClient.cs | 4 +- src/Discord.Net.Rest/DiscordRestApiClient.cs | 69 ++++++---- .../Net/Queue/ClientBucket.cs | 14 +-- .../Net/Queue/RequestQueue.cs | 39 ++++-- .../Net/Queue/RequestQueueBucket.cs | 74 ++++++++--- src/Discord.Net.Rest/Net/RateLimitInfo.cs | 8 +- .../DiscordWebhookClient.cs | 4 +- 9 files changed, 269 insertions(+), 64 deletions(-) create mode 100644 src/Discord.Net.Core/Net/BucketId.cs diff --git a/src/Discord.Net.Core/Net/BucketId.cs b/src/Discord.Net.Core/Net/BucketId.cs new file mode 100644 index 000000000..96281a0ed --- /dev/null +++ b/src/Discord.Net.Core/Net/BucketId.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; + +namespace Discord.Net +{ + /// + /// Represents a ratelimit bucket. + /// + public class BucketId : IEquatable + { + /// + /// Gets the http method used to make the request if available. + /// + public string HttpMethod { get; } + /// + /// Gets the endpoint that is going to be requested if available. + /// + public string Endpoint { get; } + /// + /// Gets the major parameters of the route. + /// + public IOrderedEnumerable> MajorParameters { get; } + /// + /// Gets the hash of this bucket. + /// + /// + /// The hash is provided by Discord to group ratelimits. + /// + public string BucketHash { get; } + /// + /// Gets if this bucket is a hash type. + /// + public bool IsHashBucket { get => BucketHash != null; } + + private BucketId(string httpMethod, string endpoint, IEnumerable> majorParameters, string bucketHash) + { + HttpMethod = httpMethod; + Endpoint = endpoint; + MajorParameters = majorParameters.OrderBy(x => x.Key); + BucketHash = bucketHash; + } + + /// + /// Creates a new based on the + /// and . + /// + /// Http method used to make the request. + /// Endpoint that is going to receive requests. + /// Major parameters of the route of this endpoint. + /// + /// A based on the + /// and the with the provided data. + /// + public static BucketId Create(string httpMethod, string endpoint, Dictionary majorParams) + { + Preconditions.NotNullOrWhitespace(endpoint, nameof(endpoint)); + majorParams ??= new Dictionary(); + return new BucketId(httpMethod, endpoint, majorParams, null); + } + + /// + /// Creates a new based on a + /// and a previous . + /// + /// Bucket hash provided by Discord. + /// that is going to be upgraded to a hash type. + /// + /// A based on the + /// and . + /// + public static BucketId Create(string hash, BucketId oldBucket) + { + Preconditions.NotNullOrWhitespace(hash, nameof(hash)); + Preconditions.NotNull(oldBucket, nameof(oldBucket)); + return new BucketId(null, null, oldBucket.MajorParameters, hash); + } + + /// + /// Gets the string that will define this bucket as a hash based one. + /// + /// + /// A that defines this bucket as a hash based one. + /// + public string GetBucketHash() + => IsHashBucket ? $"{BucketHash}:{string.Join("/", MajorParameters.Select(x => x.Value))}" : null; + + /// + /// Gets the string that will define this bucket as an endpoint based one. + /// + /// + /// A that defines this bucket as an endpoint based one. + /// + public string GetUniqueEndpoint() + => HttpMethod != null ? $"{HttpMethod} {Endpoint}" : Endpoint; + + public override bool Equals(object obj) + => Equals(obj as BucketId); + + public override int GetHashCode() + => IsHashBucket ? (BucketHash, string.Join("/", MajorParameters.Select(x => x.Value))).GetHashCode() : (HttpMethod, Endpoint).GetHashCode(); + + public override string ToString() + => GetBucketHash() ?? GetUniqueEndpoint(); + + public bool Equals(BucketId other) + { + if (other is null) + return false; + if (ReferenceEquals(this, other)) + return true; + if (GetType() != other.GetType()) + return false; + return ToString() == other.ToString(); + } + } +} diff --git a/src/Discord.Net.Core/RequestOptions.cs b/src/Discord.Net.Core/RequestOptions.cs index 1b05df2a3..ad0a4e33f 100644 --- a/src/Discord.Net.Core/RequestOptions.cs +++ b/src/Discord.Net.Core/RequestOptions.cs @@ -1,3 +1,4 @@ +using Discord.Net; using System.Threading; namespace Discord @@ -57,7 +58,7 @@ namespace Discord public bool? UseSystemClock { get; set; } internal bool IgnoreState { get; set; } - internal string BucketId { get; set; } + internal BucketId BucketId { get; set; } internal bool IsClientBucket { get; set; } internal bool IsReactionBucket { get; set; } diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs index 1837e38c0..58b42929a 100644 --- a/src/Discord.Net.Rest/BaseDiscordClient.cs +++ b/src/Discord.Net.Rest/BaseDiscordClient.cs @@ -49,9 +49,9 @@ namespace Discord.Rest ApiClient.RequestQueue.RateLimitTriggered += async (id, info) => { if (info == null) - await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {id ?? "null"}").ConfigureAwait(false); + await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); else - await _restLogger.WarningAsync($"Rate limit triggered: {id ?? "null"}").ConfigureAwait(false); + await _restLogger.WarningAsync($"Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); }; ApiClient.SentRequest += async (method, endpoint, millis) => await _restLogger.VerboseAsync($"{method} {endpoint}: {millis} ms").ConfigureAwait(false); } diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index c29f5e217..76c7bf1b4 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -24,7 +24,7 @@ namespace Discord.API { internal class DiscordRestApiClient : IDisposable { - private static readonly ConcurrentDictionary> _bucketIdGenerators = new ConcurrentDictionary>(); + private static readonly ConcurrentDictionary> _bucketIdGenerators = new ConcurrentDictionary>(); public event Func SentRequest { add { _sentRequestEvent.Add(value); } remove { _sentRequestEvent.Remove(value); } } private readonly AsyncEvent> _sentRequestEvent = new AsyncEvent>(); @@ -176,9 +176,9 @@ namespace Discord.API //Core internal Task SendAsync(string method, Expression> endpointExpr, BucketIds ids, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null, [CallerMemberName] string funcName = null) - => SendAsync(method, GetEndpoint(endpointExpr), GetBucketId(ids, endpointExpr, funcName), clientBucket, options); + => SendAsync(method, GetEndpoint(endpointExpr), GetBucketId(method, ids, endpointExpr, funcName), clientBucket, options); public async Task SendAsync(string method, string endpoint, - string bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) + BucketId bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) { options = options ?? new RequestOptions(); options.HeaderOnly = true; @@ -190,9 +190,9 @@ namespace Discord.API internal Task SendJsonAsync(string method, Expression> endpointExpr, object payload, BucketIds ids, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null, [CallerMemberName] string funcName = null) - => SendJsonAsync(method, GetEndpoint(endpointExpr), payload, GetBucketId(ids, endpointExpr, funcName), clientBucket, options); + => SendJsonAsync(method, GetEndpoint(endpointExpr), payload, GetBucketId(method, ids, endpointExpr, funcName), clientBucket, options); public async Task SendJsonAsync(string method, string endpoint, object payload, - string bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) + BucketId bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) { options = options ?? new RequestOptions(); options.HeaderOnly = true; @@ -205,9 +205,9 @@ namespace Discord.API internal Task SendMultipartAsync(string method, Expression> endpointExpr, IReadOnlyDictionary multipartArgs, BucketIds ids, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null, [CallerMemberName] string funcName = null) - => SendMultipartAsync(method, GetEndpoint(endpointExpr), multipartArgs, GetBucketId(ids, endpointExpr, funcName), clientBucket, options); + => SendMultipartAsync(method, GetEndpoint(endpointExpr), multipartArgs, GetBucketId(method, ids, endpointExpr, funcName), clientBucket, options); public async Task SendMultipartAsync(string method, string endpoint, IReadOnlyDictionary multipartArgs, - string bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) + BucketId bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) { options = options ?? new RequestOptions(); options.HeaderOnly = true; @@ -219,9 +219,9 @@ namespace Discord.API internal Task SendAsync(string method, Expression> endpointExpr, BucketIds ids, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null, [CallerMemberName] string funcName = null) where TResponse : class - => SendAsync(method, GetEndpoint(endpointExpr), GetBucketId(ids, endpointExpr, funcName), clientBucket, options); + => SendAsync(method, GetEndpoint(endpointExpr), GetBucketId(method, ids, endpointExpr, funcName), clientBucket, options); public async Task SendAsync(string method, string endpoint, - string bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) where TResponse : class + BucketId bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) where TResponse : class { options = options ?? new RequestOptions(); options.BucketId = bucketId; @@ -232,9 +232,9 @@ namespace Discord.API internal Task SendJsonAsync(string method, Expression> endpointExpr, object payload, BucketIds ids, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null, [CallerMemberName] string funcName = null) where TResponse : class - => SendJsonAsync(method, GetEndpoint(endpointExpr), payload, GetBucketId(ids, endpointExpr, funcName), clientBucket, options); + => SendJsonAsync(method, GetEndpoint(endpointExpr), payload, GetBucketId(method, ids, endpointExpr, funcName), clientBucket, options); public async Task SendJsonAsync(string method, string endpoint, object payload, - string bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) where TResponse : class + BucketId bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) where TResponse : class { options = options ?? new RequestOptions(); options.BucketId = bucketId; @@ -246,9 +246,9 @@ namespace Discord.API internal Task SendMultipartAsync(string method, Expression> endpointExpr, IReadOnlyDictionary multipartArgs, BucketIds ids, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null, [CallerMemberName] string funcName = null) - => SendMultipartAsync(method, GetEndpoint(endpointExpr), multipartArgs, GetBucketId(ids, endpointExpr, funcName), clientBucket, options); + => SendMultipartAsync(method, GetEndpoint(endpointExpr), multipartArgs, GetBucketId(method, ids, endpointExpr, funcName), clientBucket, options); public async Task SendMultipartAsync(string method, string endpoint, IReadOnlyDictionary multipartArgs, - string bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) + BucketId bucketId = null, ClientBucketType clientBucket = ClientBucketType.Unbucketed, RequestOptions options = null) { options = options ?? new RequestOptions(); options.BucketId = bucketId; @@ -520,7 +520,8 @@ namespace Discord.API throw new ArgumentException(message: $"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", paramName: nameof(args.Content)); options = RequestOptions.CreateOrClone(options); - return await SendJsonAsync("POST", () => $"webhooks/{webhookId}/{AuthToken}?wait=true", args, new BucketIds(), clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false); + var ids = new BucketIds(webhookId: webhookId); + return await SendJsonAsync("POST", () => $"webhooks/{webhookId}/{AuthToken}?wait=true", args, ids, clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false); } /// Message content is too long, length must be less or equal to . public async Task UploadFileAsync(ulong channelId, UploadFileParams args, RequestOptions options = null) @@ -559,7 +560,8 @@ namespace Discord.API throw new ArgumentOutOfRangeException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); } - return await SendMultipartAsync("POST", () => $"webhooks/{webhookId}/{AuthToken}?wait=true", args.ToDictionary(), new BucketIds(), clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false); + var ids = new BucketIds(webhookId: webhookId); + return await SendMultipartAsync("POST", () => $"webhooks/{webhookId}/{AuthToken}?wait=true", args.ToDictionary(), ids, clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false); } public async Task DeleteMessageAsync(ulong channelId, ulong messageId, RequestOptions options = null) { @@ -1466,21 +1468,39 @@ namespace Discord.API { public ulong GuildId { get; internal set; } public ulong ChannelId { get; internal set; } + public ulong WebhookId { get; internal set; } + public string HttpMethod { get; internal set; } - internal BucketIds(ulong guildId = 0, ulong channelId = 0) + internal BucketIds(ulong guildId = 0, ulong channelId = 0, ulong webhookId = 0) { GuildId = guildId; ChannelId = channelId; + WebhookId = webhookId; } + internal object[] ToArray() - => new object[] { GuildId, ChannelId }; + => new object[] { HttpMethod, GuildId, ChannelId, WebhookId }; + + internal Dictionary ToMajorParametersDictionary() + { + var dict = new Dictionary(); + if (GuildId != 0) + dict["GuildId"] = GuildId.ToString(); + if (ChannelId != 0) + dict["ChannelId"] = ChannelId.ToString(); + if (WebhookId != 0) + dict["WebhookId"] = WebhookId.ToString(); + return dict; + } internal static int? GetIndex(string name) { switch (name) { - case "guildId": return 0; - case "channelId": return 1; + case "httpMethod": return 0; + case "guildId": return 1; + case "channelId": return 2; + case "webhookId": return 3; default: return null; } @@ -1491,18 +1511,19 @@ namespace Discord.API { return endpointExpr.Compile()(); } - private static string GetBucketId(BucketIds ids, Expression> endpointExpr, string callingMethod) + private static BucketId GetBucketId(string httpMethod, BucketIds ids, Expression> endpointExpr, string callingMethod) { + ids.HttpMethod ??= httpMethod; return _bucketIdGenerators.GetOrAdd(callingMethod, x => CreateBucketId(endpointExpr))(ids); } - private static Func CreateBucketId(Expression> endpoint) + private static Func CreateBucketId(Expression> endpoint) { try { //Is this a constant string? if (endpoint.Body.NodeType == ExpressionType.Constant) - return x => (endpoint.Body as ConstantExpression).Value.ToString(); + return x => BucketId.Create(x.HttpMethod, (endpoint.Body as ConstantExpression).Value.ToString(), x.ToMajorParametersDictionary()); var builder = new StringBuilder(); var methodCall = endpoint.Body as MethodCallExpression; @@ -1539,7 +1560,7 @@ namespace Discord.API var mappedId = BucketIds.GetIndex(fieldName); - if(!mappedId.HasValue && rightIndex != endIndex && format.Length > rightIndex + 1 && format[rightIndex + 1] == '/') //Ignore the next slash + if (!mappedId.HasValue && rightIndex != endIndex && format.Length > rightIndex + 1 && format[rightIndex + 1] == '/') //Ignore the next slash rightIndex++; if (mappedId.HasValue) @@ -1552,7 +1573,7 @@ namespace Discord.API format = builder.ToString(); - return x => string.Format(format, x.ToArray()); + return x => BucketId.Create(x.HttpMethod, string.Format(format, x.ToArray()), x.ToMajorParametersDictionary()); } catch (Exception ex) { diff --git a/src/Discord.Net.Rest/Net/Queue/ClientBucket.cs b/src/Discord.Net.Rest/Net/Queue/ClientBucket.cs index cd9d8aa54..e726a08cf 100644 --- a/src/Discord.Net.Rest/Net/Queue/ClientBucket.cs +++ b/src/Discord.Net.Rest/Net/Queue/ClientBucket.cs @@ -10,14 +10,14 @@ namespace Discord.Net.Queue internal struct ClientBucket { private static readonly ImmutableDictionary DefsByType; - private static readonly ImmutableDictionary DefsById; + private static readonly ImmutableDictionary DefsById; static ClientBucket() { var buckets = new[] { - new ClientBucket(ClientBucketType.Unbucketed, "", 10, 10), - new ClientBucket(ClientBucketType.SendEdit, "", 10, 10) + new ClientBucket(ClientBucketType.Unbucketed, BucketId.Create(null, "", null), 10, 10), + new ClientBucket(ClientBucketType.SendEdit, BucketId.Create(null, "", null), 10, 10) }; var builder = ImmutableDictionary.CreateBuilder(); @@ -25,21 +25,21 @@ namespace Discord.Net.Queue builder.Add(bucket.Type, bucket); DefsByType = builder.ToImmutable(); - var builder2 = ImmutableDictionary.CreateBuilder(); + var builder2 = ImmutableDictionary.CreateBuilder(); foreach (var bucket in buckets) builder2.Add(bucket.Id, bucket); DefsById = builder2.ToImmutable(); } public static ClientBucket Get(ClientBucketType type) => DefsByType[type]; - public static ClientBucket Get(string id) => DefsById[id]; + public static ClientBucket Get(BucketId id) => DefsById[id]; public ClientBucketType Type { get; } - public string Id { get; } + public BucketId Id { get; } public int WindowCount { get; } public int WindowSeconds { get; } - public ClientBucket(ClientBucketType type, string id, int count, int seconds) + public ClientBucket(ClientBucketType type, BucketId id, int count, int seconds) { Type = type; Id = id; diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs index 4baf76433..691ac77c0 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs @@ -12,9 +12,9 @@ namespace Discord.Net.Queue { internal class RequestQueue : IDisposable { - public event Func RateLimitTriggered; + public event Func RateLimitTriggered; - private readonly ConcurrentDictionary _buckets; + private readonly ConcurrentDictionary _buckets; private readonly SemaphoreSlim _tokenLock; private readonly CancellationTokenSource _cancelTokenSource; //Dispose token private CancellationTokenSource _clearToken; @@ -34,7 +34,7 @@ namespace Discord.Net.Queue _requestCancelToken = CancellationToken.None; _parentToken = CancellationToken.None; - _buckets = new ConcurrentDictionary(); + _buckets = new ConcurrentDictionary(); _cleanupTask = RunCleanup(); } @@ -82,7 +82,7 @@ namespace Discord.Net.Queue else request.Options.CancelToken = _requestCancelToken; - var bucket = GetOrCreateBucket(request.Options.BucketId, request); + var bucket = GetOrCreateBucket(request.Options, request); var result = await bucket.SendAsync(request).ConfigureAwait(false); createdTokenSource?.Dispose(); return result; @@ -110,14 +110,32 @@ namespace Discord.Net.Queue _waitUntil = DateTimeOffset.UtcNow.AddMilliseconds(info.RetryAfter.Value + (info.Lag?.TotalMilliseconds ?? 0.0)); } - private RequestBucket GetOrCreateBucket(string id, RestRequest request) + private RequestBucket GetOrCreateBucket(RequestOptions options, RestRequest request) { - return _buckets.GetOrAdd(id, x => new RequestBucket(this, request, x)); + var bucketId = options.BucketId; + object obj = _buckets.GetOrAdd(bucketId, x => new RequestBucket(this, request, x)); + if (obj is BucketId hashBucket) + { + options.BucketId = hashBucket; + return (RequestBucket)_buckets.GetOrAdd(hashBucket, x => new RequestBucket(this, request, x)); + } + return (RequestBucket)obj; } - internal async Task RaiseRateLimitTriggered(string bucketId, RateLimitInfo? info) + internal async Task RaiseRateLimitTriggered(BucketId bucketId, RateLimitInfo? info) { await RateLimitTriggered(bucketId, info).ConfigureAwait(false); } + internal (RequestBucket, BucketId) UpdateBucketHash(BucketId id, string discordHash) + { + if (!id.IsHashBucket) + { + var bucket = BucketId.Create(discordHash, id); + var hashReqQueue = (RequestBucket)_buckets.GetOrAdd(bucket, _buckets[id]); + _buckets.AddOrUpdate(id, bucket, (oldBucket, oldObj) => bucket); + return (hashReqQueue, bucket); + } + return (null, null); + } private async Task RunCleanup() { @@ -126,10 +144,15 @@ namespace Discord.Net.Queue while (!_cancelTokenSource.IsCancellationRequested) { var now = DateTimeOffset.UtcNow; - foreach (var bucket in _buckets.Select(x => x.Value)) + foreach (var bucket in _buckets.Where(x => x.Value is RequestBucket).Select(x => (RequestBucket)x.Value)) { if ((now - bucket.LastAttemptAt).TotalMinutes > 1.0) + { + if (bucket.Id.IsHashBucket) + foreach (var redirectBucket in _buckets.Where(x => x.Value == bucket.Id).Select(x => (BucketId)x.Value)) + _buckets.TryRemove(redirectBucket, out _); //remove redirections if hash bucket _buckets.TryRemove(bucket.Id, out _); + } } await Task.Delay(60000, _cancelTokenSource.Token).ConfigureAwait(false); //Runs each minute } diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs index 771923cd4..f1471d545 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs @@ -19,12 +19,13 @@ namespace Discord.Net.Queue private readonly RequestQueue _queue; private int _semaphore; private DateTimeOffset? _resetTick; + private RequestBucket _redirectBucket; - public string Id { get; private set; } + public BucketId Id { get; private set; } public int WindowCount { get; private set; } public DateTimeOffset LastAttemptAt { get; private set; } - public RequestBucket(RequestQueue queue, RestRequest request, string id) + public RequestBucket(RequestQueue queue, RestRequest request, BucketId id) { _queue = queue; Id = id; @@ -32,7 +33,7 @@ namespace Discord.Net.Queue _lock = new object(); if (request.Options.IsClientBucket) - WindowCount = ClientBucket.Get(request.Options.BucketId).WindowCount; + WindowCount = ClientBucket.Get(Id).WindowCount; else WindowCount = 1; //Only allow one request until we get a header back _semaphore = WindowCount; @@ -52,6 +53,8 @@ namespace Discord.Net.Queue { await _queue.EnterGlobalAsync(id, request).ConfigureAwait(false); await EnterAsync(id, request).ConfigureAwait(false); + if (_redirectBucket != null) + return await _redirectBucket.SendAsync(request); #if DEBUG_LIMITS Debug.WriteLine($"[{id}] Sending..."); @@ -160,6 +163,9 @@ namespace Discord.Net.Queue while (true) { + if (_redirectBucket != null) + break; + if (DateTimeOffset.UtcNow > request.TimeoutAt || request.Options.CancelToken.IsCancellationRequested) { if (!isRateLimited) @@ -175,7 +181,8 @@ namespace Discord.Net.Queue } DateTimeOffset? timeoutAt = request.TimeoutAt; - if (windowCount > 0 && Interlocked.Decrement(ref _semaphore) < 0) + int semaphore = Interlocked.Decrement(ref _semaphore); + if (windowCount > 0 && semaphore < 0) { if (!isRateLimited) { @@ -210,20 +217,52 @@ namespace Discord.Net.Queue } #if DEBUG_LIMITS else - Debug.WriteLine($"[{id}] Entered Semaphore ({_semaphore}/{WindowCount} remaining)"); + Debug.WriteLine($"[{id}] Entered Semaphore ({semaphore}/{WindowCount} remaining)"); #endif break; } } - private void UpdateRateLimit(int id, RestRequest request, RateLimitInfo info, bool is429) + private void UpdateRateLimit(int id, RestRequest request, RateLimitInfo info, bool is429, bool redirected = false) { if (WindowCount == 0) return; lock (_lock) { + if (redirected) + { + Interlocked.Decrement(ref _semaphore); //we might still hit a real ratelimit if all tickets were already taken, can't do much about it since we didn't know they were the same +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Decrease Semaphore"); +#endif + } bool hasQueuedReset = _resetTick != null; + + if (info.Bucket != null && !redirected) + { + (RequestBucket, BucketId) hashBucket = _queue.UpdateBucketHash(Id, info.Bucket); + if (!(hashBucket.Item1 is null) && !(hashBucket.Item2 is null)) + { + if (hashBucket.Item1 == this) //this bucket got promoted to a hash queue + { + Id = hashBucket.Item2; +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Promoted to Hash Bucket ({hashBucket.Item2})"); +#endif + } + else + { + _redirectBucket = hashBucket.Item1; //this request should be part of another bucket, this bucket will be disabled, redirect everything + _redirectBucket.UpdateRateLimit(id, request, info, is429, redirected: true); //update the hash bucket ratelimit +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Redirected to {_redirectBucket.Id}"); +#endif + return; + } + } + } + if (info.Limit.HasValue && WindowCount != info.Limit.Value) { WindowCount = info.Limit.Value; @@ -233,7 +272,6 @@ namespace Discord.Net.Queue #endif } - var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); DateTimeOffset? resetTick = null; //Using X-RateLimit-Remaining causes a race condition @@ -250,16 +288,18 @@ namespace Discord.Net.Queue Debug.WriteLine($"[{id}] Retry-After: {info.RetryAfter.Value} ({info.RetryAfter.Value} ms)"); #endif } - else if (info.ResetAfter.HasValue && (request.Options.UseSystemClock.HasValue ? !request.Options.UseSystemClock.Value : false)) - { - resetTick = DateTimeOffset.UtcNow.Add(info.ResetAfter.Value); - } + else if (info.ResetAfter.HasValue && (request.Options.UseSystemClock.HasValue ? !request.Options.UseSystemClock.Value : false)) + { + resetTick = DateTimeOffset.UtcNow.Add(info.ResetAfter.Value); +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Reset-After: {info.ResetAfter.Value} ({info.ResetAfter?.TotalMilliseconds} ms)"); +#endif + } else if (info.Reset.HasValue) { resetTick = info.Reset.Value.AddSeconds(info.Lag?.TotalSeconds ?? 1.0); - /* millisecond precision makes this unnecessary, retaining in case of regression - + /* millisecond precision makes this unnecessary, retaining in case of regression if (request.Options.IsReactionBucket) resetTick = DateTimeOffset.Now.AddMilliseconds(250); */ @@ -269,17 +309,17 @@ namespace Discord.Net.Queue Debug.WriteLine($"[{id}] X-RateLimit-Reset: {info.Reset.Value.ToUnixTimeSeconds()} ({diff} ms, {info.Lag?.TotalMilliseconds} ms lag)"); #endif } - else if (request.Options.IsClientBucket && request.Options.BucketId != null) + else if (request.Options.IsClientBucket && Id != null) { - resetTick = DateTimeOffset.UtcNow.AddSeconds(ClientBucket.Get(request.Options.BucketId).WindowSeconds); + resetTick = DateTimeOffset.UtcNow.AddSeconds(ClientBucket.Get(Id).WindowSeconds); #if DEBUG_LIMITS - Debug.WriteLine($"[{id}] Client Bucket ({ClientBucket.Get(request.Options.BucketId).WindowSeconds * 1000} ms)"); + Debug.WriteLine($"[{id}] Client Bucket ({ClientBucket.Get(Id).WindowSeconds * 1000} ms)"); #endif } if (resetTick == null) { - WindowCount = 0; //No rate limit info, disable limits on this bucket (should only ever happen with a user token) + WindowCount = 0; //No rate limit info, disable limits on this bucket #if DEBUG_LIMITS Debug.WriteLine($"[{id}] Disabled Semaphore"); #endif diff --git a/src/Discord.Net.Rest/Net/RateLimitInfo.cs b/src/Discord.Net.Rest/Net/RateLimitInfo.cs index 13e9e39a7..6a7df7b01 100644 --- a/src/Discord.Net.Rest/Net/RateLimitInfo.cs +++ b/src/Discord.Net.Rest/Net/RateLimitInfo.cs @@ -11,7 +11,8 @@ namespace Discord.Net public int? Remaining { get; } public int? RetryAfter { get; } public DateTimeOffset? Reset { get; } - public TimeSpan? ResetAfter { get; } + public TimeSpan? ResetAfter { get; } + public string Bucket { get; } public TimeSpan? Lag { get; } internal RateLimitInfo(Dictionary headers) @@ -26,8 +27,9 @@ namespace Discord.Net double.TryParse(temp, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var reset) ? DateTimeOffset.FromUnixTimeMilliseconds((long)(reset * 1000)) : (DateTimeOffset?)null; RetryAfter = headers.TryGetValue("Retry-After", out temp) && int.TryParse(temp, NumberStyles.None, CultureInfo.InvariantCulture, out var retryAfter) ? retryAfter : (int?)null; - ResetAfter = headers.TryGetValue("X-RateLimit-Reset-After", out temp) && - float.TryParse(temp, out var resetAfter) ? TimeSpan.FromMilliseconds((long)(resetAfter * 1000)) : (TimeSpan?)null; + ResetAfter = headers.TryGetValue("X-RateLimit-Reset-After", out temp) && + double.TryParse(temp, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var resetAfter) ? TimeSpan.FromMilliseconds((long)(resetAfter * 1000)) : (TimeSpan?)null; + Bucket = headers.TryGetValue("X-RateLimit-Bucket", out temp) ? temp : null; Lag = headers.TryGetValue("Date", out temp) && DateTimeOffset.TryParse(temp, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date) ? DateTimeOffset.UtcNow - date : (TimeSpan?)null; } diff --git a/src/Discord.Net.Webhook/DiscordWebhookClient.cs b/src/Discord.Net.Webhook/DiscordWebhookClient.cs index 353345ded..3ad100148 100644 --- a/src/Discord.Net.Webhook/DiscordWebhookClient.cs +++ b/src/Discord.Net.Webhook/DiscordWebhookClient.cs @@ -77,9 +77,9 @@ namespace Discord.Webhook ApiClient.RequestQueue.RateLimitTriggered += async (id, info) => { if (info == null) - await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {id ?? "null"}").ConfigureAwait(false); + await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); else - await _restLogger.WarningAsync($"Rate limit triggered: {id ?? "null"}").ConfigureAwait(false); + await _restLogger.WarningAsync($"Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); }; ApiClient.SentRequest += async (method, endpoint, millis) => await _restLogger.VerboseAsync($"{method} {endpoint}: {millis} ms").ConfigureAwait(false); } From b95b95bdcb0bd6216bd0633b1bd149da4adb0bb2 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 5 Aug 2020 21:16:59 -0300 Subject: [PATCH 07/76] fix: Invite audit log without inviter (#1599) * Fix possible invite without inviter * Prevent the same for InviteCreate * Update Creator property docs --- .../DataTypes/InviteCreateAuditLogData.cs | 14 +++++++++----- .../DataTypes/InviteDeleteAuditLogData.cs | 14 +++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteCreateAuditLogData.cs b/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteCreateAuditLogData.cs index 215a3c164..b177b2435 100644 --- a/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteCreateAuditLogData.cs +++ b/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteCreateAuditLogData.cs @@ -36,13 +36,17 @@ namespace Discord.Rest var maxAge = maxAgeModel.NewValue.ToObject(discord.ApiClient.Serializer); var code = codeModel.NewValue.ToObject(discord.ApiClient.Serializer); var temporary = temporaryModel.NewValue.ToObject(discord.ApiClient.Serializer); - var inviterId = inviterIdModel.NewValue.ToObject(discord.ApiClient.Serializer); var channelId = channelIdModel.NewValue.ToObject(discord.ApiClient.Serializer); var uses = usesModel.NewValue.ToObject(discord.ApiClient.Serializer); var maxUses = maxUsesModel.NewValue.ToObject(discord.ApiClient.Serializer); - var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); - var inviter = RestUser.Create(discord, inviterInfo); + RestUser inviter = null; + if (inviterIdModel != null) + { + var inviterId = inviterIdModel.NewValue.ToObject(discord.ApiClient.Serializer); + var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); + inviter = RestUser.Create(discord, inviterInfo); + } return new InviteCreateAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses); } @@ -70,10 +74,10 @@ namespace Discord.Rest /// public bool Temporary { get; } /// - /// Gets the user that created this invite. + /// Gets the user that created this invite if available. /// /// - /// A user that created this invite. + /// A user that created this invite or . /// public IUser Creator { get; } /// diff --git a/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteDeleteAuditLogData.cs b/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteDeleteAuditLogData.cs index 5e49bb641..9d0aed12b 100644 --- a/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteDeleteAuditLogData.cs +++ b/src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteDeleteAuditLogData.cs @@ -36,13 +36,17 @@ namespace Discord.Rest var maxAge = maxAgeModel.OldValue.ToObject(discord.ApiClient.Serializer); var code = codeModel.OldValue.ToObject(discord.ApiClient.Serializer); var temporary = temporaryModel.OldValue.ToObject(discord.ApiClient.Serializer); - var inviterId = inviterIdModel.OldValue.ToObject(discord.ApiClient.Serializer); var channelId = channelIdModel.OldValue.ToObject(discord.ApiClient.Serializer); var uses = usesModel.OldValue.ToObject(discord.ApiClient.Serializer); var maxUses = maxUsesModel.OldValue.ToObject(discord.ApiClient.Serializer); - var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); - var inviter = RestUser.Create(discord, inviterInfo); + RestUser inviter = null; + if (inviterIdModel != null) + { + var inviterId = inviterIdModel.OldValue.ToObject(discord.ApiClient.Serializer); + var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); + inviter = RestUser.Create(discord, inviterInfo); + } return new InviteDeleteAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses); } @@ -70,10 +74,10 @@ namespace Discord.Rest /// public bool Temporary { get; } /// - /// Gets the user that created this invite. + /// Gets the user that created this invite if available. /// /// - /// A user that created this invite. + /// A user that created this invite or . /// public IUser Creator { get; } /// From df8a0f7cd658d99f04964051ae81bfa0797c4447 Mon Sep 17 00:00:00 2001 From: Bram <35614609+BramEsendam@users.noreply.github.com> Date: Fri, 4 Sep 2020 18:56:05 +0200 Subject: [PATCH 08/76] Fix: Not using the new domain name. (#1571) * Fix: Using the correct discord domain. * Fix: Using the correct discord domain. * Docs: Using the correct discord domain. * Fix: Changed canary and ptb to the new domain. --- README.md | 2 +- .../Common/EmbedObjectBuilder.Inclusion.md | 6 +++--- docs/faq/basics/client-basics.md | 2 +- docs/faq/misc/glossary.md | 4 ++-- docs/guides/getting_started/first-bot.md | 10 +++++----- docs/index.md | 4 ++-- samples/04_webhook_client/Program.cs | 8 ++++---- src/Discord.Net.Core/DiscordConfig.cs | 4 ++-- src/Discord.Net.Core/Extensions/MessageExtensions.cs | 2 +- src/Discord.Net.Core/Net/HttpException.cs | 4 ++-- src/Discord.Net.Core/Net/WebSocketClosedException.cs | 2 +- src/Discord.Net.WebSocket/DiscordSocketConfig.cs | 2 +- test/Discord.Net.Tests.Unit/TokenUtilsTests.cs | 2 +- test/Discord.Net.Tests/Tests.DiscordWebhookClient.cs | 12 ++++++------ 14 files changed, 32 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index f4bc5811e..1d9235331 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![NuGet](https://img.shields.io/nuget/vpre/Discord.Net.svg?maxAge=2592000?style=plastic)](https://www.nuget.org/packages/Discord.Net) [![MyGet](https://img.shields.io/myget/discord-net/vpre/Discord.Net.svg)](https://www.myget.org/feed/Packages/discord-net) [![Build Status](https://dev.azure.com/discord-net/Discord.Net/_apis/build/status/discord-net.Discord.Net?branchName=dev)](https://dev.azure.com/discord-net/Discord.Net/_build/latest?definitionId=1&branchName=dev) -[![Discord](https://discordapp.com/api/guilds/81384788765712384/widget.png)](https://discord.gg/jkrBmQR) +[![Discord](https://discord.com/api/guilds/81384788765712384/widget.png)](https://discord.gg/jkrBmQR) An unofficial .NET API Wrapper for the Discord client (http://discordapp.com). diff --git a/docs/_overwrites/Common/EmbedObjectBuilder.Inclusion.md b/docs/_overwrites/Common/EmbedObjectBuilder.Inclusion.md index eac0d9ca5..a9d3539ed 100644 --- a/docs/_overwrites/Common/EmbedObjectBuilder.Inclusion.md +++ b/docs/_overwrites/Common/EmbedObjectBuilder.Inclusion.md @@ -4,10 +4,10 @@ field, and 2 normal fields using an @Discord.EmbedBuilder: ```cs var exampleAuthor = new EmbedAuthorBuilder() .WithName("I am a bot") - .WithIconUrl("https://discordapp.com/assets/e05ead6e6ebc08df9291738d0aa6986d.png"); + .WithIconUrl("https://discord.com/assets/e05ead6e6ebc08df9291738d0aa6986d.png"); var exampleFooter = new EmbedFooterBuilder() .WithText("I am a nice footer") - .WithIconUrl("https://discordapp.com/assets/28174a34e77bb5e5310ced9f95cb480b.png"); + .WithIconUrl("https://discord.com/assets/28174a34e77bb5e5310ced9f95cb480b.png"); var exampleField = new EmbedFieldBuilder() .WithName("Title of Another Field") .WithValue("I am an [example](https://example.com).") @@ -22,4 +22,4 @@ var embed = new EmbedBuilder() .WithAuthor(exampleAuthor) .WithFooter(exampleFooter) .Build(); -``` \ No newline at end of file +``` diff --git a/docs/faq/basics/client-basics.md b/docs/faq/basics/client-basics.md index 9377ac2e9..1176ee3fd 100644 --- a/docs/faq/basics/client-basics.md +++ b/docs/faq/basics/client-basics.md @@ -30,7 +30,7 @@ There are few possible reasons why this may occur. [TokenType]: xref:Discord.TokenType [827]: https://github.com/RogueException/Discord.Net/issues/827 [958]: https://github.com/RogueException/Discord.Net/issues/958 -[Discord API Terms of Service]: https://discordapp.com/developers/docs/legal +[Discord API Terms of Service]: https://discord.com/developers/docs/legal ## How do I do X, Y, Z when my bot connects/logs on? Why do I get a `NullReferenceException` upon calling any client methods after connect? diff --git a/docs/faq/misc/glossary.md b/docs/faq/misc/glossary.md index 95bdbaa03..4b661f65c 100644 --- a/docs/faq/misc/glossary.md +++ b/docs/faq/misc/glossary.md @@ -19,7 +19,7 @@ channels, and are often referred to as "servers". * A **Channel** ([IChannel]) represents a generic channel. - Example: #dotnet_discord-net - See [Channel Types](#channel-types) - + [IGuild]: xref:Discord.IGuild [IChannel]: xref:Discord.IChannel @@ -79,4 +79,4 @@ activity for listening to a song on Spotify. [RichGame]: xref:Discord.RichGame [StreamingGame]: xref:Discord.StreamingGame [SpotifyGame]: xref:Discord.SpotifyGame -[Rich Presence Intro]: https://discordapp.com/developers/docs/rich-presence/best-practices \ No newline at end of file +[Rich Presence Intro]: https://discord.com/developers/docs/rich-presence/best-practices diff --git a/docs/guides/getting_started/first-bot.md b/docs/guides/getting_started/first-bot.md index bdae80c7f..150466be1 100644 --- a/docs/guides/getting_started/first-bot.md +++ b/docs/guides/getting_started/first-bot.md @@ -31,7 +31,7 @@ the Discord Applications Portal first. ![Step 7](images/intro-public-bot.png) -[Discord Applications Portal]: https://discordapp.com/developers/applications/ +[Discord Applications Portal]: https://discord.com/developers/applications/ ## Adding your bot to a server @@ -165,11 +165,11 @@ or any other blocking method, such as reading from the console. > the source code for your bot. > > In the following example, we retrieve the token from a pre-defined -> variable, which is **NOT** secure, especially if you plan on +> variable, which is **NOT** secure, especially if you plan on > distributing the application in any shape or form. > -> We recommend alternative storage such as -> [Environment Variables], an external configuration file, or a +> We recommend alternative storage such as +> [Environment Variables], an external configuration file, or a > secrets manager for safe-handling of secrets. > > [Environment Variables]: https://en.wikipedia.org/wiki/Environment_variable @@ -221,4 +221,4 @@ should be to separate... 2. the modules (handle commands) 3. the services (persistent storage, pure functions, data manipulation) -[CommandService]: xref:Discord.Commands.CommandService \ No newline at end of file +[CommandService]: xref:Discord.Commands.CommandService diff --git a/docs/index.md b/docs/index.md index 34350df70..1d0f5aaf7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -11,12 +11,12 @@ title: Home [![NuGet](https://img.shields.io/nuget/vpre/Discord.Net.svg?maxAge=2592000?style=plastic)](https://www.nuget.org/packages/Discord.Net) [![MyGet](https://img.shields.io/myget/discord-net/vpre/Discord.Net.svg)](https://www.myget.org/feed/Packages/discord-net) [![Build Status](https://dev.azure.com/discord-net/Discord.Net/_apis/build/status/discord-net.Discord.Net?branchName=dev)](https://dev.azure.com/discord-net/Discord.Net/_build/latest?definitionId=1&branchName=dev) -[![Discord](https://discordapp.com/api/guilds/81384788765712384/widget.png)](https://discord.gg/jkrBmQR) +[![Discord](https://discord.com/api/guilds/81384788765712384/widget.png)](https://discord.gg/jkrBmQR) ## What is Discord.Net? Discord.Net is an asynchronous, multi-platform .NET Library used to -interface with the [Discord API](https://discordapp.com/). +interface with the [Discord API](https://discord.com/). ## Where to begin? diff --git a/samples/04_webhook_client/Program.cs b/samples/04_webhook_client/Program.cs index c2e5faa03..f3a50036c 100644 --- a/samples/04_webhook_client/Program.cs +++ b/samples/04_webhook_client/Program.cs @@ -14,10 +14,10 @@ namespace _04_webhook_client public async Task MainAsync() { - // The webhook url follows the format https://discordapp.com/api/webhooks/{id}/{token} + // The webhook url follows the format https://discord.com/api/webhooks/{id}/{token} // Because anyone with the webhook URL can use your webhook - // you should NOT hard code the URL or ID + token into your application. - using (var client = new DiscordWebhookClient("https://discordapp.com/api/webhooks/123/abc123")) + // you should NOT hard code the URL or ID + token into your application. + using (var client = new DiscordWebhookClient("https://discord.com/api/webhooks/123/abc123")) { var embed = new EmbedBuilder { @@ -26,7 +26,7 @@ namespace _04_webhook_client }; // Webhooks are able to send multiple embeds per message - // As such, your embeds must be passed as a collection. + // As such, your embeds must be passed as a collection. await client.SendMessageAsync(text: "Send a message to this webhook!", embeds: new[] { embed.Build() }); } } diff --git a/src/Discord.Net.Core/DiscordConfig.cs b/src/Discord.Net.Core/DiscordConfig.cs index 51970a781..429ad7b0c 100644 --- a/src/Discord.Net.Core/DiscordConfig.cs +++ b/src/Discord.Net.Core/DiscordConfig.cs @@ -13,7 +13,7 @@ namespace Discord /// /// An representing the API version that Discord.Net uses to communicate with Discord. /// A list of available API version can be seen on the official - /// Discord API documentation + /// Discord API documentation /// . /// public const int APIVersion = 6; @@ -50,7 +50,7 @@ namespace Discord /// /// The Discord API URL using . /// - public static readonly string APIUrl = $"https://discordapp.com/api/v{APIVersion}/"; + public static readonly string APIUrl = $"https://discord.com/api/v{APIVersion}/"; /// /// Returns the base Discord CDN URL. /// diff --git a/src/Discord.Net.Core/Extensions/MessageExtensions.cs b/src/Discord.Net.Core/Extensions/MessageExtensions.cs index 64a1d89ab..e44e397fa 100644 --- a/src/Discord.Net.Core/Extensions/MessageExtensions.cs +++ b/src/Discord.Net.Core/Extensions/MessageExtensions.cs @@ -17,7 +17,7 @@ namespace Discord public static string GetJumpUrl(this IMessage msg) { var channel = msg.Channel; - return $"https://discordapp.com/channels/{(channel is IDMChannel ? "@me" : $"{(channel as ITextChannel).GuildId}")}/{channel.Id}/{msg.Id}"; + return $"https://discord.com/channels/{(channel is IDMChannel ? "@me" : $"{(channel as ITextChannel).GuildId}")}/{channel.Id}/{msg.Id}"; } /// diff --git a/src/Discord.Net.Core/Net/HttpException.cs b/src/Discord.Net.Core/Net/HttpException.cs index d36bd66f9..ff9cf91f2 100644 --- a/src/Discord.Net.Core/Net/HttpException.cs +++ b/src/Discord.Net.Core/Net/HttpException.cs @@ -13,7 +13,7 @@ namespace Discord.Net /// /// /// An - /// HTTP status code + /// HTTP status code /// from Discord. /// public HttpStatusCode HttpCode { get; } @@ -22,7 +22,7 @@ namespace Discord.Net /// /// /// A - /// JSON error code + /// JSON error code /// from Discord, or null if none. /// public int? DiscordCode { get; } diff --git a/src/Discord.Net.Core/Net/WebSocketClosedException.cs b/src/Discord.Net.Core/Net/WebSocketClosedException.cs index 6e2564f6e..c743cd696 100644 --- a/src/Discord.Net.Core/Net/WebSocketClosedException.cs +++ b/src/Discord.Net.Core/Net/WebSocketClosedException.cs @@ -11,7 +11,7 @@ namespace Discord.Net /// /// /// A - /// close code + /// close code /// from Discord. /// public int CloseCode { get; } diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index 877ccd875..11e44d8dc 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -87,7 +87,7 @@ namespace Discord.WebSocket /// /// /// For more information, please see - /// Request Guild Members + /// Request Guild Members /// on the official Discord API documentation. /// /// diff --git a/test/Discord.Net.Tests.Unit/TokenUtilsTests.cs b/test/Discord.Net.Tests.Unit/TokenUtilsTests.cs index bbfbfe754..e9526b761 100644 --- a/test/Discord.Net.Tests.Unit/TokenUtilsTests.cs +++ b/test/Discord.Net.Tests.Unit/TokenUtilsTests.cs @@ -83,7 +83,7 @@ namespace Discord public void BotTokenDoesNotThrowExceptions(string token) { // This example token is pulled from the Discord Docs - // https://discordapp.com/developers/docs/reference#authentication-example-bot-token-authorization-header + // https://discord.com/developers/docs/reference#authentication-example-bot-token-authorization-header // should not throw any exception TokenUtils.ValidateToken(TokenType.Bot, token); } diff --git a/test/Discord.Net.Tests/Tests.DiscordWebhookClient.cs b/test/Discord.Net.Tests/Tests.DiscordWebhookClient.cs index 039525afc..52c39005b 100644 --- a/test/Discord.Net.Tests/Tests.DiscordWebhookClient.cs +++ b/test/Discord.Net.Tests/Tests.DiscordWebhookClient.cs @@ -12,18 +12,18 @@ namespace Discord public class DiscordWebhookClientTests { [Theory] - [InlineData("https://discordapp.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", + [InlineData("https://discord.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", 123412347732897802, "_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK")] // ptb, canary, etc will have slightly different urls - [InlineData("https://ptb.discordapp.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", + [InlineData("https://ptb.discord.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", 123412347732897802, "_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK")] - [InlineData("https://canary.discordapp.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", + [InlineData("https://canary.discord.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", 123412347732897802, "_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK")] // don't care about https - [InlineData("http://canary.discordapp.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", + [InlineData("http://canary.discord.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", 123412347732897802, "_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK")] // this is the minimum that the regex cares about - [InlineData("discordapp.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", + [InlineData("discord.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK", 123412347732897802, "_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK")] public void TestWebhook_Valid(string webhookurl, ulong expectedId, string expectedToken) { @@ -48,7 +48,7 @@ namespace Discord [Theory] [InlineData("123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK")] // trailing slash - [InlineData("https://discordapp.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK/")] + [InlineData("https://discord.com/api/webhooks/123412347732897802/_abcde123456789-ABCDEFGHIJKLMNOP12345678-abcdefghijklmnopABCDEFGHIJK/")] public void TestWebhook_Invalid(string webhookurl) { Assert.Throws(() => From 366ca9a56273c1eaf5e68a335e2cf969cfa6cbd1 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 14 Oct 2020 19:02:33 -0300 Subject: [PATCH 09/76] fix: Parse mentions from message payload (#1621) --- .../Entities/Messages/IMessage.cs | 7 +++++ .../Entities/Messages/RestMessage.cs | 3 +++ .../Entities/Messages/RestUserMessage.cs | 17 +++++++----- .../Entities/Messages/SocketMessage.cs | 2 ++ .../Entities/Messages/SocketUserMessage.cs | 27 ++++++++++++------- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index 530c1cd82..b74e333c1 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -39,6 +39,13 @@ namespace Discord /// bool IsSuppressed { get; } /// + /// Gets the value that indicates whether this message mentioned everyone. + /// + /// + /// true if this message mentioned everyone; otherwise false. + /// + bool MentionedEveryone { get; } + /// /// Gets the content for this message. /// /// diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs index 809a55e9c..2456e65e7 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs @@ -37,6 +37,9 @@ namespace Discord.Rest public virtual bool IsSuppressed => false; /// public virtual DateTimeOffset? EditedTimestamp => null; + /// + public virtual bool MentionedEveryone => false; + /// /// Gets a collection of the 's on the message. /// diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs index ad2a65615..be955b13d 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs @@ -18,6 +18,8 @@ namespace Discord.Rest private ImmutableArray _attachments = ImmutableArray.Create(); private ImmutableArray _embeds = ImmutableArray.Create(); private ImmutableArray _tags = ImmutableArray.Create(); + private ImmutableArray _roleMentionIds = ImmutableArray.Create(); + private ImmutableArray _userMentions = ImmutableArray.Create(); /// public override bool IsTTS => _isTTS; @@ -28,15 +30,17 @@ namespace Discord.Rest /// public override DateTimeOffset? EditedTimestamp => DateTimeUtils.FromTicks(_editedTimestampTicks); /// + public override bool MentionedEveryone => _isMentioningEveryone; + /// public override IReadOnlyCollection Attachments => _attachments; /// public override IReadOnlyCollection Embeds => _embeds; /// public override IReadOnlyCollection MentionedChannelIds => MessageHelper.FilterTagsByKey(TagType.ChannelMention, _tags); /// - public override IReadOnlyCollection MentionedRoleIds => MessageHelper.FilterTagsByKey(TagType.RoleMention, _tags); + public override IReadOnlyCollection MentionedRoleIds => _roleMentionIds; /// - public override IReadOnlyCollection MentionedUsers => MessageHelper.FilterTagsByValue(TagType.UserMention, _tags); + public override IReadOnlyCollection MentionedUsers => _userMentions; /// public override IReadOnlyCollection Tags => _tags; @@ -67,6 +71,8 @@ namespace Discord.Rest { _isSuppressed = model.Flags.Value.HasFlag(API.MessageFlags.Suppressed); } + if (model.RoleMentions.IsSpecified) + _roleMentionIds = model.RoleMentions.Value.ToImmutableArray(); if (model.Attachments.IsSpecified) { @@ -96,20 +102,19 @@ namespace Discord.Rest _embeds = ImmutableArray.Create(); } - ImmutableArray mentions = ImmutableArray.Create(); if (model.UserMentions.IsSpecified) { var value = model.UserMentions.Value; if (value.Length > 0) { - var newMentions = ImmutableArray.CreateBuilder(value.Length); + var newMentions = ImmutableArray.CreateBuilder(value.Length); for (int i = 0; i < value.Length; i++) { var val = value[i]; if (val.Object != null) newMentions.Add(RestUser.Create(Discord, val.Object)); } - mentions = newMentions.ToImmutable(); + _userMentions = newMentions.ToImmutable(); } } @@ -118,7 +123,7 @@ namespace Discord.Rest var text = model.Content.Value; var guildId = (Channel as IGuildChannel)?.GuildId; var guild = guildId != null ? (Discord as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).Result : null; - _tags = MessageHelper.ParseTags(text, null, guild, mentions); + _tags = MessageHelper.ParseTags(text, null, guild, _userMentions); model.Content = text; } } diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs index f392614ad..614bd044b 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs @@ -46,6 +46,8 @@ namespace Discord.WebSocket public virtual bool IsSuppressed => false; /// public virtual DateTimeOffset? EditedTimestamp => null; + /// + public virtual bool MentionedEveryone => false; /// public MessageActivity Activity { get; private set; } diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index e1f0f74dc..51b0c2043 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -20,7 +20,9 @@ namespace Discord.WebSocket private ImmutableArray _attachments = ImmutableArray.Create(); private ImmutableArray _embeds = ImmutableArray.Create(); private ImmutableArray _tags = ImmutableArray.Create(); - + private ImmutableArray _roleMentions = ImmutableArray.Create(); + private ImmutableArray _userMentions = ImmutableArray.Create(); + /// public override bool IsTTS => _isTTS; /// @@ -30,6 +32,8 @@ namespace Discord.WebSocket /// public override DateTimeOffset? EditedTimestamp => DateTimeUtils.FromTicks(_editedTimestampTicks); /// + public override bool MentionedEveryone => _isMentioningEveryone; + /// public override IReadOnlyCollection Attachments => _attachments; /// public override IReadOnlyCollection Embeds => _embeds; @@ -38,9 +42,9 @@ namespace Discord.WebSocket /// public override IReadOnlyCollection MentionedChannels => MessageHelper.FilterTagsByValue(TagType.ChannelMention, _tags); /// - public override IReadOnlyCollection MentionedRoles => MessageHelper.FilterTagsByValue(TagType.RoleMention, _tags); + public override IReadOnlyCollection MentionedRoles => _roleMentions; /// - public override IReadOnlyCollection MentionedUsers => MessageHelper.FilterTagsByValue(TagType.UserMention, _tags); + public override IReadOnlyCollection MentionedUsers => _userMentions; internal SocketUserMessage(DiscordSocketClient discord, ulong id, ISocketMessageChannel channel, SocketUser author, MessageSource source) : base(discord, id, channel, author, source) @@ -57,6 +61,8 @@ namespace Discord.WebSocket { base.Update(state, model); + SocketGuild guild = (Channel as SocketGuildChannel)?.Guild; + if (model.IsTextToSpeech.IsSpecified) _isTTS = model.IsTextToSpeech.Value; if (model.Pinned.IsSpecified) @@ -69,6 +75,8 @@ namespace Discord.WebSocket { _isSuppressed = model.Flags.Value.HasFlag(API.MessageFlags.Suppressed); } + if (model.RoleMentions.IsSpecified) + _roleMentions = model.RoleMentions.Value.Select(x => guild.GetRole(x)).ToImmutableArray(); if (model.Attachments.IsSpecified) { @@ -98,28 +106,29 @@ namespace Discord.WebSocket _embeds = ImmutableArray.Create(); } - IReadOnlyCollection mentions = ImmutableArray.Create(); //Is passed to ParseTags to get real mention collection if (model.UserMentions.IsSpecified) { var value = model.UserMentions.Value; if (value.Length > 0) { - var newMentions = ImmutableArray.CreateBuilder(value.Length); + var newMentions = ImmutableArray.CreateBuilder(value.Length); for (int i = 0; i < value.Length; i++) { var val = value[i]; - if (val.Object != null) + var guildUser = guild.GetUser(val.Id); + if (guildUser != null) + newMentions.Add(guildUser); + else if (val.Object != null) newMentions.Add(SocketUnknownUser.Create(Discord, state, val.Object)); } - mentions = newMentions.ToImmutable(); + _userMentions = newMentions.ToImmutable(); } } if (model.Content.IsSpecified) { var text = model.Content.Value; - var guild = (Channel as SocketGuildChannel)?.Guild; - _tags = MessageHelper.ParseTags(text, Channel, guild, mentions); + _tags = MessageHelper.ParseTags(text, Channel, guild, _userMentions); model.Content = text; } } From c1d04b4d1ac833e917c266e16bbe6fae769bc230 Mon Sep 17 00:00:00 2001 From: Samuel <33796679+orchidalloy@users.noreply.github.com> Date: Wed, 14 Oct 2020 19:03:13 -0300 Subject: [PATCH 10/76] fix: Handle null PreferredLocale in rare cases (#1624) Sometimes Discord messes up and leaves a guild with a null PreferredLocale, causing an error to be thrown. This fixes that from Discord.Net's end even though it's Discord's fault. --- src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index d2d759bb3..160b91526 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -381,7 +381,7 @@ namespace Discord.WebSocket Description = model.Description; PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); PreferredLocale = model.PreferredLocale; - PreferredCulture = new CultureInfo(PreferredLocale); + PreferredCulture = PreferredLocale == null ? null : new CultureInfo(PreferredLocale); if (model.Emojis != null) { From 3860da002fb796a27522c6d5028f6a05379ebc2f Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 14 Oct 2020 19:04:43 -0300 Subject: [PATCH 11/76] fix: Do not update overwrite cache locally (#1622) --- .../Entities/Channels/SocketGuildChannel.cs | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs index c65f3be05..3cc8496d9 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs @@ -125,7 +125,6 @@ namespace Discord.WebSocket public virtual async Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null) { await ChannelHelper.AddPermissionOverwriteAsync(this, Discord, user, permissions, options).ConfigureAwait(false); - _overwrites = _overwrites.Add(new Overwrite(user.Id, PermissionTarget.User, new OverwritePermissions(permissions.AllowValue, permissions.DenyValue))); } /// @@ -140,7 +139,6 @@ namespace Discord.WebSocket public virtual async Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions, RequestOptions options = null) { await ChannelHelper.AddPermissionOverwriteAsync(this, Discord, role, permissions, options).ConfigureAwait(false); - _overwrites = _overwrites.Add(new Overwrite(role.Id, PermissionTarget.Role, new OverwritePermissions(permissions.AllowValue, permissions.DenyValue))); } /// /// Removes the permission overwrite for the given user, if one exists. @@ -153,15 +151,6 @@ namespace Discord.WebSocket public virtual async Task RemovePermissionOverwriteAsync(IUser user, RequestOptions options = null) { await ChannelHelper.RemovePermissionOverwriteAsync(this, Discord, user, options).ConfigureAwait(false); - - for (int i = 0; i < _overwrites.Length; i++) - { - if (_overwrites[i].TargetId == user.Id) - { - _overwrites = _overwrites.RemoveAt(i); - return; - } - } } /// /// Removes the permission overwrite for the given role, if one exists. @@ -174,15 +163,6 @@ namespace Discord.WebSocket public virtual async Task RemovePermissionOverwriteAsync(IRole role, RequestOptions options = null) { await ChannelHelper.RemovePermissionOverwriteAsync(this, Discord, role, options).ConfigureAwait(false); - - for (int i = 0; i < _overwrites.Length; i++) - { - if (_overwrites[i].TargetId == role.Id) - { - _overwrites = _overwrites.RemoveAt(i); - return; - } - } } public new virtual SocketGuildUser GetUser(ulong id) => null; From 3085e883b73554be22e8f7979ef30173b34b7d9e Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 14 Oct 2020 19:05:35 -0300 Subject: [PATCH 12/76] fix: Invoke UserUpdated from GuildMemberUpdated if needed (#1623) --- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 004c6179c..307c905c7 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -903,6 +903,13 @@ namespace Discord.WebSocket if (user != null) { + var globalBefore = user.GlobalUser.Clone(); + if (user.GlobalUser.Update(State, data.User)) + { + //Global data was updated, trigger UserUpdated + await TimedInvokeAsync(_userUpdatedEvent, nameof(UserUpdated), globalBefore, user).ConfigureAwait(false); + } + var before = user.Clone(); user.Update(State, data); await TimedInvokeAsync(_guildMemberUpdatedEvent, nameof(GuildMemberUpdated), before, user).ConfigureAwait(false); From 4b389f3ecf1f8c3806f852fc27aa22c061afefc1 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 14 Oct 2020 19:05:59 -0300 Subject: [PATCH 13/76] fix: Add missing permissions (#1642) --- .../Permissions/OverwritePermissions.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs b/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs index 04bb2f668..7876d49ff 100644 --- a/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/OverwritePermissions.cs @@ -76,6 +76,10 @@ namespace Discord public PermValue MoveMembers => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.MoveMembers); /// If Allowed, a user may use voice-activity-detection rather than push-to-talk. public PermValue UseVAD => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.UseVAD); + /// If Allowed, a user may use priority speaker in a voice channel. + public PermValue PrioritySpeaker => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.PrioritySpeaker); + /// If Allowed, a user may go live in a voice channel. + public PermValue Stream => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.Stream); /// If Allowed, a user may adjust role permissions. This also implicitly grants all other permissions. public PermValue ManageRoles => Permissions.GetValue(AllowValue, DenyValue, ChannelPermission.ManageRoles); @@ -109,7 +113,9 @@ namespace Discord PermValue? moveMembers = null, PermValue? useVoiceActivation = null, PermValue? manageRoles = null, - PermValue? manageWebhooks = null) + PermValue? manageWebhooks = null, + PermValue? prioritySpeaker = null, + PermValue? stream = null) { Permissions.SetValue(ref allowValue, ref denyValue, createInstantInvite, ChannelPermission.CreateInstantInvite); Permissions.SetValue(ref allowValue, ref denyValue, manageChannel, ChannelPermission.ManageChannels); @@ -129,6 +135,8 @@ namespace Discord Permissions.SetValue(ref allowValue, ref denyValue, deafenMembers, ChannelPermission.DeafenMembers); Permissions.SetValue(ref allowValue, ref denyValue, moveMembers, ChannelPermission.MoveMembers); Permissions.SetValue(ref allowValue, ref denyValue, useVoiceActivation, ChannelPermission.UseVAD); + Permissions.SetValue(ref allowValue, ref denyValue, prioritySpeaker, ChannelPermission.PrioritySpeaker); + Permissions.SetValue(ref allowValue, ref denyValue, stream, ChannelPermission.Stream); Permissions.SetValue(ref allowValue, ref denyValue, manageRoles, ChannelPermission.ManageRoles); Permissions.SetValue(ref allowValue, ref denyValue, manageWebhooks, ChannelPermission.ManageWebhooks); @@ -159,10 +167,12 @@ namespace Discord PermValue moveMembers = PermValue.Inherit, PermValue useVoiceActivation = PermValue.Inherit, PermValue manageRoles = PermValue.Inherit, - PermValue manageWebhooks = PermValue.Inherit) + PermValue manageWebhooks = PermValue.Inherit, + PermValue prioritySpeaker = PermValue.Inherit, + PermValue stream = PermValue.Inherit) : this(0, 0, createInstantInvite, manageChannel, addReactions, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, - moveMembers, useVoiceActivation, manageRoles, manageWebhooks) { } + moveMembers, useVoiceActivation, manageRoles, manageWebhooks, prioritySpeaker, stream) { } /// /// Initializes a new from the current one, changing the provided @@ -188,10 +198,12 @@ namespace Discord PermValue? moveMembers = null, PermValue? useVoiceActivation = null, PermValue? manageRoles = null, - PermValue? manageWebhooks = null) + PermValue? manageWebhooks = null, + PermValue? prioritySpeaker = null, + PermValue? stream = null) => new OverwritePermissions(AllowValue, DenyValue, createInstantInvite, manageChannel, addReactions, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, - moveMembers, useVoiceActivation, manageRoles, manageWebhooks); + moveMembers, useVoiceActivation, manageRoles, manageWebhooks, prioritySpeaker, stream); /// /// Creates a of all the values that are allowed. From fa5ef5e1c6028fb6c9711f32bd4b09c3a4599c27 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 14 Oct 2020 19:20:30 -0300 Subject: [PATCH 14/76] fix: handicap member downloading for verified bots (#1647) --- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 307c905c7..0263f96d1 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -370,7 +370,7 @@ namespace Discord.WebSocket { var cachedGuilds = guilds.ToImmutableArray(); - const short batchSize = 100; //TODO: Gateway Intents will limit to a maximum of 1 guild_id + int batchSize = _gatewayIntents.HasValue ? 1 : 100; ulong[] batchIds = new ulong[Math.Min(batchSize, cachedGuilds.Length)]; Task[] batchTasks = new Task[batchIds.Length]; int batchCount = (cachedGuilds.Length + (batchSize - 1)) / batchSize; From e3925a77a3ee6553e3fecababf32b01aab7d7fb8 Mon Sep 17 00:00:00 2001 From: mathewsjwh <64035585+mathewsjwh@users.noreply.github.com> Date: Wed, 14 Oct 2020 18:21:42 -0400 Subject: [PATCH 15/76] feature: Added CultureInvariant RegexOption to WebhookUrlRegex (#1637) Co-authored-by: Jake Mathews --- src/Discord.Net.Webhook/DiscordWebhookClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Webhook/DiscordWebhookClient.cs b/src/Discord.Net.Webhook/DiscordWebhookClient.cs index 3ad100148..0af37be4d 100644 --- a/src/Discord.Net.Webhook/DiscordWebhookClient.cs +++ b/src/Discord.Net.Webhook/DiscordWebhookClient.cs @@ -33,7 +33,7 @@ namespace Discord.Webhook : this(webhookUrl, new DiscordRestConfig()) { } // regex pattern to match webhook urls - private static Regex WebhookUrlRegex = new Regex(@"^.*(discord|discordapp)\.com\/api\/webhooks\/([\d]+)\/([a-z0-9_-]+)$", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static Regex WebhookUrlRegex = new Regex(@"^.*(discord|discordapp)\.com\/api\/webhooks\/([\d]+)\/([a-z0-9_-]+)$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); /// Creates a new Webhook Discord client. public DiscordWebhookClient(ulong webhookId, string webhookToken, DiscordRestConfig config) From f396cd9b928aa3a3ff7725b76551178b6bb80052 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 14 Oct 2020 19:23:00 -0300 Subject: [PATCH 16/76] fix: Cancel reconnection when 4014 (#1603) * Cancel reconnection when 4014 * Missed an else --- src/Discord.Net.WebSocket/ConnectionManager.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Discord.Net.WebSocket/ConnectionManager.cs b/src/Discord.Net.WebSocket/ConnectionManager.cs index e009674e7..2237e2d1f 100644 --- a/src/Discord.Net.WebSocket/ConnectionManager.cs +++ b/src/Discord.Net.WebSocket/ConnectionManager.cs @@ -44,6 +44,8 @@ namespace Discord var ex2 = ex as WebSocketClosedException; if (ex2?.CloseCode == 4006) CriticalError(new Exception("WebSocket session expired", ex)); + else if (ex2?.CloseCode == 4014) + CriticalError(new Exception("WebSocket connection was closed", ex)); else Error(new Exception("WebSocket connection was closed", ex)); } From 03b831e691fba79191347838fec9952916271fbc Mon Sep 17 00:00:00 2001 From: Alex Howe Date: Wed, 28 Oct 2020 19:26:48 +0000 Subject: [PATCH 17/76] fix: Update README.MD to reflect new discord domain (#1652) The first link does not point to the correct discord domain, it seems the commit that should have fixed this missed this link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d9235331..9ace4f22e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build Status](https://dev.azure.com/discord-net/Discord.Net/_apis/build/status/discord-net.Discord.Net?branchName=dev)](https://dev.azure.com/discord-net/Discord.Net/_build/latest?definitionId=1&branchName=dev) [![Discord](https://discord.com/api/guilds/81384788765712384/widget.png)](https://discord.gg/jkrBmQR) -An unofficial .NET API Wrapper for the Discord client (http://discordapp.com). +An unofficial .NET API Wrapper for the Discord client (https://discord.com). Check out the [documentation](https://discord.foxbot.me/) or join the [Discord API Chat](https://discord.gg/jkrBmQR). From 43c8fc0535c2b6045b98c361428e7e663653f700 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 28 Oct 2020 17:51:16 -0300 Subject: [PATCH 18/76] fix: Voice overwrites and CategoryId remarks (#1608) * Add overwrites to voice and change CategoryId docs * Let's not forget another one --- .../Channels/GuildChannelProperties.cs | 2 +- .../Entities/Channels/ChannelHelper.cs | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs index 93ca2e59a..339d6fffd 100644 --- a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs +++ b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs @@ -28,7 +28,7 @@ namespace Discord /// /// /// Setting this value to a category's snowflake identifier will change or set this channel's parent to the - /// specified channel; setting this value to 0 will detach this channel from its parent if one + /// specified channel; setting this value to will detach this channel from its parent if one /// is set. /// public Optional CategoryId { get; set; } diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs index 09507f1d7..6494f7fb7 100644 --- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs +++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs @@ -28,7 +28,16 @@ namespace Discord.Rest { Name = args.Name, Position = args.Position, - CategoryId = args.CategoryId + CategoryId = args.CategoryId, + Overwrites = args.PermissionOverwrites.IsSpecified + ? args.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite + { + TargetId = overwrite.TargetId, + TargetType = overwrite.TargetType, + Allow = overwrite.Permissions.AllowValue, + Deny = overwrite.Permissions.DenyValue + }).ToArray() + : Optional.Create(), }; return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); } @@ -70,7 +79,16 @@ namespace Discord.Rest Name = args.Name, Position = args.Position, CategoryId = args.CategoryId, - UserLimit = args.UserLimit.IsSpecified ? (args.UserLimit.Value ?? 0) : Optional.Create() + UserLimit = args.UserLimit.IsSpecified ? (args.UserLimit.Value ?? 0) : Optional.Create(), + Overwrites = args.PermissionOverwrites.IsSpecified + ? args.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite + { + TargetId = overwrite.TargetId, + TargetType = overwrite.TargetType, + Allow = overwrite.Permissions.AllowValue, + Deny = overwrite.Permissions.DenyValue + }).ToArray() + : Optional.Create(), }; return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); } From bd4516b035868aba49d1618fe2d8a52c046a5b80 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 28 Oct 2020 17:52:06 -0300 Subject: [PATCH 19/76] (ifcbrk) fix: Add AllowedMentions to webhooks (#1602) --- .../API/Rest/CreateWebhookMessageParams.cs | 4 +++- .../API/Rest/UploadWebhookFileParams.cs | 3 +++ src/Discord.Net.Webhook/DiscordWebhookClient.cs | 14 ++++++++------ src/Discord.Net.Webhook/WebhookClientHelper.cs | 12 ++++++++---- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Discord.Net.Rest/API/Rest/CreateWebhookMessageParams.cs b/src/Discord.Net.Rest/API/Rest/CreateWebhookMessageParams.cs index 970a30201..0a4f80a3c 100644 --- a/src/Discord.Net.Rest/API/Rest/CreateWebhookMessageParams.cs +++ b/src/Discord.Net.Rest/API/Rest/CreateWebhookMessageParams.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API.Rest @@ -19,6 +19,8 @@ namespace Discord.API.Rest public Optional Username { get; set; } [JsonProperty("avatar_url")] public Optional AvatarUrl { get; set; } + [JsonProperty("allowed_mentions")] + public Optional AllowedMentions { get; set; } public CreateWebhookMessageParams(string content) { diff --git a/src/Discord.Net.Rest/API/Rest/UploadWebhookFileParams.cs b/src/Discord.Net.Rest/API/Rest/UploadWebhookFileParams.cs index 26153c21b..8da7681ae 100644 --- a/src/Discord.Net.Rest/API/Rest/UploadWebhookFileParams.cs +++ b/src/Discord.Net.Rest/API/Rest/UploadWebhookFileParams.cs @@ -21,6 +21,7 @@ namespace Discord.API.Rest public Optional Username { get; set; } public Optional AvatarUrl { get; set; } public Optional Embeds { get; set; } + public Optional AllowedMentions { get; set; } public bool IsSpoiler { get; set; } = false; @@ -51,6 +52,8 @@ namespace Discord.API.Rest payload["avatar_url"] = AvatarUrl.Value; if (Embeds.IsSpecified) payload["embeds"] = Embeds.Value; + if (AllowedMentions.IsSpecified) + payload["allowed_mentions"] = AllowedMentions.Value; var json = new StringBuilder(); using (var text = new StringWriter(json)) diff --git a/src/Discord.Net.Webhook/DiscordWebhookClient.cs b/src/Discord.Net.Webhook/DiscordWebhookClient.cs index 0af37be4d..9c9bfe958 100644 --- a/src/Discord.Net.Webhook/DiscordWebhookClient.cs +++ b/src/Discord.Net.Webhook/DiscordWebhookClient.cs @@ -88,19 +88,21 @@ namespace Discord.Webhook /// Sends a message to the channel for this webhook. /// Returns the ID of the created message. public Task SendMessageAsync(string text = null, bool isTTS = false, IEnumerable embeds = null, - string username = null, string avatarUrl = null, RequestOptions options = null) - => WebhookClientHelper.SendMessageAsync(this, text, isTTS, embeds, username, avatarUrl, options); + string username = null, string avatarUrl = null, RequestOptions options = null, AllowedMentions allowedMentions = null) + => WebhookClientHelper.SendMessageAsync(this, text, isTTS, embeds, username, avatarUrl, allowedMentions, options); /// Sends a message to the channel for this webhook with an attachment. /// Returns the ID of the created message. public Task SendFileAsync(string filePath, string text, bool isTTS = false, - IEnumerable embeds = null, string username = null, string avatarUrl = null, RequestOptions options = null, bool isSpoiler = false) - => WebhookClientHelper.SendFileAsync(this, filePath, text, isTTS, embeds, username, avatarUrl, options, isSpoiler); + IEnumerable embeds = null, string username = null, string avatarUrl = null, + RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + => WebhookClientHelper.SendFileAsync(this, filePath, text, isTTS, embeds, username, avatarUrl, allowedMentions, options, isSpoiler); /// Sends a message to the channel for this webhook with an attachment. /// Returns the ID of the created message. public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, - IEnumerable embeds = null, string username = null, string avatarUrl = null, RequestOptions options = null, bool isSpoiler = false) - => WebhookClientHelper.SendFileAsync(this, stream, filename, text, isTTS, embeds, username, avatarUrl, options, isSpoiler); + IEnumerable embeds = null, string username = null, string avatarUrl = null, + RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + => WebhookClientHelper.SendFileAsync(this, stream, filename, text, isTTS, embeds, username, avatarUrl, allowedMentions, options, isSpoiler); /// Modifies the properties of this webhook. public Task ModifyWebhookAsync(Action func, RequestOptions options = null) diff --git a/src/Discord.Net.Webhook/WebhookClientHelper.cs b/src/Discord.Net.Webhook/WebhookClientHelper.cs index 311d58bda..4bc2eaca9 100644 --- a/src/Discord.Net.Webhook/WebhookClientHelper.cs +++ b/src/Discord.Net.Webhook/WebhookClientHelper.cs @@ -21,7 +21,7 @@ namespace Discord.Webhook return RestInternalWebhook.Create(client, model); } public static async Task SendMessageAsync(DiscordWebhookClient client, - string text, bool isTTS, IEnumerable embeds, string username, string avatarUrl, RequestOptions options) + string text, bool isTTS, IEnumerable embeds, string username, string avatarUrl, AllowedMentions allowedMentions, RequestOptions options) { var args = new CreateWebhookMessageParams(text) { IsTTS = isTTS }; if (embeds != null) @@ -30,19 +30,21 @@ namespace Discord.Webhook args.Username = username; if (avatarUrl != null) args.AvatarUrl = avatarUrl; + if (allowedMentions != null) + args.AllowedMentions = allowedMentions.ToModel(); var model = await client.ApiClient.CreateWebhookMessageAsync(client.Webhook.Id, args, options: options).ConfigureAwait(false); return model.Id; } public static async Task SendFileAsync(DiscordWebhookClient client, string filePath, string text, bool isTTS, - IEnumerable embeds, string username, string avatarUrl, RequestOptions options, bool isSpoiler) + IEnumerable embeds, string username, string avatarUrl, AllowedMentions allowedMentions, RequestOptions options, bool isSpoiler) { string filename = Path.GetFileName(filePath); using (var file = File.OpenRead(filePath)) - return await SendFileAsync(client, file, filename, text, isTTS, embeds, username, avatarUrl, options, isSpoiler).ConfigureAwait(false); + return await SendFileAsync(client, file, filename, text, isTTS, embeds, username, avatarUrl, allowedMentions, options, isSpoiler).ConfigureAwait(false); } public static async Task SendFileAsync(DiscordWebhookClient client, Stream stream, string filename, string text, bool isTTS, - IEnumerable embeds, string username, string avatarUrl, RequestOptions options, bool isSpoiler) + IEnumerable embeds, string username, string avatarUrl, AllowedMentions allowedMentions, RequestOptions options, bool isSpoiler) { var args = new UploadWebhookFileParams(stream) { Filename = filename, Content = text, IsTTS = isTTS, IsSpoiler = isSpoiler }; if (username != null) @@ -51,6 +53,8 @@ namespace Discord.Webhook args.AvatarUrl = avatarUrl; if (embeds != null) args.Embeds = embeds.Select(x => x.ToModel()).ToArray(); + if(allowedMentions != null) + args.AllowedMentions = allowedMentions.ToModel(); var msg = await client.ApiClient.UploadWebhookFileAsync(client.Webhook.Id, args, options).ConfigureAwait(false); return msg.Id; } From ae9fff6380847132ad9357c71f34afa90b0927db Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 28 Oct 2020 18:03:08 -0300 Subject: [PATCH 20/76] fix: Check error 404 and return null for GetBanAsync (#1614) --- src/Discord.Net.Rest/DiscordRestApiClient.cs | 8 ++++++-- src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index 76c7bf1b4..83aa6c751 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -874,8 +874,12 @@ namespace Discord.API Preconditions.NotEqual(guildId, 0, nameof(guildId)); options = RequestOptions.CreateOrClone(options); - var ids = new BucketIds(guildId: guildId); - return await SendAsync("GET", () => $"guilds/{guildId}/bans/{userId}", ids, options: options).ConfigureAwait(false); + try + { + var ids = new BucketIds(guildId: guildId); + return await SendAsync("GET", () => $"guilds/{guildId}/bans/{userId}", ids, options: options).ConfigureAwait(false); + } + catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.NotFound) { return null; } } /// /// and must not be equal to zero. diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs index ccc02466e..ecb45fd07 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs @@ -132,7 +132,7 @@ namespace Discord.Rest public static async Task GetBanAsync(IGuild guild, BaseDiscordClient client, ulong userId, RequestOptions options) { var model = await client.ApiClient.GetGuildBanAsync(guild.Id, userId, options).ConfigureAwait(false); - return RestBan.Create(client, model); + return model == null ? null : RestBan.Create(client, model); } public static async Task AddBanAsync(IGuild guild, BaseDiscordClient client, From 084db253f32269e364c7106898f2c1b34a8727ff Mon Sep 17 00:00:00 2001 From: Paulo Date: Fri, 6 Nov 2020 11:30:42 -0300 Subject: [PATCH 21/76] fix: limit request members batch size Discord is actually enforcing v8 limits on v6 according to https://github.com/discord/discord-api-docs/issues/2184 --- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 0263f96d1..24ed8d5ff 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -370,7 +370,7 @@ namespace Discord.WebSocket { var cachedGuilds = guilds.ToImmutableArray(); - int batchSize = _gatewayIntents.HasValue ? 1 : 100; + const short batchSize = 1; ulong[] batchIds = new ulong[Math.Min(batchSize, cachedGuilds.Length)]; Task[] batchTasks = new Task[batchIds.Length]; int batchCount = (cachedGuilds.Length + (batchSize - 1)) / batchSize; From e40ca4a422a55f96235c4f567daebbdb6ac483bc Mon Sep 17 00:00:00 2001 From: Samuel <33796679+orchidalloy@users.noreply.github.com> Date: Sat, 7 Nov 2020 15:26:33 -0300 Subject: [PATCH 22/76] fix: Missing AddReactions permission for DM channels. (#1244) Co-authored-by: Samuel <33796679+Samrux@users.noreply.github.com> --- src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs index 99885b070..ed675b5f3 100644 --- a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs @@ -17,7 +17,7 @@ namespace Discord /// Gets a that grants all permissions for category channels. public static readonly ChannelPermissions Category = new ChannelPermissions(0b01100_1111110_1111111110001_010001); /// Gets a that grants all permissions for direct message channels. - public static readonly ChannelPermissions DM = new ChannelPermissions(0b00000_1000110_1011100110000_000000); + public static readonly ChannelPermissions DM = new ChannelPermissions(0b00000_1000110_1011100110001_000000); /// Gets a that grants all permissions for group channels. public static readonly ChannelPermissions Group = new ChannelPermissions(0b00000_1000110_0001101100000_000000); /// Gets a that grants all permissions for a given channel type. From 971d519e35a1d635d1d0634b3bfdbc9b75ceec0b Mon Sep 17 00:00:00 2001 From: Matt Smith Date: Sat, 7 Nov 2020 12:44:33 -0600 Subject: [PATCH 23/76] fix: GuildEmbed.ChannelId as nullable per API documentation (#1532) --- src/Discord.Net.Rest/API/Common/GuildEmbed.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Rest/API/Common/GuildEmbed.cs b/src/Discord.Net.Rest/API/Common/GuildEmbed.cs index ff8b8e180..d81632181 100644 --- a/src/Discord.Net.Rest/API/Common/GuildEmbed.cs +++ b/src/Discord.Net.Rest/API/Common/GuildEmbed.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API @@ -8,6 +8,6 @@ namespace Discord.API [JsonProperty("enabled")] public bool Enabled { get; set; } [JsonProperty("channel_id")] - public ulong ChannelId { get; set; } + public ulong? ChannelId { get; set; } } } From a80e5ff940111f2094dd997b92d134b1584a8fd8 Mon Sep 17 00:00:00 2001 From: Radka Gustavsson Date: Sat, 7 Nov 2020 19:55:14 +0100 Subject: [PATCH 24/76] (ifcbrk) feature: Add includeRoleIds to PruneUsersAsync (#1581) * Implemented include_roles for guilds/id/prune get&post * Unnecessary using Co-authored-by: Paulo --- src/Discord.Net.Core/Entities/Guilds/IGuild.cs | 3 ++- src/Discord.Net.Rest/API/Rest/GuildPruneParams.cs | 6 +++++- src/Discord.Net.Rest/DiscordRestApiClient.cs | 3 ++- src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs | 10 +++++----- src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs | 6 +++--- .../Entities/Guilds/SocketGuild.cs | 4 ++-- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs index 81b5e8dd9..8392bcd58 100644 --- a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs +++ b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs @@ -705,11 +705,12 @@ namespace Discord /// The number of days required for the users to be kicked. /// Whether this prune action is a simulation. /// The options to be used when sending the request. + /// An array of role IDs to be included in the prune of users who do not have any additional roles. /// /// A task that represents the asynchronous prune operation. The task result contains the number of users to /// be or has been removed from this guild. /// - Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null); + Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null, IEnumerable includeRoleIds = null); /// /// Gets a collection of users in this guild that the name or nickname starts with the /// provided at . diff --git a/src/Discord.Net.Rest/API/Rest/GuildPruneParams.cs b/src/Discord.Net.Rest/API/Rest/GuildPruneParams.cs index 6a98d3758..e4c9192ad 100644 --- a/src/Discord.Net.Rest/API/Rest/GuildPruneParams.cs +++ b/src/Discord.Net.Rest/API/Rest/GuildPruneParams.cs @@ -9,9 +9,13 @@ namespace Discord.API.Rest [JsonProperty("days")] public int Days { get; } - public GuildPruneParams(int days) + [JsonProperty("include_roles")] + public ulong[] IncludeRoleIds { get; } + + public GuildPruneParams(int days, ulong[] includeRoleIds) { Days = days; + IncludeRoleIds = includeRoleIds; } } } diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index 83aa6c751..27658e7ac 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -853,10 +853,11 @@ namespace Discord.API Preconditions.NotEqual(guildId, 0, nameof(guildId)); Preconditions.NotNull(args, nameof(args)); Preconditions.AtLeast(args.Days, 1, nameof(args.Days)); + string endpointRoleIds = args.IncludeRoleIds?.Length > 0 ? $"&include_roles={string.Join(",", args.IncludeRoleIds)}" : ""; options = RequestOptions.CreateOrClone(options); var ids = new BucketIds(guildId: guildId); - return await SendAsync("GET", () => $"guilds/{guildId}/prune?days={args.Days}", ids, options: options).ConfigureAwait(false); + return await SendAsync("GET", () => $"guilds/{guildId}/prune?days={args.Days}{endpointRoleIds}", ids, options: options).ConfigureAwait(false); } //Guild Bans diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs index ecb45fd07..225c53edf 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs @@ -404,9 +404,9 @@ namespace Discord.Rest ); } public static async Task PruneUsersAsync(IGuild guild, BaseDiscordClient client, - int days, bool simulate, RequestOptions options) + int days, bool simulate, RequestOptions options, IEnumerable includeRoleIds) { - var args = new GuildPruneParams(days); + var args = new GuildPruneParams(days, includeRoleIds?.ToArray()); GetGuildPruneCountResponse model; if (simulate) model = await client.ApiClient.GetGuildPruneCountAsync(guild.Id, args, options).ConfigureAwait(false); @@ -479,7 +479,7 @@ namespace Discord.Rest var emote = await client.ApiClient.GetGuildEmoteAsync(guild.Id, id, options).ConfigureAwait(false); return emote.ToEntity(); } - public static async Task CreateEmoteAsync(IGuild guild, BaseDiscordClient client, string name, Image image, Optional> roles, + public static async Task CreateEmoteAsync(IGuild guild, BaseDiscordClient client, string name, Image image, Optional> roles, RequestOptions options) { var apiargs = new CreateGuildEmoteParams @@ -494,7 +494,7 @@ namespace Discord.Rest return emote.ToEntity(); } /// is null. - public static async Task ModifyEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, Action func, + public static async Task ModifyEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, Action func, RequestOptions options) { if (func == null) throw new ArgumentNullException(paramName: nameof(func)); @@ -512,7 +512,7 @@ namespace Discord.Rest var emote = await client.ApiClient.ModifyGuildEmoteAsync(guild.Id, id, apiargs, options).ConfigureAwait(false); return emote.ToEntity(); } - public static Task DeleteEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, RequestOptions options) + public static Task DeleteEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, RequestOptions options) => client.ApiClient.DeleteGuildEmoteAsync(guild.Id, id, options); } } diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs index f0b5be0f7..482eaf556 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs @@ -205,7 +205,7 @@ namespace Discord.Rest role?.Update(model); } } - + /// public Task LeaveAsync(RequestOptions options = null) => GuildHelper.LeaveAsync(this, Discord, options); @@ -631,8 +631,8 @@ namespace Discord.Rest /// A task that represents the asynchronous prune operation. The task result contains the number of users to /// be or has been removed from this guild. /// - public Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null) - => GuildHelper.PruneUsersAsync(this, Discord, days, simulate, options); + public Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null, IEnumerable includeRoleIds = null) + => GuildHelper.PruneUsersAsync(this, Discord, days, simulate, options, includeRoleIds); /// /// Gets a collection of users in this guild that the name or nickname starts with the diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index 160b91526..a08ba06ef 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -746,8 +746,8 @@ namespace Discord.WebSocket return null; } /// - public Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null) - => GuildHelper.PruneUsersAsync(this, Discord, days, simulate, options); + public Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null, IEnumerable includeRoleIds = null) + => GuildHelper.PruneUsersAsync(this, Discord, days, simulate, options, includeRoleIds); internal SocketGuildUser AddOrUpdateUser(UserModel model) { From 2592264acbbd49f7f1e481a82277d10a5bdea414 Mon Sep 17 00:00:00 2001 From: "bakabaka.bunbun" <54648150+bakabun@users.noreply.github.com> Date: Sun, 8 Nov 2020 02:10:13 +0700 Subject: [PATCH 25/76] feature: Add "View Guild Insights" to GuildPermission (#1619) * feature: Add "View Guild Insights" permission * Add missing summary Co-authored-by: Paulo --- .../Entities/Permissions/GuildPermission.cs | 4 ++++ .../Entities/Permissions/GuildPermissions.cs | 11 +++++++++-- test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs index 3c8a5e810..645b67489 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs @@ -51,6 +51,10 @@ namespace Discord /// authentication when used on a guild that has server-wide 2FA enabled. /// ManageGuild = 0x00_00_00_20, + /// + /// Allows for viewing of guild insights + /// + ViewGuildInsights = 0x00_08_00_00, // Text /// diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs index a5adad47c..ba6757fc6 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs @@ -12,7 +12,7 @@ namespace Discord /// Gets a that grants all guild permissions for webhook users. public static readonly GuildPermissions Webhook = new GuildPermissions(0b00000_0000000_0001101100000_000000); /// Gets a that grants all guild permissions. - public static readonly GuildPermissions All = new GuildPermissions(0b11111_1111110_1111111111111_111111); + public static readonly GuildPermissions All = new GuildPermissions(0b11111_1111111_1111111111111_111111); /// Gets a packed value representing all the permissions in this . public ulong RawValue { get; } @@ -34,6 +34,8 @@ namespace Discord public bool AddReactions => Permissions.GetValue(RawValue, GuildPermission.AddReactions); /// If true, a user may view the audit log. public bool ViewAuditLog => Permissions.GetValue(RawValue, GuildPermission.ViewAuditLog); + /// If true, a user may view the guild insights. + public bool ViewGuildInsights => Permissions.GetValue(RawValue, GuildPermission.ViewGuildInsights); /// If True, a user may join channels. [Obsolete("Use ViewChannel instead.")] @@ -97,6 +99,7 @@ namespace Discord bool? manageGuild = null, bool? addReactions = null, bool? viewAuditLog = null, + bool? viewGuildInsights = null, bool? viewChannel = null, bool? sendMessages = null, bool? sendTTSMessages = null, @@ -130,6 +133,7 @@ namespace Discord Permissions.SetValue(ref value, manageGuild, GuildPermission.ManageGuild); Permissions.SetValue(ref value, addReactions, GuildPermission.AddReactions); Permissions.SetValue(ref value, viewAuditLog, GuildPermission.ViewAuditLog); + Permissions.SetValue(ref value, viewGuildInsights, GuildPermission.ViewGuildInsights); Permissions.SetValue(ref value, viewChannel, GuildPermission.ViewChannel); Permissions.SetValue(ref value, sendMessages, GuildPermission.SendMessages); Permissions.SetValue(ref value, sendTTSMessages, GuildPermission.SendTTSMessages); @@ -166,6 +170,7 @@ namespace Discord bool manageGuild = false, bool addReactions = false, bool viewAuditLog = false, + bool viewGuildInsights = false, bool viewChannel = false, bool sendMessages = false, bool sendTTSMessages = false, @@ -198,6 +203,7 @@ namespace Discord manageGuild: manageGuild, addReactions: addReactions, viewAuditLog: viewAuditLog, + viewGuildInsights: viewGuildInsights, viewChannel: viewChannel, sendMessages: sendMessages, sendTTSMessages: sendTTSMessages, @@ -231,6 +237,7 @@ namespace Discord bool? manageGuild = null, bool? addReactions = null, bool? viewAuditLog = null, + bool? viewGuildInsights = null, bool? viewChannel = null, bool? sendMessages = null, bool? sendTTSMessages = null, @@ -254,7 +261,7 @@ namespace Discord bool? manageWebhooks = null, bool? manageEmojis = null) => new GuildPermissions(RawValue, createInstantInvite, kickMembers, banMembers, administrator, manageChannels, manageGuild, addReactions, - viewAuditLog, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, + viewAuditLog, viewGuildInsights, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, prioritySpeaker, stream, changeNickname, manageNicknames, manageRoles, manageWebhooks, manageEmojis); diff --git a/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs b/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs index f0611fa24..cd29b2606 100644 --- a/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs +++ b/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs @@ -69,6 +69,7 @@ namespace Discord AssertFlag(() => new GuildPermissions(manageGuild: true), GuildPermission.ManageGuild); AssertFlag(() => new GuildPermissions(addReactions: true), GuildPermission.AddReactions); AssertFlag(() => new GuildPermissions(viewAuditLog: true), GuildPermission.ViewAuditLog); + AssertFlag(() => new GuildPermissions(viewGuildInsights: true), GuildPermission.ViewGuildInsights); AssertFlag(() => new GuildPermissions(viewChannel: true), GuildPermission.ViewChannel); AssertFlag(() => new GuildPermissions(sendMessages: true), GuildPermission.SendMessages); AssertFlag(() => new GuildPermissions(sendTTSMessages: true), GuildPermission.SendTTSMessages); @@ -141,6 +142,7 @@ namespace Discord AssertUtil(GuildPermission.ManageGuild, x => x.ManageGuild, (p, enable) => p.Modify(manageGuild: enable)); AssertUtil(GuildPermission.AddReactions, x => x.AddReactions, (p, enable) => p.Modify(addReactions: enable)); AssertUtil(GuildPermission.ViewAuditLog, x => x.ViewAuditLog, (p, enable) => p.Modify(viewAuditLog: enable)); + AssertUtil(GuildPermission.ViewGuildInsights, x => x.ViewGuildInsights, (p, enable) => p.Modify(viewGuildInsights: enable)); AssertUtil(GuildPermission.ViewChannel, x => x.ViewChannel, (p, enable) => p.Modify(viewChannel: enable)); AssertUtil(GuildPermission.SendMessages, x => x.SendMessages, (p, enable) => p.Modify(sendMessages: enable)); AssertUtil(GuildPermission.SendTTSMessages, x => x.SendTTSMessages, (p, enable) => p.Modify(sendTTSMessages: enable)); From a2af9857ca2fc042c33b6243e9e1b71a1960a656 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sat, 7 Nov 2020 16:15:46 -0300 Subject: [PATCH 26/76] fix: Audio stream dispose (#1667) * Fix audio dispose * Missed a few --- .../Audio/Streams/BufferedWriteStream.cs | 3 +++ .../Audio/Streams/OpusDecodeStream.cs | 6 ++++-- .../Audio/Streams/OpusEncodeStream.cs | 8 +++++--- src/Discord.Net.WebSocket/Audio/Streams/RTPReadStream.cs | 7 +++++++ .../Audio/Streams/RTPWriteStream.cs | 9 ++++++++- .../Audio/Streams/SodiumDecryptStream.cs | 7 +++++++ .../Audio/Streams/SodiumEncryptStream.cs | 7 +++++++ 7 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/Discord.Net.WebSocket/Audio/Streams/BufferedWriteStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/BufferedWriteStream.cs index 16ad0ae89..a2de252a2 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/BufferedWriteStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/BufferedWriteStream.cs @@ -61,14 +61,17 @@ namespace Discord.Audio.Streams _task = Run(); } + protected override void Dispose(bool disposing) { if (disposing) { _disposeTokenSource?.Cancel(); _disposeTokenSource?.Dispose(); + _cancelTokenSource?.Cancel(); _cancelTokenSource?.Dispose(); _queueLock?.Dispose(); + _next.Dispose(); } base.Dispose(disposing); } diff --git a/src/Discord.Net.WebSocket/Audio/Streams/OpusDecodeStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/OpusDecodeStream.cs index 1861e3554..ad1c285e8 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/OpusDecodeStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/OpusDecodeStream.cs @@ -68,10 +68,12 @@ namespace Discord.Audio.Streams protected override void Dispose(bool disposing) { - base.Dispose(disposing); - if (disposing) + { _decoder.Dispose(); + _next.Dispose(); + } + base.Dispose(disposing); } } } diff --git a/src/Discord.Net.WebSocket/Audio/Streams/OpusEncodeStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/OpusEncodeStream.cs index 035b92b30..05d12b490 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/OpusEncodeStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/OpusEncodeStream.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; @@ -89,10 +89,12 @@ namespace Discord.Audio.Streams protected override void Dispose(bool disposing) { - base.Dispose(disposing); - if (disposing) + { _encoder.Dispose(); + _next.Dispose(); + } + base.Dispose(disposing); } } } diff --git a/src/Discord.Net.WebSocket/Audio/Streams/RTPReadStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/RTPReadStream.cs index 120f67e0d..1002502b6 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/RTPReadStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/RTPReadStream.cs @@ -76,5 +76,12 @@ namespace Discord.Audio.Streams (buffer[extensionOffset + 3]); return extensionOffset + 4 + (extensionLength * 4); } + + protected override void Dispose(bool disposing) + { + if (disposing) + _next.Dispose(); + base.Dispose(disposing); + } } } diff --git a/src/Discord.Net.WebSocket/Audio/Streams/RTPWriteStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/RTPWriteStream.cs index ce407eada..7ecb56bee 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/RTPWriteStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/RTPWriteStream.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; @@ -69,5 +69,12 @@ namespace Discord.Audio.Streams { await _next.ClearAsync(cancelToken).ConfigureAwait(false); } + + protected override void Dispose(bool disposing) + { + if (disposing) + _next.Dispose(); + base.Dispose(disposing); + } } } diff --git a/src/Discord.Net.WebSocket/Audio/Streams/SodiumDecryptStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/SodiumDecryptStream.cs index 2b1a97f04..40cd6864e 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/SodiumDecryptStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/SodiumDecryptStream.cs @@ -44,5 +44,12 @@ namespace Discord.Audio.Streams { await _next.ClearAsync(cancelToken).ConfigureAwait(false); } + + protected override void Dispose(bool disposing) + { + if (disposing) + _next.Dispose(); + base.Dispose(disposing); + } } } diff --git a/src/Discord.Net.WebSocket/Audio/Streams/SodiumEncryptStream.cs b/src/Discord.Net.WebSocket/Audio/Streams/SodiumEncryptStream.cs index 8b3f0e302..fa1d34de5 100644 --- a/src/Discord.Net.WebSocket/Audio/Streams/SodiumEncryptStream.cs +++ b/src/Discord.Net.WebSocket/Audio/Streams/SodiumEncryptStream.cs @@ -60,5 +60,12 @@ namespace Discord.Audio.Streams { await _next.ClearAsync(cancelToken).ConfigureAwait(false); } + + protected override void Dispose(bool disposing) + { + if (disposing) + _next.Dispose(); + base.Dispose(disposing); + } } } From 1ab670b3fcab9ddb641a36359149e26ecddaa1ea Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 8 Nov 2020 17:33:37 -0300 Subject: [PATCH 27/76] feature: Add INVITE_CREATE and INVITE_DELETE events (#1491) * Add invite events (create and delete) * Removed unused using * Fixing IInviteMetadata properties * Add two new fields to the gateway event * Better event summary and remarks * Change how to assign to target variable Co-Authored-By: Joe4evr * Applying suggested changes to TargetUserType * Renaming NotDefined to Undefined * Fixing xml docs * Changed the summary style format Co-authored-by: Joe4evr --- .../Entities/Invites/TargetUserType.cs | 14 ++ .../API/Gateway/InviteCreateEvent.cs | 31 ++++ .../API/Gateway/InviteDeleteEvent.cs | 14 ++ .../BaseSocketClient.Events.cs | 42 +++++ .../DiscordShardedClient.cs | 3 + .../DiscordSocketClient.cs | 58 +++++++ .../Entities/Invites/SocketInvite.cs | 143 ++++++++++++++++++ 7 files changed, 305 insertions(+) create mode 100644 src/Discord.Net.Core/Entities/Invites/TargetUserType.cs create mode 100644 src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs create mode 100644 src/Discord.Net.WebSocket/API/Gateway/InviteDeleteEvent.cs create mode 100644 src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs diff --git a/src/Discord.Net.Core/Entities/Invites/TargetUserType.cs b/src/Discord.Net.Core/Entities/Invites/TargetUserType.cs new file mode 100644 index 000000000..74263b888 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Invites/TargetUserType.cs @@ -0,0 +1,14 @@ +namespace Discord +{ + public enum TargetUserType + { + /// + /// The invite whose target user type is not defined. + /// + Undefined = 0, + /// + /// The invite is for a Go Live stream. + /// + Stream = 1 + } +} diff --git a/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs b/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs new file mode 100644 index 000000000..e2ddd8816 --- /dev/null +++ b/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs @@ -0,0 +1,31 @@ +using Newtonsoft.Json; +using System; + +namespace Discord.API.Gateway +{ + internal class InviteCreateEvent + { + [JsonProperty("channel_id")] + public ulong ChannelId { get; set; } + [JsonProperty("code")] + public string Code { get; set; } + [JsonProperty("created_at")] + public DateTimeOffset CreatedAt { get; set; } + [JsonProperty("guild_id")] + public Optional GuildId { get; set; } + [JsonProperty("inviter")] + public Optional Inviter { get; set; } + [JsonProperty("max_age")] + public int MaxAge { get; set; } + [JsonProperty("max_uses")] + public int MaxUses { get; set; } + [JsonProperty("target_user")] + public Optional TargetUser { get; set; } + [JsonProperty("target_user_type")] + public Optional TargetUserType { get; set; } + [JsonProperty("temporary")] + public bool Temporary { get; set; } + [JsonProperty("uses")] + public int Uses { get; set; } + } +} diff --git a/src/Discord.Net.WebSocket/API/Gateway/InviteDeleteEvent.cs b/src/Discord.Net.WebSocket/API/Gateway/InviteDeleteEvent.cs new file mode 100644 index 000000000..54bc75595 --- /dev/null +++ b/src/Discord.Net.WebSocket/API/Gateway/InviteDeleteEvent.cs @@ -0,0 +1,14 @@ +using Newtonsoft.Json; + +namespace Discord.API.Gateway +{ + internal class InviteDeleteEvent + { + [JsonProperty("channel_id")] + public ulong ChannelId { get; set; } + [JsonProperty("code")] + public string Code { get; set; } + [JsonProperty("guild_id")] + public Optional GuildId { get; set; } + } +} diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs index 2cd62b3e8..966aec7fa 100644 --- a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs +++ b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs @@ -389,5 +389,47 @@ namespace Discord.WebSocket remove { _recipientRemovedEvent.Remove(value); } } internal readonly AsyncEvent> _recipientRemovedEvent = new AsyncEvent>(); + + //Invites + /// + /// Fired when an invite is created. + /// + /// + /// + /// This event is fired when an invite is created. The event handler must return a + /// and accept a as its parameter. + /// + /// + /// The invite created will be passed into the parameter. + /// + /// + public event Func InviteCreated + { + add { _inviteCreatedEvent.Add(value); } + remove { _inviteCreatedEvent.Remove(value); } + } + internal readonly AsyncEvent> _inviteCreatedEvent = new AsyncEvent>(); + /// + /// Fired when an invite is deleted. + /// + /// + /// + /// This event is fired when an invite is deleted. The event handler must return + /// a and accept a and + /// as its parameter. + /// + /// + /// The channel where this invite was created will be passed into the parameter. + /// + /// + /// The code of the deleted invite will be passed into the parameter. + /// + /// + public event Func InviteDeleted + { + add { _inviteDeletedEvent.Add(value); } + remove { _inviteDeletedEvent.Remove(value); } + } + internal readonly AsyncEvent> _inviteDeletedEvent = new AsyncEvent>(); } } diff --git a/src/Discord.Net.WebSocket/DiscordShardedClient.cs b/src/Discord.Net.WebSocket/DiscordShardedClient.cs index 930ea1585..a8780a7b0 100644 --- a/src/Discord.Net.WebSocket/DiscordShardedClient.cs +++ b/src/Discord.Net.WebSocket/DiscordShardedClient.cs @@ -338,6 +338,9 @@ namespace Discord.WebSocket client.UserIsTyping += (oldUser, newUser) => _userIsTypingEvent.InvokeAsync(oldUser, newUser); client.RecipientAdded += (user) => _recipientAddedEvent.InvokeAsync(user); client.RecipientRemoved += (user) => _recipientRemovedEvent.InvokeAsync(user); + + client.InviteCreated += (invite) => _inviteCreatedEvent.InvokeAsync(invite); + client.InviteDeleted += (channel, invite) => _inviteDeletedEvent.InvokeAsync(channel, invite); } //IDiscordClient diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 24ed8d5ff..dfdad99fc 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1688,6 +1688,64 @@ namespace Discord.WebSocket } break; + //Invites + case "INVITE_CREATE": + { + await _gatewayLogger.DebugAsync("Received Dispatch (INVITE_CREATE)").ConfigureAwait(false); + + var data = (payload as JToken).ToObject(_serializer); + if (State.GetChannel(data.ChannelId) is SocketGuildChannel channel) + { + var guild = channel.Guild; + if (!guild.IsSynced) + { + await UnsyncedGuildAsync(type, guild.Id).ConfigureAwait(false); + return; + } + + SocketGuildUser inviter = data.Inviter.IsSpecified + ? (guild.GetUser(data.Inviter.Value.Id) ?? guild.AddOrUpdateUser(data.Inviter.Value)) + : null; + + SocketUser target = data.TargetUser.IsSpecified + ? (guild.GetUser(data.TargetUser.Value.Id) ?? (SocketUser)SocketUnknownUser.Create(this, State, data.TargetUser.Value)) + : null; + + var invite = SocketInvite.Create(this, guild, channel, inviter, target, data); + + await TimedInvokeAsync(_inviteCreatedEvent, nameof(InviteCreated), invite).ConfigureAwait(false); + } + else + { + await UnknownChannelAsync(type, data.ChannelId).ConfigureAwait(false); + return; + } + } + break; + case "INVITE_DELETE": + { + await _gatewayLogger.DebugAsync("Received Dispatch (INVITE_DELETE)").ConfigureAwait(false); + + var data = (payload as JToken).ToObject(_serializer); + if (State.GetChannel(data.ChannelId) is SocketGuildChannel channel) + { + var guild = channel.Guild; + if (!guild.IsSynced) + { + await UnsyncedGuildAsync(type, guild.Id).ConfigureAwait(false); + return; + } + + await TimedInvokeAsync(_inviteDeletedEvent, nameof(InviteDeleted), channel, data.Code).ConfigureAwait(false); + } + else + { + await UnknownChannelAsync(type, data.ChannelId).ConfigureAwait(false); + return; + } + } + break; + //Ignored (User only) case "CHANNEL_PINS_ACK": await _gatewayLogger.DebugAsync("Ignored Dispatch (CHANNEL_PINS_ACK)").ConfigureAwait(false); diff --git a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs new file mode 100644 index 000000000..fa8c56599 --- /dev/null +++ b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs @@ -0,0 +1,143 @@ +using Discord.Rest; +using System; +using System.Diagnostics; +using System.Threading.Tasks; +using Model = Discord.API.Gateway.InviteCreateEvent; + +namespace Discord.WebSocket +{ + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] + public class SocketInvite : SocketEntity, IInviteMetadata + { + private long _createdAtTicks; + + /// + public ulong ChannelId { get; private set; } + /// + /// Gets the channel where this invite was created. + /// + public SocketGuildChannel Channel { get; private set; } + /// + public ulong? GuildId { get; private set; } + /// + /// Gets the guild where this invite was created. + /// + public SocketGuild Guild { get; private set; } + /// + ChannelType IInvite.ChannelType + { + get + { + switch (Channel) + { + case IVoiceChannel voiceChannel: return ChannelType.Voice; + case ICategoryChannel categoryChannel: return ChannelType.Category; + case IDMChannel dmChannel: return ChannelType.DM; + case IGroupChannel groupChannel: return ChannelType.Group; + case SocketNewsChannel socketNewsChannel: return ChannelType.News; + case ITextChannel textChannel: return ChannelType.Text; + default: throw new InvalidOperationException("Invalid channel type."); + } + } + } + /// + string IInvite.ChannelName => Channel.Name; + /// + string IInvite.GuildName => Guild.Name; + /// + int? IInvite.PresenceCount => throw new NotImplementedException(); + /// + int? IInvite.MemberCount => throw new NotImplementedException(); + /// + bool IInviteMetadata.IsRevoked => throw new NotImplementedException(); + /// + public bool IsTemporary { get; private set; } + /// + int? IInviteMetadata.MaxAge { get => MaxAge; } + /// + int? IInviteMetadata.MaxUses { get => MaxUses; } + /// + int? IInviteMetadata.Uses { get => Uses; } + /// + /// Gets the time (in seconds) until the invite expires. + /// + public int MaxAge { get; private set; } + /// + /// Gets the max number of uses this invite may have. + /// + public int MaxUses { get; private set; } + /// + /// Gets the number of times this invite has been used. + /// + public int Uses { get; private set; } + /// + /// Gets the user that created this invite if available. + /// + public SocketGuildUser Inviter { get; private set; } + /// + DateTimeOffset? IInviteMetadata.CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); + /// + /// Gets when this invite was created. + /// + public DateTimeOffset CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); + /// + /// Gets the user targeted by this invite if available. + /// + public SocketUser TargetUser { get; private set; } + /// + /// Gets the type of the user targeted by this invite. + /// + public TargetUserType TargetUserType { get; private set; } + + /// + public string Code => Id; + /// + public string Url => $"{DiscordConfig.InviteUrl}{Code}"; + + internal SocketInvite(DiscordSocketClient discord, SocketGuild guild, SocketGuildChannel channel, SocketGuildUser inviter, SocketUser target, string id) + : base(discord, id) + { + Guild = guild; + Channel = channel; + Inviter = inviter; + TargetUser = target; + } + internal static SocketInvite Create(DiscordSocketClient discord, SocketGuild guild, SocketGuildChannel channel, SocketGuildUser inviter, SocketUser target, Model model) + { + var entity = new SocketInvite(discord, guild, channel, inviter, target, model.Code); + entity.Update(model); + return entity; + } + internal void Update(Model model) + { + ChannelId = model.ChannelId; + GuildId = model.GuildId.IsSpecified ? model.GuildId.Value : Guild.Id; + IsTemporary = model.Temporary; + MaxAge = model.MaxAge; + MaxUses = model.MaxUses; + Uses = model.Uses; + _createdAtTicks = model.CreatedAt.UtcTicks; + TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : TargetUserType.Undefined; + } + + /// + public Task DeleteAsync(RequestOptions options = null) + => InviteHelper.DeleteAsync(this, Discord, options); + + /// + /// Gets the URL of the invite. + /// + /// + /// A string that resolves to the Url of the invite. + /// + public override string ToString() => Url; + private string DebuggerDisplay => $"{Url} ({Guild?.Name} / {Channel.Name})"; + + /// + IGuild IInvite.Guild => Guild; + /// + IChannel IInvite.Channel => Channel; + /// + IUser IInviteMetadata.Inviter => Inviter; + } +} From 10fcde0a32ee3a04b0a50a94d2fe4dcd876d181d Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 8 Nov 2020 18:13:41 -0300 Subject: [PATCH 28/76] feature: Add missing application properties (including Teams) (#1604) * Add missing application properties Add IsBotPublic, BotRequiresCodeGrant, and Team properties to IApplication * To immutable list * Change list to array --- src/Discord.Net.Core/CDN.cs | 11 ++++++ src/Discord.Net.Core/Entities/IApplication.cs | 12 ++++++ src/Discord.Net.Core/Entities/Teams/ITeam.cs | 27 ++++++++++++++ .../Entities/Teams/ITeamMember.cs | 25 +++++++++++++ .../Entities/Teams/MembershipState.cs | 11 ++++++ .../API/Common/Application.cs | 8 +++- .../API/Common/MembershipState.cs | 9 +++++ src/Discord.Net.Rest/API/Common/Team.cs | 17 +++++++++ src/Discord.Net.Rest/API/Common/TeamMember.cs | 17 +++++++++ .../Entities/RestApplication.cs | 10 +++++ .../Entities/Teams/RestTeam.cs | 37 +++++++++++++++++++ .../Entities/Teams/RestTeamMember.cs | 30 +++++++++++++++ 12 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 src/Discord.Net.Core/Entities/Teams/ITeam.cs create mode 100644 src/Discord.Net.Core/Entities/Teams/ITeamMember.cs create mode 100644 src/Discord.Net.Core/Entities/Teams/MembershipState.cs create mode 100644 src/Discord.Net.Rest/API/Common/MembershipState.cs create mode 100644 src/Discord.Net.Rest/API/Common/Team.cs create mode 100644 src/Discord.Net.Rest/API/Common/TeamMember.cs create mode 100644 src/Discord.Net.Rest/Entities/Teams/RestTeam.cs create mode 100644 src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs index 32ffbba90..799b037ed 100644 --- a/src/Discord.Net.Core/CDN.cs +++ b/src/Discord.Net.Core/CDN.cs @@ -7,6 +7,17 @@ namespace Discord /// public static class CDN { + /// + /// Returns a team icon URL. + /// + /// The team identifier. + /// The icon identifier. + /// + /// A URL pointing to the team's icon. + /// + public static string GetTeamIconUrl(ulong teamId, string iconId) + => iconId != null ? $"{DiscordConfig.CDNUrl}team-icons/{teamId}/{iconId}.jpg" : null; + /// /// Returns an application icon URL. /// diff --git a/src/Discord.Net.Core/Entities/IApplication.cs b/src/Discord.Net.Core/Entities/IApplication.cs index 78a87dc19..2174baff9 100644 --- a/src/Discord.Net.Core/Entities/IApplication.cs +++ b/src/Discord.Net.Core/Entities/IApplication.cs @@ -22,6 +22,18 @@ namespace Discord /// Gets the icon URL of the application. /// string IconUrl { get; } + /// + /// Gets if the bot is public. + /// + bool IsBotPublic { get; } + /// + /// Gets if the bot requires code grant. + /// + bool BotRequiresCodeGrant { get; } + /// + /// Gets the team associated with this application if there is one. + /// + ITeam Team { get; } /// /// Gets the partial user object containing info on the owner of the application. diff --git a/src/Discord.Net.Core/Entities/Teams/ITeam.cs b/src/Discord.Net.Core/Entities/Teams/ITeam.cs new file mode 100644 index 000000000..5ef3e4253 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Teams/ITeam.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace Discord +{ + /// + /// Represents a Discord Team. + /// + public interface ITeam + { + /// + /// Gets the team icon url. + /// + string IconUrl { get; } + /// + /// Gets the team unique identifier. + /// + ulong Id { get; } + /// + /// Gets the members of this team. + /// + IReadOnlyList TeamMembers { get; } + /// + /// Gets the user identifier that owns this team. + /// + ulong OwnerUserId { get; } + } +} diff --git a/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs b/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs new file mode 100644 index 000000000..fe0e499e5 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs @@ -0,0 +1,25 @@ +namespace Discord +{ + /// + /// Represents a Discord Team member. + /// + public interface ITeamMember + { + /// + /// Gets the membership state of this team member. + /// + MembershipState MembershipState { get; } + /// + /// Gets the permissions of this team member. + /// + string[] Permissions { get; } + /// + /// Gets the team unique identifier for this team member. + /// + ulong TeamId { get; } + /// + /// Gets the Discord user of this team member. + /// + IUser User { get; } + } +} diff --git a/src/Discord.Net.Core/Entities/Teams/MembershipState.cs b/src/Discord.Net.Core/Entities/Teams/MembershipState.cs new file mode 100644 index 000000000..45b1693b0 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Teams/MembershipState.cs @@ -0,0 +1,11 @@ +namespace Discord +{ + /// + /// Represents the membership state of a team member. + /// + public enum MembershipState + { + Invited, + Accepted, + } +} diff --git a/src/Discord.Net.Rest/API/Common/Application.cs b/src/Discord.Net.Rest/API/Common/Application.cs index ca4c443f1..b80aecd27 100644 --- a/src/Discord.Net.Rest/API/Common/Application.cs +++ b/src/Discord.Net.Rest/API/Common/Application.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API @@ -15,6 +15,12 @@ namespace Discord.API public ulong Id { get; set; } [JsonProperty("icon")] public string Icon { get; set; } + [JsonProperty("bot_public")] + public bool IsBotPublic { get; set; } + [JsonProperty("bot_require_code_grant")] + public bool BotRequiresCodeGrant { get; set; } + [JsonProperty("team")] + public Optional Team { get; set; } [JsonProperty("flags"), Int53] public Optional Flags { get; set; } diff --git a/src/Discord.Net.Rest/API/Common/MembershipState.cs b/src/Discord.Net.Rest/API/Common/MembershipState.cs new file mode 100644 index 000000000..67fcc8908 --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/MembershipState.cs @@ -0,0 +1,9 @@ +namespace Discord.API +{ + internal enum MembershipState + { + None = 0, + Invited = 1, + Accepted = 2, + } +} diff --git a/src/Discord.Net.Rest/API/Common/Team.cs b/src/Discord.Net.Rest/API/Common/Team.cs new file mode 100644 index 000000000..4910f43f7 --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/Team.cs @@ -0,0 +1,17 @@ +#pragma warning disable CS1591 +using Newtonsoft.Json; + +namespace Discord.API +{ + internal class Team + { + [JsonProperty("icon")] + public Optional Icon { get; set; } + [JsonProperty("id")] + public ulong Id { get; set; } + [JsonProperty("members")] + public TeamMember[] TeamMembers { get; set; } + [JsonProperty("owner_user_id")] + public ulong OwnerUserId { get; set; } + } +} diff --git a/src/Discord.Net.Rest/API/Common/TeamMember.cs b/src/Discord.Net.Rest/API/Common/TeamMember.cs new file mode 100644 index 000000000..788f73b61 --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/TeamMember.cs @@ -0,0 +1,17 @@ +#pragma warning disable CS1591 +using Newtonsoft.Json; + +namespace Discord.API +{ + internal class TeamMember + { + [JsonProperty("membership_state")] + public MembershipState MembershipState { get; set; } + [JsonProperty("permissions")] + public string[] Permissions { get; set; } + [JsonProperty("team_id")] + public ulong TeamId { get; set; } + [JsonProperty("user")] + public User User { get; set; } + } +} diff --git a/src/Discord.Net.Rest/Entities/RestApplication.cs b/src/Discord.Net.Rest/Entities/RestApplication.cs index d033978d0..6c22c0836 100644 --- a/src/Discord.Net.Rest/Entities/RestApplication.cs +++ b/src/Discord.Net.Rest/Entities/RestApplication.cs @@ -21,6 +21,12 @@ namespace Discord.Rest public string[] RPCOrigins { get; private set; } /// public ulong Flags { get; private set; } + /// + public bool IsBotPublic { get; private set; } + /// + public bool BotRequiresCodeGrant { get; private set; } + /// + public ITeam Team { get; private set; } /// public IUser Owner { get; private set; } @@ -46,11 +52,15 @@ namespace Discord.Rest RPCOrigins = model.RPCOrigins; Name = model.Name; _iconId = model.Icon; + IsBotPublic = model.IsBotPublic; + BotRequiresCodeGrant = model.BotRequiresCodeGrant; if (model.Flags.IsSpecified) Flags = model.Flags.Value; //TODO: Do we still need this? if (model.Owner.IsSpecified) Owner = RestUser.Create(Discord, model.Owner.Value); + if (model.Team.IsSpecified) + Team = RestTeam.Create(Discord, model.Team.Value); } /// Unable to update this object from a different application token. diff --git a/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs b/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs new file mode 100644 index 000000000..2343f8b5d --- /dev/null +++ b/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using Model = Discord.API.Team; + +namespace Discord.Rest +{ + public class RestTeam : RestEntity, ITeam + { + /// + public string IconUrl => _iconId != null ? CDN.GetTeamIconUrl(Id, _iconId) : null; + /// + public IReadOnlyList TeamMembers { get; private set; } + /// + public ulong OwnerUserId { get; private set; } + + private string _iconId; + + internal RestTeam(BaseDiscordClient discord, ulong id) + : base(discord, id) + { + } + internal static RestTeam Create(BaseDiscordClient discord, Model model) + { + var entity = new RestTeam(discord, model.Id); + entity.Update(model); + return entity; + } + internal virtual void Update(Model model) + { + if (model.Icon.IsSpecified) + _iconId = model.Icon.Value; + OwnerUserId = model.OwnerUserId; + TeamMembers = model.TeamMembers.Select(x => new RestTeamMember(Discord, x)).ToImmutableArray(); + } + } +} diff --git a/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs b/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs new file mode 100644 index 000000000..322bb6a3f --- /dev/null +++ b/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs @@ -0,0 +1,30 @@ +using System; +using Model = Discord.API.TeamMember; + +namespace Discord.Rest +{ + public class RestTeamMember : ITeamMember + { + /// + public MembershipState MembershipState { get; } + /// + public string[] Permissions { get; } + /// + public ulong TeamId { get; } + /// + public IUser User { get; } + + internal RestTeamMember(BaseDiscordClient discord, Model model) + { + MembershipState = model.MembershipState switch + { + API.MembershipState.Invited => MembershipState.Invited, + API.MembershipState.Accepted => MembershipState.Accepted, + _ => throw new InvalidOperationException("Invalid membership state"), + }; + Permissions = model.Permissions; + TeamId = model.TeamId; + User = RestUser.Create(discord, model.User); + } + } +} From 1e012ac0b822129e59d6e9132a836453d181aae9 Mon Sep 17 00:00:00 2001 From: Jack Fox <0xdeadbeef1@gmail.com> Date: Sun, 8 Nov 2020 16:21:51 -0500 Subject: [PATCH 29/76] feature: Add GetStreams to AudioClient (#1588) * Added GetStreams * Change return type * Change return type on the interface Co-authored-by: Paulo --- src/Discord.Net.Core/Audio/IAudioClient.cs | 6 +++++- src/Discord.Net.WebSocket/Audio/AudioClient.cs | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Core/Audio/IAudioClient.cs b/src/Discord.Net.Core/Audio/IAudioClient.cs index 018c8bc05..2fc52a529 100644 --- a/src/Discord.Net.Core/Audio/IAudioClient.cs +++ b/src/Discord.Net.Core/Audio/IAudioClient.cs @@ -1,4 +1,5 @@ -using System; +using System; +using System.Collections.Generic; using System.Threading.Tasks; namespace Discord.Audio @@ -20,6 +21,9 @@ namespace Discord.Audio /// Gets the estimated round-trip latency, in milliseconds, to the voice UDP server. int UdpLatency { get; } + /// Gets the current audio streams. + IReadOnlyDictionary GetStreams(); + Task StopAsync(); Task SetSpeakingAsync(bool value); diff --git a/src/Discord.Net.WebSocket/Audio/AudioClient.cs b/src/Discord.Net.WebSocket/Audio/AudioClient.cs index 2210e019f..3549fb106 100644 --- a/src/Discord.Net.WebSocket/Audio/AudioClient.cs +++ b/src/Discord.Net.WebSocket/Audio/AudioClient.cs @@ -99,6 +99,12 @@ namespace Discord.Audio _token = token; await _connection.StartAsync().ConfigureAwait(false); } + + public IReadOnlyDictionary GetStreams() + { + return _streams.ToDictionary(pair => pair.Key, pair => pair.Value.Reader); + } + public async Task StopAsync() { await _connection.StopAsync().ConfigureAwait(false); @@ -379,7 +385,7 @@ namespace Discord.Audio private async Task RunHeartbeatAsync(int intervalMillis, CancellationToken cancelToken) { - //TODO: Clean this up when Discord's session patch is live + // TODO: Clean this up when Discord's session patch is live try { await _audioLogger.DebugAsync("Heartbeat Started").ConfigureAwait(false); From 913444349465c339f0624ef0ea26715d9e7a1853 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 8 Nov 2020 19:29:15 -0300 Subject: [PATCH 30/76] fix: Crosspost throwing InvalidOperationException (#1671) * Add INewsChannel * Renaming variable to match the new type --- src/Discord.Net.Core/Entities/Channels/INewsChannel.cs | 9 +++++++++ .../Entities/Channels/RestNewsChannel.cs | 2 +- .../Entities/Messages/RestUserMessage.cs | 4 ++-- .../Entities/Channels/SocketNewsChannel.cs | 2 +- .../Entities/Invites/SocketInvite.cs | 2 +- .../Entities/Messages/SocketUserMessage.cs | 4 ++-- 6 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 src/Discord.Net.Core/Entities/Channels/INewsChannel.cs diff --git a/src/Discord.Net.Core/Entities/Channels/INewsChannel.cs b/src/Discord.Net.Core/Entities/Channels/INewsChannel.cs new file mode 100644 index 000000000..a1223b48b --- /dev/null +++ b/src/Discord.Net.Core/Entities/Channels/INewsChannel.cs @@ -0,0 +1,9 @@ +namespace Discord +{ + /// + /// Represents a generic news channel in a guild that can send and receive messages. + /// + public interface INewsChannel : ITextChannel + { + } +} diff --git a/src/Discord.Net.Rest/Entities/Channels/RestNewsChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestNewsChannel.cs index 8a334fae5..fad3358dc 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestNewsChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestNewsChannel.cs @@ -12,7 +12,7 @@ namespace Discord.Rest /// Represents a REST-based news channel in a guild that has the same properties as a . /// [DebuggerDisplay(@"{DebuggerDisplay,nq}")] - public class RestNewsChannel : RestTextChannel + public class RestNewsChannel : RestTextChannel, INewsChannel { internal RestNewsChannel(BaseDiscordClient discord, IGuild guild, ulong id) :base(discord, guild, id) diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs index be955b13d..79df4308d 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs @@ -154,10 +154,10 @@ namespace Discord.Rest => MentionUtils.Resolve(this, 0, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); /// - /// This operation may only be called on a channel. + /// This operation may only be called on a channel. public async Task CrosspostAsync(RequestOptions options = null) { - if (!(Channel is RestNewsChannel)) + if (!(Channel is INewsChannel)) { throw new InvalidOperationException("Publishing (crossposting) is only valid in news channels."); } diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketNewsChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketNewsChannel.cs index 815a99ce7..944dd2d7f 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketNewsChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketNewsChannel.cs @@ -15,7 +15,7 @@ namespace Discord.WebSocket /// /// [DebuggerDisplay(@"{DebuggerDisplay,nq}")] - public class SocketNewsChannel : SocketTextChannel + public class SocketNewsChannel : SocketTextChannel, INewsChannel { internal SocketNewsChannel(DiscordSocketClient discord, ulong id, SocketGuild guild) :base(discord, id, guild) diff --git a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs index fa8c56599..902f13935 100644 --- a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs +++ b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs @@ -34,7 +34,7 @@ namespace Discord.WebSocket case ICategoryChannel categoryChannel: return ChannelType.Category; case IDMChannel dmChannel: return ChannelType.DM; case IGroupChannel groupChannel: return ChannelType.Group; - case SocketNewsChannel socketNewsChannel: return ChannelType.News; + case INewsChannel newsChannel: return ChannelType.News; case ITextChannel textChannel: return ChannelType.Text; default: throw new InvalidOperationException("Invalid channel type."); } diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index 51b0c2043..da7f8f16b 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -158,10 +158,10 @@ namespace Discord.WebSocket => MentionUtils.Resolve(this, 0, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); /// - /// This operation may only be called on a channel. + /// This operation may only be called on a channel. public async Task CrosspostAsync(RequestOptions options = null) { - if (!(Channel is SocketNewsChannel)) + if (!(Channel is INewsChannel)) { throw new InvalidOperationException("Publishing (crossposting) is only valid in news channels."); } From 05a1f0a709e6970f4302d9954a94b3a88bf01e6c Mon Sep 17 00:00:00 2001 From: Paulo Date: Mon, 9 Nov 2020 12:31:17 -0300 Subject: [PATCH 31/76] fix: Discord sends null when there's no team --- src/Discord.Net.Rest/Entities/RestApplication.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Rest/Entities/RestApplication.cs b/src/Discord.Net.Rest/Entities/RestApplication.cs index 6c22c0836..d96d837ab 100644 --- a/src/Discord.Net.Rest/Entities/RestApplication.cs +++ b/src/Discord.Net.Rest/Entities/RestApplication.cs @@ -59,7 +59,7 @@ namespace Discord.Rest Flags = model.Flags.Value; //TODO: Do we still need this? if (model.Owner.IsSpecified) Owner = RestUser.Create(Discord, model.Owner.Value); - if (model.Team.IsSpecified) + if (model.Team.IsSpecified && model.Team.Value != null) Team = RestTeam.Create(Discord, model.Team.Value); } From be60d813f77ddfb2f131ae4f290026f3ff2756ad Mon Sep 17 00:00:00 2001 From: Paulo Date: Mon, 9 Nov 2020 15:39:08 -0300 Subject: [PATCH 32/76] fix: Team is nullable, not optional (#1672) --- src/Discord.Net.Rest/API/Common/Application.cs | 2 +- src/Discord.Net.Rest/Entities/RestApplication.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Rest/API/Common/Application.cs b/src/Discord.Net.Rest/API/Common/Application.cs index b80aecd27..aba3e524b 100644 --- a/src/Discord.Net.Rest/API/Common/Application.cs +++ b/src/Discord.Net.Rest/API/Common/Application.cs @@ -20,7 +20,7 @@ namespace Discord.API [JsonProperty("bot_require_code_grant")] public bool BotRequiresCodeGrant { get; set; } [JsonProperty("team")] - public Optional Team { get; set; } + public Team Team { get; set; } [JsonProperty("flags"), Int53] public Optional Flags { get; set; } diff --git a/src/Discord.Net.Rest/Entities/RestApplication.cs b/src/Discord.Net.Rest/Entities/RestApplication.cs index d96d837ab..5c2f872cf 100644 --- a/src/Discord.Net.Rest/Entities/RestApplication.cs +++ b/src/Discord.Net.Rest/Entities/RestApplication.cs @@ -59,8 +59,8 @@ namespace Discord.Rest Flags = model.Flags.Value; //TODO: Do we still need this? if (model.Owner.IsSpecified) Owner = RestUser.Create(Discord, model.Owner.Value); - if (model.Team.IsSpecified && model.Team.Value != null) - Team = RestTeam.Create(Discord, model.Team.Value); + if (model.Team != null) + Team = RestTeam.Create(Discord, model.Team); } /// Unable to update this object from a different application token. From 47ed8064180420d2109e23794270cd4246161ffe Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 15 Nov 2020 13:20:08 -0300 Subject: [PATCH 33/76] misc: Change ratelimit messages (#1678) --- src/Discord.Net.Rest/BaseDiscordClient.cs | 6 +++--- src/Discord.Net.Rest/Net/Queue/RequestQueue.cs | 6 +++--- src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs | 4 ++-- src/Discord.Net.Webhook/DiscordWebhookClient.cs | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs index 58b42929a..b641fa1c3 100644 --- a/src/Discord.Net.Rest/BaseDiscordClient.cs +++ b/src/Discord.Net.Rest/BaseDiscordClient.cs @@ -46,12 +46,12 @@ namespace Discord.Rest _restLogger = LogManager.CreateLogger("Rest"); _isFirstLogin = config.DisplayInitialLog; - ApiClient.RequestQueue.RateLimitTriggered += async (id, info) => + ApiClient.RequestQueue.RateLimitTriggered += async (id, info, endpoint) => { if (info == null) - await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); + await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {endpoint} {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false); else - await _restLogger.WarningAsync($"Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); + await _restLogger.WarningAsync($"Rate limit triggered: {endpoint} {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false); }; ApiClient.SentRequest += async (method, endpoint, millis) => await _restLogger.VerboseAsync($"{method} {endpoint}: {millis} ms").ConfigureAwait(false); } diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs index 691ac77c0..127a48cf3 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs @@ -12,7 +12,7 @@ namespace Discord.Net.Queue { internal class RequestQueue : IDisposable { - public event Func RateLimitTriggered; + public event Func RateLimitTriggered; private readonly ConcurrentDictionary _buckets; private readonly SemaphoreSlim _tokenLock; @@ -121,9 +121,9 @@ namespace Discord.Net.Queue } return (RequestBucket)obj; } - internal async Task RaiseRateLimitTriggered(BucketId bucketId, RateLimitInfo? info) + internal async Task RaiseRateLimitTriggered(BucketId bucketId, RateLimitInfo? info, string endpoint) { - await RateLimitTriggered(bucketId, info).ConfigureAwait(false); + await RateLimitTriggered(bucketId, info, endpoint).ConfigureAwait(false); } internal (RequestBucket, BucketId) UpdateBucketHash(BucketId id, string discordHash) { diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs index f1471d545..edd55f158 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs @@ -84,7 +84,7 @@ namespace Discord.Net.Queue #endif UpdateRateLimit(id, request, info, true); } - await _queue.RaiseRateLimitTriggered(Id, info).ConfigureAwait(false); + await _queue.RaiseRateLimitTriggered(Id, info, $"{request.Method} {request.Endpoint}").ConfigureAwait(false); continue; //Retry case HttpStatusCode.BadGateway: //502 #if DEBUG_LIMITS @@ -187,7 +187,7 @@ namespace Discord.Net.Queue if (!isRateLimited) { isRateLimited = true; - await _queue.RaiseRateLimitTriggered(Id, null).ConfigureAwait(false); + await _queue.RaiseRateLimitTriggered(Id, null, $"{request.Method} {request.Endpoint}").ConfigureAwait(false); } ThrowRetryLimit(request); diff --git a/src/Discord.Net.Webhook/DiscordWebhookClient.cs b/src/Discord.Net.Webhook/DiscordWebhookClient.cs index 9c9bfe958..a6d4ef183 100644 --- a/src/Discord.Net.Webhook/DiscordWebhookClient.cs +++ b/src/Discord.Net.Webhook/DiscordWebhookClient.cs @@ -74,12 +74,12 @@ namespace Discord.Webhook _restLogger = LogManager.CreateLogger("Rest"); - ApiClient.RequestQueue.RateLimitTriggered += async (id, info) => + ApiClient.RequestQueue.RateLimitTriggered += async (id, info, endpoint) => { if (info == null) - await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); + await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {endpoint} {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false); else - await _restLogger.WarningAsync($"Rate limit triggered: {id?.ToString() ?? "null"}").ConfigureAwait(false); + await _restLogger.WarningAsync($"Rate limit triggered: {endpoint} {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false); }; ApiClient.SentRequest += async (method, endpoint, millis) => await _restLogger.VerboseAsync($"{method} {endpoint}: {millis} ms").ConfigureAwait(false); } From 3a1001830bbf699aff3e524a8eb2d55a886227cb Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 17 Nov 2020 02:11:02 -0300 Subject: [PATCH 34/76] misc: Missing summary tag --- src/Discord.Net.WebSocket/DiscordSocketConfig.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index 11e44d8dc..0e8fbe73f 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -151,6 +151,7 @@ namespace Discord.WebSocket } private int _maxWaitForGuildAvailable = 10000; + /// /// Gets or sets gateway intents to limit what events are sent from Discord. Allows for more granular control than the property. /// /// From 04389a4f3e7120d70b6c6f7c21fcec3355b1b28e Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 17 Nov 2020 05:11:25 -0300 Subject: [PATCH 35/76] fix: Emoji url encode (#1681) --- .../Entities/Messages/MessageHelper.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs index d6a718b3a..619ddc876 100644 --- a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs +++ b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs @@ -65,12 +65,12 @@ namespace Discord.Rest public static async Task AddReactionAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options) { - await client.ApiClient.AddReactionAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false); + await client.ApiClient.AddReactionAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name), options).ConfigureAwait(false); } public static async Task RemoveReactionAsync(IMessage msg, ulong userId, IEmote emote, BaseDiscordClient client, RequestOptions options) { - await client.ApiClient.RemoveReactionAsync(msg.Channel.Id, msg.Id, userId, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false); + await client.ApiClient.RemoveReactionAsync(msg.Channel.Id, msg.Id, userId, emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name), options).ConfigureAwait(false); } public static async Task RemoveAllReactionsAsync(IMessage msg, BaseDiscordClient client, RequestOptions options) @@ -80,14 +80,14 @@ namespace Discord.Rest public static async Task RemoveAllReactionsForEmoteAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options) { - await client.ApiClient.RemoveAllReactionsForEmoteAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false); + await client.ApiClient.RemoveAllReactionsForEmoteAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name), options).ConfigureAwait(false); } public static IAsyncEnumerable> GetReactionUsersAsync(IMessage msg, IEmote emote, int? limit, BaseDiscordClient client, RequestOptions options) { Preconditions.NotNull(emote, nameof(emote)); - var emoji = (emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name); + var emoji = (emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name)); return new PagedAsyncEnumerable( DiscordConfig.MaxUserReactionsPerBatch, @@ -114,7 +114,15 @@ namespace Discord.Rest }, count: limit ); + } + private static string UrlEncode(string text) + { +#if NET461 + return System.Net.WebUtility.UrlEncode(text); +#else + return System.Web.HttpUtility.UrlEncode(text); +#endif } public static async Task PinAsync(IMessage msg, BaseDiscordClient client, From ec212b175dc17c2341afacfa2f269a08427c3b43 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 17 Nov 2020 05:23:45 -0300 Subject: [PATCH 36/76] feature: Add missing properties to Guild and deprecate GuildEmbed (#1573) * Add missing properties to Guild, related methods, and deprecate GuildEmbed endpoints - Add missing guild properties: `discovery_splash`, `widget_enabled`, `widget_channel_id`, `rules_channel_id`, `max_presences`, `max_presences`, `max_members`, `public_updates_channel_id`, `max_video_channel_users`, `approximate_member_count`, `approximate_presence_count` - Update guild properties: `embed_enabled`, `embed_channel_id` - Add `GetGuildDiscoverySplashUrl` to `CDN` - Add classes related to the guild widget - Add `withCounts` parameter to `GetGuild(s)Async` - Make GuildEmbed related methods obsolete with a message redirecting to widget ones * Change xml docs and PremiumSubscriptionCount type * Changed some xml docs --- src/Discord.Net.Core/CDN.cs | 12 +- .../Entities/Guilds/GuildWidgetProperties.cs | 21 ++ .../Entities/Guilds/IGuild.cs | 199 +++++++++++++---- src/Discord.Net.Core/Entities/IUpdateable.cs | 1 + src/Discord.Net.Rest/API/Common/Guild.cs | 26 ++- .../API/Common/GuildWidget.cs | 13 ++ .../API/Rest/ModifyGuildWidgetParams.cs | 14 ++ src/Discord.Net.Rest/ClientHelper.cs | 18 +- src/Discord.Net.Rest/DiscordRestApiClient.cs | 30 ++- src/Discord.Net.Rest/DiscordRestClient.cs | 12 +- .../Entities/Guilds/GuildHelper.cs | 22 ++ .../Entities/Guilds/RestGuild.cs | 200 +++++++++++++++--- .../Entities/Guilds/RestGuildWidget.cs | 25 +++ .../Entities/Guilds/SocketGuild.cs | 147 +++++++++++-- 14 files changed, 644 insertions(+), 96 deletions(-) create mode 100644 src/Discord.Net.Core/Entities/Guilds/GuildWidgetProperties.cs create mode 100644 src/Discord.Net.Rest/API/Common/GuildWidget.cs create mode 100644 src/Discord.Net.Rest/API/Rest/ModifyGuildWidgetParams.cs create mode 100644 src/Discord.Net.Rest/Entities/Guilds/RestGuildWidget.cs diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs index 799b037ed..e1e8e5e1a 100644 --- a/src/Discord.Net.Core/CDN.cs +++ b/src/Discord.Net.Core/CDN.cs @@ -73,11 +73,21 @@ namespace Discord /// The guild snowflake identifier. /// The splash icon identifier. /// - /// A URL pointing to the guild's icon. + /// A URL pointing to the guild's splash. /// public static string GetGuildSplashUrl(ulong guildId, string splashId) => splashId != null ? $"{DiscordConfig.CDNUrl}splashes/{guildId}/{splashId}.jpg" : null; /// + /// Returns a guild discovery splash URL. + /// + /// The guild snowflake identifier. + /// The discovery splash icon identifier. + /// + /// A URL pointing to the guild's discovery splash. + /// + public static string GetGuildDiscoverySplashUrl(ulong guildId, string discoverySplashId) + => discoverySplashId != null ? $"{DiscordConfig.CDNUrl}discovery-splashes/{guildId}/{discoverySplashId}.jpg" : null; + /// /// Returns a channel icon URL. /// /// The channel snowflake identifier. diff --git a/src/Discord.Net.Core/Entities/Guilds/GuildWidgetProperties.cs b/src/Discord.Net.Core/Entities/Guilds/GuildWidgetProperties.cs new file mode 100644 index 000000000..842bb7f3e --- /dev/null +++ b/src/Discord.Net.Core/Entities/Guilds/GuildWidgetProperties.cs @@ -0,0 +1,21 @@ +namespace Discord +{ + /// + /// Provides properties that are used to modify the widget of an with the specified changes. + /// + public class GuildWidgetProperties + { + /// + /// Sets whether the widget should be enabled. + /// + public Optional Enabled { get; set; } + /// + /// Sets the channel that the invite should place its users in, if not . + /// + public Optional Channel { get; set; } + /// + /// Sets the channel that the invite should place its users in, if not . + /// + public Optional ChannelId { get; set; } + } +} diff --git a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs index 8392bcd58..6283508e5 100644 --- a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs +++ b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs @@ -23,7 +23,7 @@ namespace Discord /// automatically moved to the AFK voice channel. /// /// - /// An representing the amount of time in seconds for a user to be marked as inactive + /// An representing the amount of time in seconds for a user to be marked as inactive /// and moved into the AFK voice channel. /// int AFKTimeout { get; } @@ -31,10 +31,17 @@ namespace Discord /// Gets a value that indicates whether this guild is embeddable (i.e. can use widget). /// /// - /// true if this guild can be embedded via widgets; otherwise false. + /// if this guild has a widget enabled; otherwise . /// bool IsEmbeddable { get; } /// + /// Gets a value that indicates whether this guild has the widget enabled. + /// + /// + /// if this guild has a widget enabled; otherwise . + /// + bool IsWidgetEnabled { get; } + /// /// Gets the default message notifications for users who haven't explicitly set their notification settings. /// DefaultMessageNotifications DefaultMessageNotifications { get; } @@ -64,31 +71,45 @@ namespace Discord /// Gets the ID of this guild's icon. /// /// - /// An identifier for the splash image; null if none is set. + /// An identifier for the splash image; if none is set. /// string IconId { get; } /// /// Gets the URL of this guild's icon. /// /// - /// A URL pointing to the guild's icon; null if none is set. + /// A URL pointing to the guild's icon; if none is set. /// string IconUrl { get; } /// /// Gets the ID of this guild's splash image. /// /// - /// An identifier for the splash image; null if none is set. + /// An identifier for the splash image; if none is set. /// string SplashId { get; } /// /// Gets the URL of this guild's splash image. /// /// - /// A URL pointing to the guild's splash image; null if none is set. + /// A URL pointing to the guild's splash image; if none is set. /// string SplashUrl { get; } /// + /// Gets the ID of this guild's discovery splash image. + /// + /// + /// An identifier for the discovery splash image; if none is set. + /// + string DiscoverySplashId { get; } + /// + /// Gets the URL of this guild's discovery splash image. + /// + /// + /// A URL pointing to the guild's discovery splash image; if none is set. + /// + string DiscoverySplashUrl { get; } + /// /// Determines if this guild is currently connected and ready to be used. /// /// @@ -98,7 +119,7 @@ namespace Discord /// This boolean is used to determine if the guild is currently connected to the WebSocket and is ready to be used/accessed. /// /// - /// true if this guild is currently connected and ready to be used; otherwise false. + /// true if this guild is currently connected and ready to be used; otherwise . /// bool Available { get; } @@ -106,7 +127,7 @@ namespace Discord /// Gets the ID of the AFK voice channel for this guild. /// /// - /// A representing the snowflake identifier of the AFK voice channel; null if + /// A representing the snowflake identifier of the AFK voice channel; if /// none is set. /// ulong? AFKChannelId { get; } @@ -121,7 +142,7 @@ namespace Discord /// /// /// - /// A representing the snowflake identifier of the default text channel; 0 if + /// A representing the snowflake identifier of the default text channel; 0 if /// none can be found. /// ulong DefaultChannelId { get; } @@ -129,30 +150,54 @@ namespace Discord /// Gets the ID of the widget embed channel of this guild. /// /// - /// A representing the snowflake identifier of the embedded channel found within the - /// widget settings of this guild; null if none is set. + /// A representing the snowflake identifier of the embedded channel found within the + /// widget settings of this guild; if none is set. /// ulong? EmbedChannelId { get; } /// + /// Gets the ID of the channel assigned to the widget of this guild. + /// + /// + /// A representing the snowflake identifier of the channel assigned to the widget found + /// within the widget settings of this guild; if none is set. + /// + ulong? WidgetChannelId { get; } + /// /// Gets the ID of the channel where randomized welcome messages are sent. /// /// - /// A representing the snowflake identifier of the system channel where randomized - /// welcome messages are sent; null if none is set. + /// A representing the snowflake identifier of the system channel where randomized + /// welcome messages are sent; if none is set. /// ulong? SystemChannelId { get; } /// + /// Gets the ID of the channel with the rules. + /// + /// + /// A representing the snowflake identifier of the channel that contains the rules; + /// if none is set. + /// + ulong? RulesChannelId { get; } + /// + /// Gets the ID of the channel where admins and moderators of Community guilds receive notices from Discord. + /// + /// + /// A representing the snowflake identifier of the channel where admins and moderators + /// of Community guilds receive notices from Discord; if none is set. + /// + ulong? PublicUpdatesChannelId { get; } + /// /// Gets the ID of the user that owns this guild. /// /// - /// A representing the snowflake identifier of the user that owns this guild. + /// A representing the snowflake identifier of the user that owns this guild. /// ulong OwnerId { get; } /// /// Gets the application ID of the guild creator if it is bot-created. /// /// - /// A representing the snowflake identifier of the application ID that created this guild, or null if it was not bot-created. + /// A representing the snowflake identifier of the application ID that created this guild, or if it was not bot-created. /// ulong? ApplicationId { get; } /// @@ -208,21 +253,21 @@ namespace Discord /// Gets the identifier for this guilds banner image. /// /// - /// An identifier for the banner image; null if none is set. + /// An identifier for the banner image; if none is set. /// string BannerId { get; } /// /// Gets the URL of this guild's banner image. /// /// - /// A URL pointing to the guild's banner image; null if none is set. + /// A URL pointing to the guild's banner image; if none is set. /// string BannerUrl { get; } /// /// Gets the code for this guild's vanity invite URL. /// /// - /// A string containing the vanity invite code for this guild; null if none is set. + /// A string containing the vanity invite code for this guild; if none is set. /// string VanityURLCode { get; } /// @@ -236,7 +281,7 @@ namespace Discord /// Gets the description for the guild. /// /// - /// The description for the guild; null if none is set. + /// The description for the guild; if none is set. /// string Description { get; } /// @@ -246,9 +291,50 @@ namespace Discord /// This is the number of users who have boosted this guild. /// /// - /// The number of premium subscribers of this guild. + /// The number of premium subscribers of this guild; if not available. /// int PremiumSubscriptionCount { get; } + /// + /// Gets the maximum number of presences for the guild. + /// + /// + /// The maximum number of presences for the guild. + /// + int? MaxPresences { get; } + /// + /// Gets the maximum number of members for the guild. + /// + /// + /// The maximum number of members for the guild. + /// + int? MaxMembers { get; } + /// + /// Gets the maximum amount of users in a video channel. + /// + /// + /// The maximum amount of users in a video channel. + /// + int? MaxVideoChannelUsers { get; } + /// + /// Gets the approximate number of members in this guild. + /// + /// + /// Only available when getting a guild via REST when `with_counts` is true. + /// + /// + /// The approximate number of members in this guild. + /// + int? ApproximateMemberCount { get; } + /// + /// Gets the approximate number of non-offline members in this guild. + /// + /// + /// Only available when getting a guild via REST when `with_counts` is true. + /// + /// + /// The approximate number of non-offline members in this guild. + /// + int? ApproximatePresenceCount { get; } /// /// Gets the preferred locale of this guild in IETF BCP 47 @@ -285,8 +371,18 @@ namespace Discord /// /// A task that represents the asynchronous modification operation. /// + [Obsolete("This endpoint is deprecated, use ModifyWidgetAsync instead.")] Task ModifyEmbedAsync(Action func, RequestOptions options = null); /// + /// Modifies this guild's widget. + /// + /// The delegate containing the properties to modify the guild widget with. + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous modification operation. + /// + Task ModifyWidgetAsync(Action func, RequestOptions options = null); + /// /// Bulk-modifies the order of channels in this guild. /// /// The properties used to modify the channel positions with. @@ -336,7 +432,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains a ban object, which - /// contains the user information and the reason for the ban; null if the ban entry cannot be found. + /// contains the user information and the reason for the ban; if the ban entry cannot be found. /// Task GetBanAsync(IUser user, RequestOptions options = null); /// @@ -346,7 +442,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains a ban object, which - /// contains the user information and the reason for the ban; null if the ban entry cannot be found. + /// contains the user information and the reason for the ban; if the ban entry cannot be found. /// Task GetBanAsync(ulong userId, RequestOptions options = null); /// @@ -410,7 +506,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the generic channel - /// associated with the specified ; null if none is found. + /// associated with the specified ; if none is found. /// Task GetChannelAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -431,7 +527,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the text channel - /// associated with the specified ; null if none is found. + /// associated with the specified ; if none is found. /// Task GetTextChannelAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -462,7 +558,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the voice channel associated - /// with the specified ; null if none is found. + /// with the specified ; if none is found. /// Task GetVoiceChannelAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -472,7 +568,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the voice channel that the - /// AFK users will be moved to after they have idled for too long; null if none is set. + /// AFK users will be moved to after they have idled for too long; if none is set. /// Task GetAFKChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -482,7 +578,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the text channel where - /// randomized welcome messages will be sent to; null if none is set. + /// randomized welcome messages will be sent to; if none is set. /// Task GetSystemChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -492,7 +588,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the first viewable text - /// channel in this guild; null if none is found. + /// channel in this guild; if none is found. /// Task GetDefaultChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -502,9 +598,40 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the embed channel set - /// within the server's widget settings; null if none is set. + /// within the server's widget settings; if none is set. /// + [Obsolete("This endpoint is deprecated, use GetWidgetChannelAsync instead.")] Task GetEmbedChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); + /// + /// Gets the widget channel (i.e. the channel set in the guild's widget settings) in this guild. + /// + /// The that determines whether the object should be fetched from cache. + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains the widget channel set + /// within the server's widget settings; if none is set. + /// + Task GetWidgetChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); + /// + /// Gets the text channel where Community guilds can display rules and/or guidelines. + /// + /// The that determines whether the object should be fetched from cache. + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains the text channel + /// where Community guilds can display rules and/or guidelines; if none is set. + /// + Task GetRulesChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); + /// + /// Gets the text channel channel where admins and moderators of Community guilds receive notices from Discord. + /// + /// The that determines whether the object should be fetched from cache. + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains the text channel channel where + /// admins and moderators of Community guilds receive notices from Discord; if none is set. + /// + Task GetPublicUpdatesChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// /// Creates a new text channel in this guild. @@ -573,7 +700,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the partial metadata of - /// the vanity invite found within this guild; null if none is found. + /// the vanity invite found within this guild; if none is found. /// Task GetVanityInviteAsync(RequestOptions options = null); @@ -582,7 +709,7 @@ namespace Discord /// /// The snowflake identifier for the role. /// - /// A role that is associated with the specified ; null if none is found. + /// A role that is associated with the specified ; if none is found. /// IRole GetRole(ulong id); /// @@ -624,7 +751,7 @@ namespace Discord /// The OAuth2 access token for the user, requested with the guilds.join scope. /// The delegate containing the properties to be applied to the user upon being added to the guild. /// The options to be used when sending the request. - /// A guild user associated with the specified ; null if the user is already in the guild. + /// A guild user associated with the specified ; if the user is already in the guild. Task AddGuildUserAsync(ulong userId, string accessToken, Action func = null, RequestOptions options = null); /// /// Gets a collection of all users in this guild. @@ -649,7 +776,7 @@ namespace Discord /// /// This method retrieves a user found within this guild. /// - /// This may return null in the WebSocket implementation due to incomplete user collection in + /// This may return in the WebSocket implementation due to incomplete user collection in /// large guilds. /// /// @@ -658,7 +785,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the guild user - /// associated with the specified ; null if none is found. + /// associated with the specified ; if none is found. /// Task GetUserAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); /// @@ -752,7 +879,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the webhook with the - /// specified ; null if none is found. + /// specified ; if none is found. /// Task GetWebhookAsync(ulong id, RequestOptions options = null); /// @@ -772,7 +899,7 @@ namespace Discord /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the emote found with the - /// specified ; null if none is found. + /// specified ; if none is found. /// Task GetEmoteAsync(ulong id, RequestOptions options = null); /// diff --git a/src/Discord.Net.Core/Entities/IUpdateable.cs b/src/Discord.Net.Core/Entities/IUpdateable.cs index 3ae4613f5..d561e57a6 100644 --- a/src/Discord.Net.Core/Entities/IUpdateable.cs +++ b/src/Discord.Net.Core/Entities/IUpdateable.cs @@ -10,6 +10,7 @@ namespace Discord /// /// Updates this object's properties with its current state. /// + /// The options to be used when sending the request. Task UpdateAsync(RequestOptions options = null); } } diff --git a/src/Discord.Net.Rest/API/Common/Guild.cs b/src/Discord.Net.Rest/API/Common/Guild.cs index 56bd841ea..414929a7b 100644 --- a/src/Discord.Net.Rest/API/Common/Guild.cs +++ b/src/Discord.Net.Rest/API/Common/Guild.cs @@ -13,6 +13,8 @@ namespace Discord.API public string Icon { get; set; } [JsonProperty("splash")] public string Splash { get; set; } + [JsonProperty("discovery_splash")] + public string DiscoverySplash { get; set; } [JsonProperty("owner_id")] public ulong OwnerId { get; set; } [JsonProperty("region")] @@ -22,9 +24,9 @@ namespace Discord.API [JsonProperty("afk_timeout")] public int AFKTimeout { get; set; } [JsonProperty("embed_enabled")] - public bool EmbedEnabled { get; set; } + public Optional EmbedEnabled { get; set; } [JsonProperty("embed_channel_id")] - public ulong? EmbedChannelId { get; set; } + public Optional EmbedChannelId { get; set; } [JsonProperty("verification_level")] public VerificationLevel VerificationLevel { get; set; } [JsonProperty("default_message_notifications")] @@ -43,6 +45,10 @@ namespace Discord.API public MfaLevel MfaLevel { get; set; } [JsonProperty("application_id")] public ulong? ApplicationId { get; set; } + [JsonProperty("widget_enabled")] + public Optional WidgetEnabled { get; set; } + [JsonProperty("widget_channel_id")] + public Optional WidgetChannelId { get; set; } [JsonProperty("system_channel_id")] public ulong? SystemChannelId { get; set; } [JsonProperty("premium_tier")] @@ -56,9 +62,23 @@ namespace Discord.API // this value is inverted, flags set will turn OFF features [JsonProperty("system_channel_flags")] public SystemChannelMessageDeny SystemChannelFlags { get; set; } + [JsonProperty("rules_channel_id")] + public ulong? RulesChannelId { get; set; } + [JsonProperty("max_presences")] + public Optional MaxPresences { get; set; } + [JsonProperty("max_members")] + public Optional MaxMembers { get; set; } [JsonProperty("premium_subscription_count")] - public int? PremiumSubscriptionCount { get; set; } + public Optional PremiumSubscriptionCount { get; set; } [JsonProperty("preferred_locale")] public string PreferredLocale { get; set; } + [JsonProperty("public_updates_channel_id")] + public ulong? PublicUpdatesChannelId { get; set; } + [JsonProperty("max_video_channel_users")] + public Optional MaxVideoChannelUsers { get; set; } + [JsonProperty("approximate_member_count")] + public Optional ApproximateMemberCount { get; set; } + [JsonProperty("approximate_presence_count")] + public Optional ApproximatePresenceCount { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Common/GuildWidget.cs b/src/Discord.Net.Rest/API/Common/GuildWidget.cs new file mode 100644 index 000000000..c15ad8aac --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/GuildWidget.cs @@ -0,0 +1,13 @@ +#pragma warning disable CS1591 +using Newtonsoft.Json; + +namespace Discord.API +{ + internal class GuildWidget + { + [JsonProperty("enabled")] + public bool Enabled { get; set; } + [JsonProperty("channel_id")] + public ulong? ChannelId { get; set; } + } +} diff --git a/src/Discord.Net.Rest/API/Rest/ModifyGuildWidgetParams.cs b/src/Discord.Net.Rest/API/Rest/ModifyGuildWidgetParams.cs new file mode 100644 index 000000000..506f1dfbb --- /dev/null +++ b/src/Discord.Net.Rest/API/Rest/ModifyGuildWidgetParams.cs @@ -0,0 +1,14 @@ +#pragma warning disable CS1591 +using Newtonsoft.Json; + +namespace Discord.API.Rest +{ + [JsonObject(MemberSerialization = MemberSerialization.OptIn)] + internal class ModifyGuildWidgetParams + { + [JsonProperty("enabled")] + public Optional Enabled { get; set; } + [JsonProperty("channel")] + public Optional ChannelId { get; set; } + } +} diff --git a/src/Discord.Net.Rest/ClientHelper.cs b/src/Discord.Net.Rest/ClientHelper.cs index a8f6b58ef..6ebdbcacb 100644 --- a/src/Discord.Net.Rest/ClientHelper.cs +++ b/src/Discord.Net.Rest/ClientHelper.cs @@ -62,9 +62,9 @@ namespace Discord.Rest } public static async Task GetGuildAsync(BaseDiscordClient client, - ulong id, RequestOptions options) + ulong id, bool withCounts, RequestOptions options) { - var model = await client.ApiClient.GetGuildAsync(id, options).ConfigureAwait(false); + var model = await client.ApiClient.GetGuildAsync(id, withCounts, options).ConfigureAwait(false); if (model != null) return RestGuild.Create(client, model); return null; @@ -77,6 +77,14 @@ namespace Discord.Rest return RestGuildEmbed.Create(model); return null; } + public static async Task GetGuildWidgetAsync(BaseDiscordClient client, + ulong id, RequestOptions options) + { + var model = await client.ApiClient.GetGuildWidgetAsync(id, options).ConfigureAwait(false); + if (model != null) + return RestGuildWidget.Create(model); + return null; + } public static IAsyncEnumerable> GetGuildSummariesAsync(BaseDiscordClient client, ulong? fromGuildId, int? limit, RequestOptions options) { @@ -106,13 +114,13 @@ namespace Discord.Rest count: limit ); } - public static async Task> GetGuildsAsync(BaseDiscordClient client, RequestOptions options) + public static async Task> GetGuildsAsync(BaseDiscordClient client, bool withCounts, RequestOptions options) { var summaryModels = await GetGuildSummariesAsync(client, null, null, options).FlattenAsync().ConfigureAwait(false); var guilds = ImmutableArray.CreateBuilder(); foreach (var summaryModel in summaryModels) { - var guildModel = await client.ApiClient.GetGuildAsync(summaryModel.Id).ConfigureAwait(false); + var guildModel = await client.ApiClient.GetGuildAsync(summaryModel.Id, withCounts).ConfigureAwait(false); if (guildModel != null) guilds.Add(RestGuild.Create(client, guildModel)); } @@ -140,7 +148,7 @@ namespace Discord.Rest public static async Task GetGuildUserAsync(BaseDiscordClient client, ulong guildId, ulong id, RequestOptions options) { - var guild = await GetGuildAsync(client, guildId, options).ConfigureAwait(false); + var guild = await GetGuildAsync(client, guildId, false, options).ConfigureAwait(false); if (guild == null) return null; diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index 27658e7ac..592ad7e92 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -787,7 +787,7 @@ namespace Discord.API } //Guilds - public async Task GetGuildAsync(ulong guildId, RequestOptions options = null) + public async Task GetGuildAsync(ulong guildId, bool withCounts, RequestOptions options = null) { Preconditions.NotEqual(guildId, 0, nameof(guildId)); options = RequestOptions.CreateOrClone(options); @@ -795,7 +795,7 @@ namespace Discord.API try { var ids = new BucketIds(guildId: guildId); - return await SendAsync("GET", () => $"guilds/{guildId}", ids, options: options).ConfigureAwait(false); + return await SendAsync("GET", () => $"guilds/{guildId}?with_counts={(withCounts ? "true" : "false")}", ids, options: options).ConfigureAwait(false); } catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.NotFound) { return null; } } @@ -938,6 +938,32 @@ namespace Discord.API return await SendJsonAsync("PATCH", () => $"guilds/{guildId}/embed", args, ids, options: options).ConfigureAwait(false); } + //Guild Widget + /// must not be equal to zero. + public async Task GetGuildWidgetAsync(ulong guildId, RequestOptions options = null) + { + Preconditions.NotEqual(guildId, 0, nameof(guildId)); + options = RequestOptions.CreateOrClone(options); + + try + { + var ids = new BucketIds(guildId: guildId); + return await SendAsync("GET", () => $"guilds/{guildId}/widget", ids, options: options).ConfigureAwait(false); + } + catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.NotFound) { return null; } + } + /// must not be equal to zero. + /// must not be . + public async Task ModifyGuildWidgetAsync(ulong guildId, Rest.ModifyGuildWidgetParams args, RequestOptions options = null) + { + Preconditions.NotNull(args, nameof(args)); + Preconditions.NotEqual(guildId, 0, nameof(guildId)); + options = RequestOptions.CreateOrClone(options); + + var ids = new BucketIds(guildId: guildId); + return await SendJsonAsync("PATCH", () => $"guilds/{guildId}/widget", args, ids, options: options).ConfigureAwait(false); + } + //Guild Integrations /// must not be equal to zero. public async Task> GetGuildIntegrationsAsync(ulong guildId, RequestOptions options = null) diff --git a/src/Discord.Net.Rest/DiscordRestClient.cs b/src/Discord.Net.Rest/DiscordRestClient.cs index 4c29d1625..bef4e6b2a 100644 --- a/src/Discord.Net.Rest/DiscordRestClient.cs +++ b/src/Discord.Net.Rest/DiscordRestClient.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Collections.Immutable; using System.IO; @@ -76,15 +77,22 @@ namespace Discord.Rest => ClientHelper.GetInviteAsync(this, inviteId, options); public Task GetGuildAsync(ulong id, RequestOptions options = null) - => ClientHelper.GetGuildAsync(this, id, options); + => ClientHelper.GetGuildAsync(this, id, false, options); + public Task GetGuildAsync(ulong id, bool withCounts, RequestOptions options = null) + => ClientHelper.GetGuildAsync(this, id, withCounts, options); + [Obsolete("This endpoint is deprecated, use GetGuildWidgetAsync instead.")] public Task GetGuildEmbedAsync(ulong id, RequestOptions options = null) => ClientHelper.GetGuildEmbedAsync(this, id, options); + public Task GetGuildWidgetAsync(ulong id, RequestOptions options = null) + => ClientHelper.GetGuildWidgetAsync(this, id, options); public IAsyncEnumerable> GetGuildSummariesAsync(RequestOptions options = null) => ClientHelper.GetGuildSummariesAsync(this, null, null, options); public IAsyncEnumerable> GetGuildSummariesAsync(ulong fromGuildId, int limit, RequestOptions options = null) => ClientHelper.GetGuildSummariesAsync(this, fromGuildId, limit, options); public Task> GetGuildsAsync(RequestOptions options = null) - => ClientHelper.GetGuildsAsync(this, options); + => ClientHelper.GetGuildsAsync(this, false, options); + public Task> GetGuildsAsync(bool withCounts, RequestOptions options = null) + => ClientHelper.GetGuildsAsync(this, withCounts, options); public Task CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null, RequestOptions options = null) => ClientHelper.CreateGuildAsync(this, name, region, jpegIcon, options); diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs index 225c53edf..04ec27930 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs @@ -5,6 +5,7 @@ using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using EmbedModel = Discord.API.GuildEmbed; +using WidgetModel = Discord.API.GuildWidget; using Model = Discord.API.Guild; using RoleModel = Discord.API.Role; using ImageModel = Discord.API.Image; @@ -99,6 +100,27 @@ namespace Discord.Rest return await client.ApiClient.ModifyGuildEmbedAsync(guild.Id, apiArgs, options).ConfigureAwait(false); } + /// is null. + public static async Task ModifyWidgetAsync(IGuild guild, BaseDiscordClient client, + Action func, RequestOptions options) + { + if (func == null) + throw new ArgumentNullException(nameof(func)); + + var args = new GuildWidgetProperties(); + func(args); + var apiArgs = new API.Rest.ModifyGuildWidgetParams + { + Enabled = args.Enabled + }; + + if (args.Channel.IsSpecified) + apiArgs.ChannelId = args.Channel.Value?.Id; + else if (args.ChannelId.IsSpecified) + apiArgs.ChannelId = args.ChannelId.Value; + + return await client.ApiClient.ModifyGuildWidgetAsync(guild.Id, apiArgs, options).ConfigureAwait(false); + } public static async Task ReorderChannelsAsync(IGuild guild, BaseDiscordClient client, IEnumerable args, RequestOptions options) { diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs index 482eaf556..c1dd39afe 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs @@ -7,6 +7,7 @@ using System.Globalization; using System.Linq; using System.Threading.Tasks; using EmbedModel = Discord.API.GuildEmbed; +using WidgetModel = Discord.API.GuildWidget; using Model = Discord.API.Guild; namespace Discord.Rest @@ -28,6 +29,8 @@ namespace Discord.Rest /// public bool IsEmbeddable { get; private set; } /// + public bool IsWidgetEnabled { get; private set; } + /// public VerificationLevel VerificationLevel { get; private set; } /// public MfaLevel MfaLevel { get; private set; } @@ -41,8 +44,14 @@ namespace Discord.Rest /// public ulong? EmbedChannelId { get; private set; } /// + public ulong? WidgetChannelId { get; private set; } + /// public ulong? SystemChannelId { get; private set; } /// + public ulong? RulesChannelId { get; private set; } + /// + public ulong? PublicUpdatesChannelId { get; private set; } + /// public ulong OwnerId { get; private set; } /// public string VoiceRegionId { get; private set; } @@ -50,6 +59,8 @@ namespace Discord.Rest public string IconId { get; private set; } /// public string SplashId { get; private set; } + /// + public string DiscoverySplashId { get; private set; } internal bool Available { get; private set; } /// public ulong? ApplicationId { get; private set; } @@ -67,6 +78,16 @@ namespace Discord.Rest public int PremiumSubscriptionCount { get; private set; } /// public string PreferredLocale { get; private set; } + /// + public int? MaxPresences { get; private set; } + /// + public int? MaxMembers { get; private set; } + /// + public int? MaxVideoChannelUsers { get; private set; } + /// + public int? ApproximateMemberCount { get; private set; } + /// + public int? ApproximatePresenceCount { get; private set; } /// public CultureInfo PreferredCulture { get; private set; } @@ -81,6 +102,8 @@ namespace Discord.Rest /// public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); /// + public string DiscoverySplashUrl => CDN.GetGuildDiscoverySplashUrl(Id, DiscoverySplashId); + /// public string BannerUrl => CDN.GetGuildBannerUrl(Id, BannerId); /// @@ -110,15 +133,24 @@ namespace Discord.Rest internal void Update(Model model) { AFKChannelId = model.AFKChannelId; - EmbedChannelId = model.EmbedChannelId; + if (model.EmbedChannelId.IsSpecified) + EmbedChannelId = model.EmbedChannelId.Value; + if (model.WidgetChannelId.IsSpecified) + WidgetChannelId = model.WidgetChannelId.Value; SystemChannelId = model.SystemChannelId; + RulesChannelId = model.RulesChannelId; + PublicUpdatesChannelId = model.PublicUpdatesChannelId; AFKTimeout = model.AFKTimeout; - IsEmbeddable = model.EmbedEnabled; + if (model.EmbedEnabled.IsSpecified) + IsEmbeddable = model.EmbedEnabled.Value; + if (model.WidgetEnabled.IsSpecified) + IsWidgetEnabled = model.WidgetEnabled.Value; IconId = model.Icon; Name = model.Name; OwnerId = model.OwnerId; VoiceRegionId = model.Region; SplashId = model.Splash; + DiscoverySplashId = model.DiscoverySplash; VerificationLevel = model.VerificationLevel; MfaLevel = model.MfaLevel; DefaultMessageNotifications = model.DefaultMessageNotifications; @@ -129,9 +161,20 @@ namespace Discord.Rest BannerId = model.Banner; SystemChannelFlags = model.SystemChannelFlags; Description = model.Description; - PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); + if (model.PremiumSubscriptionCount.IsSpecified) + PremiumSubscriptionCount = model.PremiumSubscriptionCount.Value; + if (model.MaxPresences.IsSpecified) + MaxPresences = model.MaxPresences.Value ?? 25000; + if (model.MaxMembers.IsSpecified) + MaxMembers = model.MaxMembers.Value; + if (model.MaxVideoChannelUsers.IsSpecified) + MaxVideoChannelUsers = model.MaxVideoChannelUsers.Value; PreferredLocale = model.PreferredLocale; PreferredCulture = new CultureInfo(PreferredLocale); + if (model.ApproximateMemberCount.IsSpecified) + ApproximateMemberCount = model.ApproximateMemberCount.Value; + if (model.ApproximatePresenceCount.IsSpecified) + ApproximatePresenceCount = model.ApproximatePresenceCount.Value; if (model.Emojis != null) { @@ -163,17 +206,36 @@ namespace Discord.Rest EmbedChannelId = model.ChannelId; IsEmbeddable = model.Enabled; } + internal void Update(WidgetModel model) + { + WidgetChannelId = model.ChannelId; + IsWidgetEnabled = model.Enabled; + } //General /// public async Task UpdateAsync(RequestOptions options = null) - => Update(await Discord.ApiClient.GetGuildAsync(Id, options).ConfigureAwait(false)); + => Update(await Discord.ApiClient.GetGuildAsync(Id, false, options).ConfigureAwait(false)); + /// + /// Updates this object's properties with its current state. + /// + /// + /// If true, and + /// will be updated as well. + /// + /// The options to be used when sending the request. + /// + /// If is true, and + /// will be updated as well. + /// + public async Task UpdateAsync(bool withCounts, RequestOptions options = null) + => Update(await Discord.ApiClient.GetGuildAsync(Id, withCounts, options).ConfigureAwait(false)); /// public Task DeleteAsync(RequestOptions options = null) => GuildHelper.DeleteAsync(this, Discord, options); /// - /// is null. + /// is . public async Task ModifyAsync(Action func, RequestOptions options = null) { var model = await GuildHelper.ModifyAsync(this, Discord, func, options).ConfigureAwait(false); @@ -181,7 +243,8 @@ namespace Discord.Rest } /// - /// is null. + /// is . + [Obsolete("This endpoint is deprecated, use ModifyWidgetAsync instead.")] public async Task ModifyEmbedAsync(Action func, RequestOptions options = null) { var model = await GuildHelper.ModifyEmbedAsync(this, Discord, func, options).ConfigureAwait(false); @@ -189,7 +252,15 @@ namespace Discord.Rest } /// - /// is null. + /// is . + public async Task ModifyWidgetAsync(Action func, RequestOptions options = null) + { + var model = await GuildHelper.ModifyWidgetAsync(this, Discord, func, options).ConfigureAwait(false); + Update(model); + } + + /// + /// is . public async Task ReorderChannelsAsync(IEnumerable args, RequestOptions options = null) { var arr = args.ToArray(); @@ -230,7 +301,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains a ban object, which - /// contains the user information and the reason for the ban; null if the ban entry cannot be found. + /// contains the user information and the reason for the ban; if the ban entry cannot be found. /// public Task GetBanAsync(IUser user, RequestOptions options = null) => GuildHelper.GetBanAsync(this, Discord, user.Id, options); @@ -241,7 +312,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains a ban object, which - /// contains the user information and the reason for the ban; null if the ban entry cannot be found. + /// contains the user information and the reason for the ban; if the ban entry cannot be found. /// public Task GetBanAsync(ulong userId, RequestOptions options = null) => GuildHelper.GetBanAsync(this, Discord, userId, options); @@ -279,7 +350,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the generic channel - /// associated with the specified ; null if none is found. + /// associated with the specified ; if none is found. /// public Task GetChannelAsync(ulong id, RequestOptions options = null) => GuildHelper.GetChannelAsync(this, Discord, id, options); @@ -291,7 +362,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the text channel - /// associated with the specified ; null if none is found. + /// associated with the specified ; if none is found. /// public async Task GetTextChannelAsync(ulong id, RequestOptions options = null) { @@ -320,7 +391,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the voice channel associated - /// with the specified ; null if none is found. + /// with the specified ; if none is found. /// public async Task GetVoiceChannelAsync(ulong id, RequestOptions options = null) { @@ -362,7 +433,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the voice channel that the - /// AFK users will be moved to after they have idled for too long; null if none is set. + /// AFK users will be moved to after they have idled for too long; if none is set. /// public async Task GetAFKChannelAsync(RequestOptions options = null) { @@ -381,7 +452,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the first viewable text - /// channel in this guild; null if none is found. + /// channel in this guild; if none is found. /// public async Task GetDefaultChannelAsync(RequestOptions options = null) { @@ -399,8 +470,9 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the embed channel set - /// within the server's widget settings; null if none is set. + /// within the server's widget settings; if none is set. /// + [Obsolete("This endpoint is deprecated, use GetWidgetChannelAsync instead.")] public async Task GetEmbedChannelAsync(RequestOptions options = null) { var embedId = EmbedChannelId; @@ -410,12 +482,28 @@ namespace Discord.Rest } /// - /// Gets the first viewable text channel in this guild. + /// Gets the widget channel (i.e. the channel set in the guild's widget settings) in this guild. /// /// The options to be used when sending the request. /// - /// A task that represents the asynchronous get operation. The task result contains the first viewable text - /// channel in this guild; null if none is found. + /// A task that represents the asynchronous get operation. The task result contains the widget channel set + /// within the server's widget settings; if none is set. + /// + public async Task GetWidgetChannelAsync(RequestOptions options = null) + { + var widgetChannelId = WidgetChannelId; + if (widgetChannelId.HasValue) + return await GuildHelper.GetChannelAsync(this, Discord, widgetChannelId.Value, options).ConfigureAwait(false); + return null; + } + + /// + /// Gets the text channel where guild notices such as welcome messages and boost events are posted. + /// + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains the text channel + /// where guild notices such as welcome messages and boost events are poste; if none is found. /// public async Task GetSystemChannelAsync(RequestOptions options = null) { @@ -427,6 +515,45 @@ namespace Discord.Rest } return null; } + + /// + /// Gets the text channel where Community guilds can display rules and/or guidelines. + /// + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains the text channel + /// where Community guilds can display rules and/or guidelines; if none is set. + /// + public async Task GetRulesChannelAsync(RequestOptions options = null) + { + var rulesChannelId = RulesChannelId; + if (rulesChannelId.HasValue) + { + var channel = await GuildHelper.GetChannelAsync(this, Discord, rulesChannelId.Value, options).ConfigureAwait(false); + return channel as RestTextChannel; + } + return null; + } + + /// + /// Gets the text channel channel where admins and moderators of Community guilds receive notices from Discord. + /// + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains the text channel channel where + /// admins and moderators of Community guilds receive notices from Discord; if none is set. + /// + public async Task GetPublicUpdatesChannelAsync(RequestOptions options = null) + { + var publicUpdatesChannelId = PublicUpdatesChannelId; + if (publicUpdatesChannelId.HasValue) + { + var channel = await GuildHelper.GetChannelAsync(this, Discord, publicUpdatesChannelId.Value, options).ConfigureAwait(false); + return channel as RestTextChannel; + } + return null; + } + /// /// Creates a new text channel in this guild. /// @@ -458,7 +585,7 @@ namespace Discord.Rest /// The name of the new channel. /// The delegate containing the properties to be applied to the channel upon its creation. /// The options to be used when sending the request. - /// is null. + /// is . /// /// The created voice channel. /// @@ -470,7 +597,7 @@ namespace Discord.Rest /// The name of the new channel. /// The delegate containing the properties to be applied to the channel upon its creation. /// The options to be used when sending the request. - /// is null. + /// is . /// /// The created category channel. /// @@ -521,7 +648,7 @@ namespace Discord.Rest /// /// The snowflake identifier for the role. /// - /// A role that is associated with the specified ; null if none is found. + /// A role that is associated with the specified ; if none is found. /// public RestRole GetRole(ulong id) { @@ -585,7 +712,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the guild user - /// associated with the specified ; null if none is found. + /// associated with the specified ; if none is found. /// public Task GetUserAsync(ulong id, RequestOptions options = null) => GuildHelper.GetUserAsync(this, Discord, id, options); @@ -675,7 +802,7 @@ namespace Discord.Rest /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the webhook with the - /// specified ; null if none is found. + /// specified ; if none is found. /// public Task GetWebhookAsync(ulong id, RequestOptions options = null) => GuildHelper.GetWebhookAsync(this, Discord, id, options); @@ -708,7 +835,7 @@ namespace Discord.Rest public Task CreateEmoteAsync(string name, Image image, Optional> roles = default(Optional>), RequestOptions options = null) => GuildHelper.CreateEmoteAsync(this, Discord, name, image, roles, options); /// - /// is null. + /// is . public Task ModifyEmoteAsync(GuildEmote emote, Action func, RequestOptions options = null) => GuildHelper.ModifyEmoteAsync(this, Discord, emote.Id, func, options); /// @@ -808,6 +935,7 @@ namespace Discord.Rest return null; } /// + [Obsolete("This endpoint is deprecated, use GetWidgetChannelAsync instead.")] async Task IGuild.GetEmbedChannelAsync(CacheMode mode, RequestOptions options) { if (mode == CacheMode.AllowDownload) @@ -816,6 +944,14 @@ namespace Discord.Rest return null; } /// + async Task IGuild.GetWidgetChannelAsync(CacheMode mode, RequestOptions options) + { + if (mode == CacheMode.AllowDownload) + return await GetWidgetChannelAsync(options).ConfigureAwait(false); + else + return null; + } + /// async Task IGuild.GetSystemChannelAsync(CacheMode mode, RequestOptions options) { if (mode == CacheMode.AllowDownload) @@ -824,6 +960,22 @@ namespace Discord.Rest return null; } /// + async Task IGuild.GetRulesChannelAsync(CacheMode mode, RequestOptions options) + { + if (mode == CacheMode.AllowDownload) + return await GetRulesChannelAsync(options).ConfigureAwait(false); + else + return null; + } + /// + async Task IGuild.GetPublicUpdatesChannelAsync(CacheMode mode, RequestOptions options) + { + if (mode == CacheMode.AllowDownload) + return await GetPublicUpdatesChannelAsync(options).ConfigureAwait(false); + else + return null; + } + /// async Task IGuild.CreateTextChannelAsync(string name, Action func, RequestOptions options) => await CreateTextChannelAsync(name, func, options).ConfigureAwait(false); /// diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuildWidget.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuildWidget.cs new file mode 100644 index 000000000..065739c57 --- /dev/null +++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuildWidget.cs @@ -0,0 +1,25 @@ +using System.Diagnostics; +using Model = Discord.API.GuildWidget; + +namespace Discord.Rest +{ + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] + public struct RestGuildWidget + { + public bool IsEnabled { get; private set; } + public ulong? ChannelId { get; private set; } + + internal RestGuildWidget(bool isEnabled, ulong? channelId) + { + ChannelId = channelId; + IsEnabled = isEnabled; + } + internal static RestGuildWidget Create(Model model) + { + return new RestGuildWidget(model.Enabled, model.ChannelId); + } + + public override string ToString() => ChannelId?.ToString() ?? "Unknown"; + private string DebuggerDisplay => $"{ChannelId} ({(IsEnabled ? "Enabled" : "Disabled")})"; + } +} diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index a08ba06ef..2365ec6a6 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -48,6 +48,8 @@ namespace Discord.WebSocket /// public bool IsEmbeddable { get; private set; } /// + public bool IsWidgetEnabled { get; private set; } + /// public VerificationLevel VerificationLevel { get; private set; } /// public MfaLevel MfaLevel { get; private set; } @@ -83,7 +85,10 @@ namespace Discord.WebSocket internal ulong? AFKChannelId { get; private set; } internal ulong? EmbedChannelId { get; private set; } + internal ulong? WidgetChannelId { get; private set; } internal ulong? SystemChannelId { get; private set; } + internal ulong? RulesChannelId { get; private set; } + internal ulong? PublicUpdatesChannelId { get; private set; } /// public ulong OwnerId { get; private set; } /// Gets the user that owns this guild. @@ -95,6 +100,8 @@ namespace Discord.WebSocket /// public string SplashId { get; private set; } /// + public string DiscoverySplashId { get; private set; } + /// public PremiumTier PremiumTier { get; private set; } /// public string BannerId { get; private set; } @@ -108,6 +115,12 @@ namespace Discord.WebSocket public int PremiumSubscriptionCount { get; private set; } /// public string PreferredLocale { get; private set; } + /// + public int? MaxPresences { get; private set; } + /// + public int? MaxMembers { get; private set; } + /// + public int? MaxVideoChannelUsers { get; private set; } /// public CultureInfo PreferredCulture { get; private set; } @@ -119,6 +132,8 @@ namespace Discord.WebSocket /// public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); /// + public string DiscoverySplashUrl => CDN.GetGuildDiscoverySplashUrl(Id, DiscoverySplashId); + /// public string BannerUrl => CDN.GetGuildBannerUrl(Id, BannerId); /// Indicates whether the client has all the members downloaded to the local guild cache. public bool HasAllMembers => MemberCount == DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted; @@ -152,7 +167,7 @@ namespace Discord.WebSocket /// /// /// A that the AFK users will be moved to after they have idled for too - /// long; null if none is set. + /// long; if none is set. /// public SocketVoiceChannel AFKChannel { @@ -166,8 +181,9 @@ namespace Discord.WebSocket /// Gets the embed channel (i.e. the channel set in the guild's widget settings) in this guild. /// /// - /// A channel set within the server's widget settings; null if none is set. + /// A channel set within the server's widget settings; if none is set. /// + [Obsolete("This property is deprecated, use WidgetChannel instead.")] public SocketGuildChannel EmbedChannel { get @@ -177,10 +193,24 @@ namespace Discord.WebSocket } } /// + /// Gets the widget channel (i.e. the channel set in the guild's widget settings) in this guild. + /// + /// + /// A channel set within the server's widget settings; if none is set. + /// + public SocketGuildChannel WidgetChannel + { + get + { + var id = WidgetChannelId; + return id.HasValue ? GetChannel(id.Value) : null; + } + } + /// /// Gets the system channel where randomized welcome messages are sent in this guild. /// /// - /// A text channel where randomized welcome messages will be sent to; null if none is set. + /// A text channel where randomized welcome messages will be sent to; if none is set. /// public SocketTextChannel SystemChannel { @@ -191,6 +221,36 @@ namespace Discord.WebSocket } } /// + /// Gets the channel with the guild rules. + /// + /// + /// A text channel with the guild rules; if none is set. + /// + public SocketTextChannel RulesChannel + { + get + { + var id = RulesChannelId; + return id.HasValue ? GetTextChannel(id.Value) : null; + } + } + /// + /// Gets the channel where admins and moderators of Community guilds receive + /// notices from Discord. + /// + /// + /// A text channel where admins and moderators of Community guilds receive + /// notices from Discord; if none is set. + /// + public SocketTextChannel PublicUpdatesChannel + { + get + { + var id = PublicUpdatesChannelId; + return id.HasValue ? GetTextChannel(id.Value) : null; + } + } + /// /// Gets a collection of all text channels in this guild. /// /// @@ -360,15 +420,24 @@ namespace Discord.WebSocket internal void Update(ClientState state, Model model) { AFKChannelId = model.AFKChannelId; - EmbedChannelId = model.EmbedChannelId; + if (model.EmbedChannelId.IsSpecified) + EmbedChannelId = model.EmbedChannelId.Value; + if (model.WidgetChannelId.IsSpecified) + WidgetChannelId = model.WidgetChannelId.Value; SystemChannelId = model.SystemChannelId; + RulesChannelId = model.RulesChannelId; + PublicUpdatesChannelId = model.PublicUpdatesChannelId; AFKTimeout = model.AFKTimeout; - IsEmbeddable = model.EmbedEnabled; + if (model.EmbedEnabled.IsSpecified) + IsEmbeddable = model.EmbedEnabled.Value; + if (model.WidgetEnabled.IsSpecified) + IsWidgetEnabled = model.WidgetEnabled.Value; IconId = model.Icon; Name = model.Name; OwnerId = model.OwnerId; VoiceRegionId = model.Region; SplashId = model.Splash; + DiscoverySplashId = model.DiscoverySplash; VerificationLevel = model.VerificationLevel; MfaLevel = model.MfaLevel; DefaultMessageNotifications = model.DefaultMessageNotifications; @@ -379,7 +448,14 @@ namespace Discord.WebSocket BannerId = model.Banner; SystemChannelFlags = model.SystemChannelFlags; Description = model.Description; - PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); + if (model.PremiumSubscriptionCount.IsSpecified) + PremiumSubscriptionCount = model.PremiumSubscriptionCount.Value; + if (model.MaxPresences.IsSpecified) + MaxPresences = model.MaxPresences.Value ?? 25000; + if (model.MaxMembers.IsSpecified) + MaxMembers = model.MaxMembers.Value; + if (model.MaxVideoChannelUsers.IsSpecified) + MaxVideoChannelUsers = model.MaxVideoChannelUsers.Value; PreferredLocale = model.PreferredLocale; PreferredCulture = PreferredLocale == null ? null : new CultureInfo(PreferredLocale); @@ -447,15 +523,20 @@ namespace Discord.WebSocket => GuildHelper.DeleteAsync(this, Discord, options); /// - /// is null. + /// is . public Task ModifyAsync(Action func, RequestOptions options = null) => GuildHelper.ModifyAsync(this, Discord, func, options); /// - /// is null. + /// is . + [Obsolete("This endpoint is deprecated, use ModifyWidgetAsync instead.")] public Task ModifyEmbedAsync(Action func, RequestOptions options = null) => GuildHelper.ModifyEmbedAsync(this, Discord, func, options); /// + /// is . + public Task ModifyWidgetAsync(Action func, RequestOptions options = null) + => GuildHelper.ModifyWidgetAsync(this, Discord, func, options); + /// public Task ReorderChannelsAsync(IEnumerable args, RequestOptions options = null) => GuildHelper.ReorderChannelsAsync(this, Discord, args, options); /// @@ -485,7 +566,7 @@ namespace Discord.WebSocket /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains a ban object, which - /// contains the user information and the reason for the ban; null if the ban entry cannot be found. + /// contains the user information and the reason for the ban; if the ban entry cannot be found. /// public Task GetBanAsync(IUser user, RequestOptions options = null) => GuildHelper.GetBanAsync(this, Discord, user.Id, options); @@ -496,7 +577,7 @@ namespace Discord.WebSocket /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains a ban object, which - /// contains the user information and the reason for the ban; null if the ban entry cannot be found. + /// contains the user information and the reason for the ban; if the ban entry cannot be found. /// public Task GetBanAsync(ulong userId, RequestOptions options = null) => GuildHelper.GetBanAsync(this, Discord, userId, options); @@ -521,7 +602,7 @@ namespace Discord.WebSocket /// /// The snowflake identifier for the channel. /// - /// A generic channel associated with the specified ; null if none is found. + /// A generic channel associated with the specified ; if none is found. /// public SocketGuildChannel GetChannel(ulong id) { @@ -535,7 +616,7 @@ namespace Discord.WebSocket /// /// The snowflake identifier for the text channel. /// - /// A text channel associated with the specified ; null if none is found. + /// A text channel associated with the specified ; if none is found. /// public SocketTextChannel GetTextChannel(ulong id) => GetChannel(id) as SocketTextChannel; @@ -544,7 +625,7 @@ namespace Discord.WebSocket /// /// The snowflake identifier for the voice channel. /// - /// A voice channel associated with the specified ; null if none is found. + /// A voice channel associated with the specified ; if none is found. /// public SocketVoiceChannel GetVoiceChannel(ulong id) => GetChannel(id) as SocketVoiceChannel; @@ -553,7 +634,7 @@ namespace Discord.WebSocket /// /// The snowflake identifier for the category channel. /// - /// A category channel associated with the specified ; null if none is found. + /// A category channel associated with the specified ; if none is found. /// public SocketCategoryChannel GetCategoryChannel(ulong id) => GetChannel(id) as SocketCategoryChannel; @@ -589,7 +670,7 @@ namespace Discord.WebSocket /// The new name for the voice channel. /// The delegate containing the properties to be applied to the channel upon its creation. /// The options to be used when sending the request. - /// is null. + /// is . /// /// A task that represents the asynchronous creation operation. The task result contains the newly created /// voice channel. @@ -602,7 +683,7 @@ namespace Discord.WebSocket /// The new name for the category. /// The delegate containing the properties to be applied to the channel upon its creation. /// The options to be used when sending the request. - /// is null. + /// is . /// /// A task that represents the asynchronous creation operation. The task result contains the newly created /// category channel. @@ -666,7 +747,7 @@ namespace Discord.WebSocket /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the partial metadata of - /// the vanity invite found within this guild; null if none is found. + /// the vanity invite found within this guild; if none is found. /// public Task GetVanityInviteAsync(RequestOptions options = null) => GuildHelper.GetVanityInviteAsync(this, Discord, options); @@ -677,7 +758,7 @@ namespace Discord.WebSocket /// /// The snowflake identifier for the role. /// - /// A role that is associated with the specified ; null if none is found. + /// A role that is associated with the specified ; if none is found. /// public SocketRole GetRole(ulong id) { @@ -699,7 +780,7 @@ namespace Discord.WebSocket /// Whether the role is separated from others on the sidebar. /// Whether the role can be mentioned. /// The options to be used when sending the request. - /// is null. + /// is . /// /// A task that represents the asynchronous creation operation. The task result contains the newly created /// role. @@ -731,13 +812,13 @@ namespace Discord.WebSocket /// /// This method retrieves a user found within this guild. /// - /// This may return null in the WebSocket implementation due to incomplete user collection in + /// This may return in the WebSocket implementation due to incomplete user collection in /// large guilds. /// /// /// The snowflake identifier of the user. /// - /// A guild user associated with the specified ; null if none is found. + /// A guild user associated with the specified ; if none is found. /// public SocketGuildUser GetUser(ulong id) { @@ -891,7 +972,7 @@ namespace Discord.WebSocket /// The options to be used when sending the request. /// /// A task that represents the asynchronous get operation. The task result contains the webhook with the - /// specified ; null if none is found. + /// specified ; if none is found. /// public Task GetWebhookAsync(ulong id, RequestOptions options = null) => GuildHelper.GetWebhookAsync(this, Discord, id, options); @@ -914,7 +995,7 @@ namespace Discord.WebSocket public Task CreateEmoteAsync(string name, Image image, Optional> roles = default(Optional>), RequestOptions options = null) => GuildHelper.CreateEmoteAsync(this, Discord, name, image, roles, options); /// - /// is null. + /// is . public Task ModifyEmoteAsync(GuildEmote emote, Action func, RequestOptions options = null) => GuildHelper.ModifyEmoteAsync(this, Discord, emote.Id, func, options); /// @@ -1133,11 +1214,21 @@ namespace Discord.WebSocket /// ulong? IGuild.EmbedChannelId => EmbedChannelId; /// + ulong? IGuild.WidgetChannelId => WidgetChannelId; + /// ulong? IGuild.SystemChannelId => SystemChannelId; /// + ulong? IGuild.RulesChannelId => RulesChannelId; + /// + ulong? IGuild.PublicUpdatesChannelId => PublicUpdatesChannelId; + /// IRole IGuild.EveryoneRole => EveryoneRole; /// IReadOnlyCollection IGuild.Roles => Roles; + /// + int? IGuild.ApproximateMemberCount => null; + /// + int? IGuild.ApproximatePresenceCount => null; /// async Task> IGuild.GetBansAsync(RequestOptions options) @@ -1177,12 +1268,22 @@ namespace Discord.WebSocket Task IGuild.GetDefaultChannelAsync(CacheMode mode, RequestOptions options) => Task.FromResult(DefaultChannel); /// + [Obsolete("This method is deprecated, use GetWidgetChannelAsync instead.")] Task IGuild.GetEmbedChannelAsync(CacheMode mode, RequestOptions options) => Task.FromResult(EmbedChannel); /// + Task IGuild.GetWidgetChannelAsync(CacheMode mode, RequestOptions options) + => Task.FromResult(WidgetChannel); + /// Task IGuild.GetSystemChannelAsync(CacheMode mode, RequestOptions options) => Task.FromResult(SystemChannel); /// + Task IGuild.GetRulesChannelAsync(CacheMode mode, RequestOptions options) + => Task.FromResult(RulesChannel); + /// + Task IGuild.GetPublicUpdatesChannelAsync(CacheMode mode, RequestOptions options) + => Task.FromResult(PublicUpdatesChannel); + /// async Task IGuild.CreateTextChannelAsync(string name, Action func, RequestOptions options) => await CreateTextChannelAsync(name, func, options).ConfigureAwait(false); /// From 97e71cd5e5e825e6f0a63eb3bf5a0cd1690fd652 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 18 Nov 2020 14:52:00 -0300 Subject: [PATCH 37/76] fix: Revert PremiumSubscriptionCount type (#1686) --- src/Discord.Net.Rest/API/Common/Guild.cs | 2 +- src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs | 3 +-- src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net.Rest/API/Common/Guild.cs b/src/Discord.Net.Rest/API/Common/Guild.cs index 414929a7b..46075ce4d 100644 --- a/src/Discord.Net.Rest/API/Common/Guild.cs +++ b/src/Discord.Net.Rest/API/Common/Guild.cs @@ -69,7 +69,7 @@ namespace Discord.API [JsonProperty("max_members")] public Optional MaxMembers { get; set; } [JsonProperty("premium_subscription_count")] - public Optional PremiumSubscriptionCount { get; set; } + public int? PremiumSubscriptionCount { get; set; } [JsonProperty("preferred_locale")] public string PreferredLocale { get; set; } [JsonProperty("public_updates_channel_id")] diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs index c1dd39afe..c74e128a8 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs @@ -161,8 +161,7 @@ namespace Discord.Rest BannerId = model.Banner; SystemChannelFlags = model.SystemChannelFlags; Description = model.Description; - if (model.PremiumSubscriptionCount.IsSpecified) - PremiumSubscriptionCount = model.PremiumSubscriptionCount.Value; + PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); if (model.MaxPresences.IsSpecified) MaxPresences = model.MaxPresences.Value ?? 25000; if (model.MaxMembers.IsSpecified) diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index 2365ec6a6..ad58a735e 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -448,8 +448,7 @@ namespace Discord.WebSocket BannerId = model.Banner; SystemChannelFlags = model.SystemChannelFlags; Description = model.Description; - if (model.PremiumSubscriptionCount.IsSpecified) - PremiumSubscriptionCount = model.PremiumSubscriptionCount.Value; + PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); if (model.MaxPresences.IsSpecified) MaxPresences = model.MaxPresences.Value ?? 25000; if (model.MaxMembers.IsSpecified) From ec673e186317cd7449eabf2adf29dc78a5e22b90 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 18 Nov 2020 23:40:09 -0300 Subject: [PATCH 38/76] feature: Implement gateway ratelimit (#1537) * Implement gateway ratelimit * Remove unused code * Share WebSocketRequestQueue between clients * Add global limit and a way to change gateway limits * Refactoring variable to fit lib standards * Update xml docs * Update xml docs * Move warning to remarks * Remove specific RequestQueue for WebSocket and other changes The only account limit is for identify that is dealt in a different way (exclusive semaphore), so websocket queues can be shared with REST and don't need to be shared between clients anymore. Also added the ratelimit for presence updates. * Add summary to IdentifySemaphoreName * Fix spacing * Add max_concurrency and other fixes - Add session_start_limit to GetBotGatewayResponse - Add GetBotGatewayAsync to IDiscordClient - Add master/slave semaphores to enable concurrency - Not store semaphore name as static - Clone GatewayLimits when cloning the Config * Add missing RequestQueue parameter and wrong nullable * Add RequeueQueue paramater to Webhook * Better xml documentation * Remove GatewayLimits class and other changes - Remove GatewayLimits - Transfer a few properties to DiscordSocketConfig - Remove unnecessary usings * Remove unnecessary using and wording * Remove more unnecessary usings * Change named Semaphores to SemaphoreSlim * Remove unused using * Update branch * Fix merge conflicts and update to new ratelimit * Fixing merge, ignore limit for heartbeat, and dispose * Missed one place and better xml docs. * Wait identify before opening the connection * Only request identify ticket when needed * Move identify control to sharded client * Better description for IdentifyMaxConcurrency * Add lock to InvalidSession --- .../Entities/Gateway/BotGateway.cs | 22 ++++ .../Entities/Gateway/SessionStartLimit.cs | 38 ++++++ src/Discord.Net.Core/IDiscordClient.cs | 10 ++ src/Discord.Net.Core/RequestOptions.cs | 1 + .../API/Common/SessionStartLimit.cs | 16 +++ .../API/Rest/GetBotGatewayResponse.cs | 4 +- src/Discord.Net.Rest/BaseDiscordClient.cs | 4 + src/Discord.Net.Rest/ClientHelper.cs | 17 +++ src/Discord.Net.Rest/DiscordRestClient.cs | 8 +- .../Net/Queue/GatewayBucket.cs | 53 ++++++++ .../Net/Queue/RequestQueue.cs | 38 +++++- .../Net/Queue/RequestQueueBucket.cs | 118 ++++++++++++++++-- .../Net/Queue/Requests/WebSocketRequest.cs | 6 +- .../DiscordShardedClient.cs | 50 ++++++-- .../DiscordSocketApiClient.cs | 11 +- .../DiscordSocketClient.cs | 33 +++-- .../DiscordSocketConfig.cs | 8 ++ 17 files changed, 397 insertions(+), 40 deletions(-) create mode 100644 src/Discord.Net.Core/Entities/Gateway/BotGateway.cs create mode 100644 src/Discord.Net.Core/Entities/Gateway/SessionStartLimit.cs create mode 100644 src/Discord.Net.Rest/API/Common/SessionStartLimit.cs create mode 100644 src/Discord.Net.Rest/Net/Queue/GatewayBucket.cs diff --git a/src/Discord.Net.Core/Entities/Gateway/BotGateway.cs b/src/Discord.Net.Core/Entities/Gateway/BotGateway.cs new file mode 100644 index 000000000..c9be0ac1f --- /dev/null +++ b/src/Discord.Net.Core/Entities/Gateway/BotGateway.cs @@ -0,0 +1,22 @@ +namespace Discord +{ + /// + /// Stores the gateway information related to the current bot. + /// + public class BotGateway + { + /// + /// Gets the WSS URL that can be used for connecting to the gateway. + /// + public string Url { get; internal set; } + /// + /// Gets the recommended number of shards to use when connecting. + /// + public int Shards { get; internal set; } + /// + /// Gets the that contains the information + /// about the current session start limit. + /// + public SessionStartLimit SessionStartLimit { get; internal set; } + } +} diff --git a/src/Discord.Net.Core/Entities/Gateway/SessionStartLimit.cs b/src/Discord.Net.Core/Entities/Gateway/SessionStartLimit.cs new file mode 100644 index 000000000..74ae96af1 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Gateway/SessionStartLimit.cs @@ -0,0 +1,38 @@ +namespace Discord +{ + /// + /// Stores the information related to the gateway identify request. + /// + public class SessionStartLimit + { + /// + /// Gets the total number of session starts the current user is allowed. + /// + /// + /// The maximum amount of session starts the current user is allowed. + /// + public int Total { get; internal set; } + /// + /// Gets the remaining number of session starts the current user is allowed. + /// + /// + /// The remaining amount of session starts the current user is allowed. + /// + public int Remaining { get; internal set; } + /// + /// Gets the number of milliseconds after which the limit resets. + /// + /// + /// The milliseconds until the limit resets back to the . + /// + public int ResetAfter { get; internal set; } + /// + /// Gets the maximum concurrent identify requests in a time window. + /// + /// + /// The maximum concurrent identify requests in a time window, + /// limited to the same rate limit key. + /// + public int MaxConcurrency { get; internal set; } + } +} diff --git a/src/Discord.Net.Core/IDiscordClient.cs b/src/Discord.Net.Core/IDiscordClient.cs index f972cd71d..d7d6d2856 100644 --- a/src/Discord.Net.Core/IDiscordClient.cs +++ b/src/Discord.Net.Core/IDiscordClient.cs @@ -274,5 +274,15 @@ namespace Discord /// that represents the number of shards that should be used with this account. /// Task GetRecommendedShardCountAsync(RequestOptions options = null); + + /// + /// Gets the gateway information related to the bot. + /// + /// The options to be used when sending the request. + /// + /// A task that represents the asynchronous get operation. The task result contains a + /// that represents the gateway information related to the bot. + /// + Task GetBotGatewayAsync(RequestOptions options = null); } } diff --git a/src/Discord.Net.Core/RequestOptions.cs b/src/Discord.Net.Core/RequestOptions.cs index ad0a4e33f..dbb240273 100644 --- a/src/Discord.Net.Core/RequestOptions.cs +++ b/src/Discord.Net.Core/RequestOptions.cs @@ -61,6 +61,7 @@ namespace Discord internal BucketId BucketId { get; set; } internal bool IsClientBucket { get; set; } internal bool IsReactionBucket { get; set; } + internal bool IsGatewayBucket { get; set; } internal static RequestOptions CreateOrClone(RequestOptions options) { diff --git a/src/Discord.Net.Rest/API/Common/SessionStartLimit.cs b/src/Discord.Net.Rest/API/Common/SessionStartLimit.cs new file mode 100644 index 000000000..29d5ddf85 --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/SessionStartLimit.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; + +namespace Discord.API.Rest +{ + internal class SessionStartLimit + { + [JsonProperty("total")] + public int Total { get; set; } + [JsonProperty("remaining")] + public int Remaining { get; set; } + [JsonProperty("reset_after")] + public int ResetAfter { get; set; } + [JsonProperty("max_concurrency")] + public int MaxConcurrency { get; set; } + } +} diff --git a/src/Discord.Net.Rest/API/Rest/GetBotGatewayResponse.cs b/src/Discord.Net.Rest/API/Rest/GetBotGatewayResponse.cs index 111fcf3db..d3285051b 100644 --- a/src/Discord.Net.Rest/API/Rest/GetBotGatewayResponse.cs +++ b/src/Discord.Net.Rest/API/Rest/GetBotGatewayResponse.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API.Rest @@ -9,5 +9,7 @@ namespace Discord.API.Rest public string Url { get; set; } [JsonProperty("shards")] public int Shards { get; set; } + [JsonProperty("session_start_limit")] + public SessionStartLimit SessionStartLimit { get; set; } } } diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs index b641fa1c3..68589a4f1 100644 --- a/src/Discord.Net.Rest/BaseDiscordClient.cs +++ b/src/Discord.Net.Rest/BaseDiscordClient.cs @@ -152,6 +152,10 @@ namespace Discord.Rest public Task GetRecommendedShardCountAsync(RequestOptions options = null) => ClientHelper.GetRecommendShardCountAsync(this, options); + /// + public Task GetBotGatewayAsync(RequestOptions options = null) + => ClientHelper.GetBotGatewayAsync(this, options); + //IDiscordClient /// ConnectionState IDiscordClient.ConnectionState => ConnectionState.Disconnected; diff --git a/src/Discord.Net.Rest/ClientHelper.cs b/src/Discord.Net.Rest/ClientHelper.cs index 6ebdbcacb..8910e999a 100644 --- a/src/Discord.Net.Rest/ClientHelper.cs +++ b/src/Discord.Net.Rest/ClientHelper.cs @@ -184,5 +184,22 @@ namespace Discord.Rest var response = await client.ApiClient.GetBotGatewayAsync(options).ConfigureAwait(false); return response.Shards; } + + public static async Task GetBotGatewayAsync(BaseDiscordClient client, RequestOptions options) + { + var response = await client.ApiClient.GetBotGatewayAsync(options).ConfigureAwait(false); + return new BotGateway + { + Url = response.Url, + Shards = response.Shards, + SessionStartLimit = new SessionStartLimit + { + Total = response.SessionStartLimit.Total, + Remaining = response.SessionStartLimit.Remaining, + ResetAfter = response.SessionStartLimit.ResetAfter, + MaxConcurrency = response.SessionStartLimit.MaxConcurrency + } + }; + } } } diff --git a/src/Discord.Net.Rest/DiscordRestClient.cs b/src/Discord.Net.Rest/DiscordRestClient.cs index bef4e6b2a..48c40fdfa 100644 --- a/src/Discord.Net.Rest/DiscordRestClient.cs +++ b/src/Discord.Net.Rest/DiscordRestClient.cs @@ -29,10 +29,10 @@ namespace Discord.Rest internal DiscordRestClient(DiscordRestConfig config, API.DiscordRestApiClient api) : base(config, api) { } private static API.DiscordRestApiClient CreateApiClient(DiscordRestConfig config) - => new API.DiscordRestApiClient(config.RestClientProvider, - DiscordRestConfig.UserAgent, - rateLimitPrecision: config.RateLimitPrecision, - useSystemClock: config.UseSystemClock); + => new API.DiscordRestApiClient(config.RestClientProvider, + DiscordRestConfig.UserAgent, + rateLimitPrecision: config.RateLimitPrecision, + useSystemClock: config.UseSystemClock); internal override void Dispose(bool disposing) { diff --git a/src/Discord.Net.Rest/Net/Queue/GatewayBucket.cs b/src/Discord.Net.Rest/Net/Queue/GatewayBucket.cs new file mode 100644 index 000000000..aa849018a --- /dev/null +++ b/src/Discord.Net.Rest/Net/Queue/GatewayBucket.cs @@ -0,0 +1,53 @@ +using System.Collections.Immutable; + +namespace Discord.Net.Queue +{ + public enum GatewayBucketType + { + Unbucketed = 0, + Identify = 1, + PresenceUpdate = 2, + } + internal struct GatewayBucket + { + private static readonly ImmutableDictionary DefsByType; + private static readonly ImmutableDictionary DefsById; + + static GatewayBucket() + { + var buckets = new[] + { + // Limit is 120/60s, but 3 will be reserved for heartbeats (2 for possible heartbeats in the same timeframe and a possible failure) + new GatewayBucket(GatewayBucketType.Unbucketed, BucketId.Create(null, "", null), 117, 60), + new GatewayBucket(GatewayBucketType.Identify, BucketId.Create(null, "", null), 1, 5), + new GatewayBucket(GatewayBucketType.PresenceUpdate, BucketId.Create(null, "", null), 5, 60), + }; + + var builder = ImmutableDictionary.CreateBuilder(); + foreach (var bucket in buckets) + builder.Add(bucket.Type, bucket); + DefsByType = builder.ToImmutable(); + + var builder2 = ImmutableDictionary.CreateBuilder(); + foreach (var bucket in buckets) + builder2.Add(bucket.Id, bucket); + DefsById = builder2.ToImmutable(); + } + + public static GatewayBucket Get(GatewayBucketType type) => DefsByType[type]; + public static GatewayBucket Get(BucketId id) => DefsById[id]; + + public GatewayBucketType Type { get; } + public BucketId Id { get; } + public int WindowCount { get; set; } + public int WindowSeconds { get; set; } + + public GatewayBucket(GatewayBucketType type, BucketId id, int count, int seconds) + { + Type = type; + Id = id; + WindowCount = count; + WindowSeconds = seconds; + } + } +} diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs index 127a48cf3..2bf8e20b0 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueue.cs @@ -89,9 +89,18 @@ namespace Discord.Net.Queue } public async Task SendAsync(WebSocketRequest request) { - //TODO: Re-impl websocket buckets - request.CancelToken = _requestCancelToken; - await request.SendAsync().ConfigureAwait(false); + CancellationTokenSource createdTokenSource = null; + if (request.Options.CancelToken.CanBeCanceled) + { + createdTokenSource = CancellationTokenSource.CreateLinkedTokenSource(_requestCancelToken, request.Options.CancelToken); + request.Options.CancelToken = createdTokenSource.Token; + } + else + request.Options.CancelToken = _requestCancelToken; + + var bucket = GetOrCreateBucket(request.Options, request); + await bucket.SendAsync(request).ConfigureAwait(false); + createdTokenSource?.Dispose(); } internal async Task EnterGlobalAsync(int id, RestRequest request) @@ -109,8 +118,23 @@ namespace Discord.Net.Queue { _waitUntil = DateTimeOffset.UtcNow.AddMilliseconds(info.RetryAfter.Value + (info.Lag?.TotalMilliseconds ?? 0.0)); } + internal async Task EnterGlobalAsync(int id, WebSocketRequest request) + { + //If this is a global request (unbucketed), it'll be dealt in EnterAsync + var requestBucket = GatewayBucket.Get(request.Options.BucketId); + if (requestBucket.Type == GatewayBucketType.Unbucketed) + return; + + //It's not a global request, so need to remove one from global (per-session) + var globalBucketType = GatewayBucket.Get(GatewayBucketType.Unbucketed); + var options = RequestOptions.CreateOrClone(request.Options); + options.BucketId = globalBucketType.Id; + var globalRequest = new WebSocketRequest(null, null, false, false, options); + var globalBucket = GetOrCreateBucket(options, globalRequest); + await globalBucket.TriggerAsync(id, globalRequest); + } - private RequestBucket GetOrCreateBucket(RequestOptions options, RestRequest request) + private RequestBucket GetOrCreateBucket(RequestOptions options, IRequest request) { var bucketId = options.BucketId; object obj = _buckets.GetOrAdd(bucketId, x => new RequestBucket(this, request, x)); @@ -137,6 +161,12 @@ namespace Discord.Net.Queue return (null, null); } + public void ClearGatewayBuckets() + { + foreach (var gwBucket in (GatewayBucketType[])Enum.GetValues(typeof(GatewayBucketType))) + _buckets.TryRemove(GatewayBucket.Get(gwBucket).Id, out _); + } + private async Task RunCleanup() { try diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs index edd55f158..3fb45e55d 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs @@ -25,7 +25,7 @@ namespace Discord.Net.Queue public int WindowCount { get; private set; } public DateTimeOffset LastAttemptAt { get; private set; } - public RequestBucket(RequestQueue queue, RestRequest request, BucketId id) + public RequestBucket(RequestQueue queue, IRequest request, BucketId id) { _queue = queue; Id = id; @@ -33,7 +33,9 @@ namespace Discord.Net.Queue _lock = new object(); if (request.Options.IsClientBucket) - WindowCount = ClientBucket.Get(Id).WindowCount; + WindowCount = ClientBucket.Get(request.Options.BucketId).WindowCount; + else if (request.Options.IsGatewayBucket) + WindowCount = GatewayBucket.Get(request.Options.BucketId).WindowCount; else WindowCount = 1; //Only allow one request until we get a header back _semaphore = WindowCount; @@ -154,8 +156,68 @@ namespace Discord.Net.Queue } } } + public async Task SendAsync(WebSocketRequest request) + { + int id = Interlocked.Increment(ref nextId); +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Start"); +#endif + LastAttemptAt = DateTimeOffset.UtcNow; + while (true) + { + await _queue.EnterGlobalAsync(id, request).ConfigureAwait(false); + await EnterAsync(id, request).ConfigureAwait(false); - private async Task EnterAsync(int id, RestRequest request) +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Sending..."); +#endif + try + { + await request.SendAsync().ConfigureAwait(false); + return; + } + catch (TimeoutException) + { +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Timeout"); +#endif + if ((request.Options.RetryMode & RetryMode.RetryTimeouts) == 0) + throw; + + await Task.Delay(500).ConfigureAwait(false); + continue; //Retry + } + /*catch (Exception) + { +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Error"); +#endif + if ((request.Options.RetryMode & RetryMode.RetryErrors) == 0) + throw; + + await Task.Delay(500); + continue; //Retry + }*/ + finally + { + UpdateRateLimit(id, request, default(RateLimitInfo), false); +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Stop"); +#endif + } + } + } + + internal async Task TriggerAsync(int id, IRequest request) + { +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Trigger Bucket"); +#endif + await EnterAsync(id, request).ConfigureAwait(false); + UpdateRateLimit(id, request, default(RateLimitInfo), false); + } + + private async Task EnterAsync(int id, IRequest request) { int windowCount; DateTimeOffset? resetAt; @@ -186,8 +248,31 @@ namespace Discord.Net.Queue { if (!isRateLimited) { + bool ignoreRatelimit = false; isRateLimited = true; - await _queue.RaiseRateLimitTriggered(Id, null, $"{request.Method} {request.Endpoint}").ConfigureAwait(false); + switch (request) + { + case RestRequest restRequest: + await _queue.RaiseRateLimitTriggered(Id, null, $"{restRequest.Method} {restRequest.Endpoint}").ConfigureAwait(false); + break; + case WebSocketRequest webSocketRequest: + if (webSocketRequest.IgnoreLimit) + { + ignoreRatelimit = true; + break; + } + await _queue.RaiseRateLimitTriggered(Id, null, Id.Endpoint).ConfigureAwait(false); + break; + default: + throw new InvalidOperationException("Unknown request type"); + } + if (ignoreRatelimit) + { +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Ignoring ratelimit"); +#endif + break; + } } ThrowRetryLimit(request); @@ -223,7 +308,7 @@ namespace Discord.Net.Queue } } - private void UpdateRateLimit(int id, RestRequest request, RateLimitInfo info, bool is429, bool redirected = false) + private void UpdateRateLimit(int id, IRequest request, RateLimitInfo info, bool is429, bool redirected = false) { if (WindowCount == 0) return; @@ -316,6 +401,23 @@ namespace Discord.Net.Queue Debug.WriteLine($"[{id}] Client Bucket ({ClientBucket.Get(Id).WindowSeconds * 1000} ms)"); #endif } + else if (request.Options.IsGatewayBucket && request.Options.BucketId != null) + { + resetTick = DateTimeOffset.UtcNow.AddSeconds(GatewayBucket.Get(request.Options.BucketId).WindowSeconds); +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Gateway Bucket ({GatewayBucket.Get(request.Options.BucketId).WindowSeconds * 1000} ms)"); +#endif + if (!hasQueuedReset) + { + _resetTick = resetTick; + LastAttemptAt = resetTick.Value; +#if DEBUG_LIMITS + Debug.WriteLine($"[{id}] Reset in {(int)Math.Ceiling((resetTick - DateTimeOffset.UtcNow).Value.TotalMilliseconds)} ms"); +#endif + var _ = QueueReset(id, (int)Math.Ceiling((_resetTick.Value - DateTimeOffset.UtcNow).TotalMilliseconds), request); + } + return; + } if (resetTick == null) { @@ -336,12 +438,12 @@ namespace Discord.Net.Queue if (!hasQueuedReset) { - var _ = QueueReset(id, (int)Math.Ceiling((_resetTick.Value - DateTimeOffset.UtcNow).TotalMilliseconds)); + var _ = QueueReset(id, (int)Math.Ceiling((_resetTick.Value - DateTimeOffset.UtcNow).TotalMilliseconds), request); } } } } - private async Task QueueReset(int id, int millis) + private async Task QueueReset(int id, int millis, IRequest request) { while (true) { @@ -363,7 +465,7 @@ namespace Discord.Net.Queue } } - private void ThrowRetryLimit(RestRequest request) + private void ThrowRetryLimit(IRequest request) { if ((request.Options.RetryMode & RetryMode.RetryRatelimit) == 0) throw new RateLimitedException(request); diff --git a/src/Discord.Net.Rest/Net/Queue/Requests/WebSocketRequest.cs b/src/Discord.Net.Rest/Net/Queue/Requests/WebSocketRequest.cs index 81eb40b31..ebebd7bef 100644 --- a/src/Discord.Net.Rest/Net/Queue/Requests/WebSocketRequest.cs +++ b/src/Discord.Net.Rest/Net/Queue/Requests/WebSocketRequest.cs @@ -9,22 +9,22 @@ namespace Discord.Net.Queue public class WebSocketRequest : IRequest { public IWebSocketClient Client { get; } - public string BucketId { get; } public byte[] Data { get; } public bool IsText { get; } + public bool IgnoreLimit { get; } public DateTimeOffset? TimeoutAt { get; } public TaskCompletionSource Promise { get; } public RequestOptions Options { get; } public CancellationToken CancelToken { get; internal set; } - public WebSocketRequest(IWebSocketClient client, string bucketId, byte[] data, bool isText, RequestOptions options) + public WebSocketRequest(IWebSocketClient client, byte[] data, bool isText, bool ignoreLimit, RequestOptions options) { Preconditions.NotNull(options, nameof(options)); Client = client; - BucketId = bucketId; Data = data; IsText = isText; + IgnoreLimit = ignoreLimit; Options = options; TimeoutAt = options.Timeout.HasValue ? DateTimeOffset.UtcNow.AddMilliseconds(options.Timeout.Value) : (DateTimeOffset?)null; Promise = new TaskCompletionSource(); diff --git a/src/Discord.Net.WebSocket/DiscordShardedClient.cs b/src/Discord.Net.WebSocket/DiscordShardedClient.cs index a8780a7b0..a2c89d4e5 100644 --- a/src/Discord.Net.WebSocket/DiscordShardedClient.cs +++ b/src/Discord.Net.WebSocket/DiscordShardedClient.cs @@ -12,12 +12,14 @@ namespace Discord.WebSocket public partial class DiscordShardedClient : BaseSocketClient, IDiscordClient { private readonly DiscordSocketConfig _baseConfig; - private readonly SemaphoreSlim _connectionGroupLock; private readonly Dictionary _shardIdsToIndex; private readonly bool _automaticShards; private int[] _shardIds; private DiscordSocketClient[] _shards; private int _totalShards; + private SemaphoreSlim[] _identifySemaphores; + private object _semaphoreResetLock; + private Task _semaphoreResetTask; private bool _isDisposed; @@ -62,10 +64,10 @@ namespace Discord.WebSocket if (ids != null && config.TotalShards == null) throw new ArgumentException($"Custom ids are not supported when {nameof(config.TotalShards)} is not specified."); + _semaphoreResetLock = new object(); _shardIdsToIndex = new Dictionary(); config.DisplayInitialLog = false; _baseConfig = config; - _connectionGroupLock = new SemaphoreSlim(1, 1); if (config.TotalShards == null) _automaticShards = true; @@ -74,12 +76,15 @@ namespace Discord.WebSocket _totalShards = config.TotalShards.Value; _shardIds = ids ?? Enumerable.Range(0, _totalShards).ToArray(); _shards = new DiscordSocketClient[_shardIds.Length]; + _identifySemaphores = new SemaphoreSlim[config.IdentifyMaxConcurrency]; + for (int i = 0; i < config.IdentifyMaxConcurrency; i++) + _identifySemaphores[i] = new SemaphoreSlim(1, 1); for (int i = 0; i < _shardIds.Length; i++) { _shardIdsToIndex.Add(_shardIds[i], i); var newConfig = config.Clone(); newConfig.ShardId = _shardIds[i]; - _shards[i] = new DiscordSocketClient(newConfig, _connectionGroupLock, i != 0 ? _shards[0] : null); + _shards[i] = new DiscordSocketClient(newConfig, this, i != 0 ? _shards[0] : null); RegisterEvents(_shards[i], i == 0); } } @@ -88,21 +93,53 @@ namespace Discord.WebSocket => new API.DiscordSocketApiClient(config.RestClientProvider, config.WebSocketProvider, DiscordRestConfig.UserAgent, rateLimitPrecision: config.RateLimitPrecision); + internal async Task AcquireIdentifyLockAsync(int shardId, CancellationToken token) + { + int semaphoreIdx = shardId % _baseConfig.IdentifyMaxConcurrency; + await _identifySemaphores[semaphoreIdx].WaitAsync(token).ConfigureAwait(false); + } + + internal void ReleaseIdentifyLock() + { + lock (_semaphoreResetLock) + { + if (_semaphoreResetTask == null) + _semaphoreResetTask = ResetSemaphoresAsync(); + } + } + + private async Task ResetSemaphoresAsync() + { + await Task.Delay(5000).ConfigureAwait(false); + lock (_semaphoreResetLock) + { + foreach (var semaphore in _identifySemaphores) + if (semaphore.CurrentCount == 0) + semaphore.Release(); + _semaphoreResetTask = null; + } + } + internal override async Task OnLoginAsync(TokenType tokenType, string token) { if (_automaticShards) { - var shardCount = await GetRecommendedShardCountAsync().ConfigureAwait(false); - _shardIds = Enumerable.Range(0, shardCount).ToArray(); + var botGateway = await GetBotGatewayAsync().ConfigureAwait(false); + _shardIds = Enumerable.Range(0, botGateway.Shards).ToArray(); _totalShards = _shardIds.Length; _shards = new DiscordSocketClient[_shardIds.Length]; + int maxConcurrency = botGateway.SessionStartLimit.MaxConcurrency; + _baseConfig.IdentifyMaxConcurrency = maxConcurrency; + _identifySemaphores = new SemaphoreSlim[maxConcurrency]; + for (int i = 0; i < maxConcurrency; i++) + _identifySemaphores[i] = new SemaphoreSlim(1, 1); for (int i = 0; i < _shardIds.Length; i++) { _shardIdsToIndex.Add(_shardIds[i], i); var newConfig = _baseConfig.Clone(); newConfig.ShardId = _shardIds[i]; newConfig.TotalShards = _totalShards; - _shards[i] = new DiscordSocketClient(newConfig, _connectionGroupLock, i != 0 ? _shards[0] : null); + _shards[i] = new DiscordSocketClient(newConfig, this, i != 0 ? _shards[0] : null); RegisterEvents(_shards[i], i == 0); } } @@ -398,7 +435,6 @@ namespace Discord.WebSocket foreach (var client in _shards) client?.Dispose(); } - _connectionGroupLock?.Dispose(); } _isDisposed = true; diff --git a/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs b/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs index 1b21bd666..07ebc87ec 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs @@ -132,6 +132,8 @@ namespace Discord.API if (WebSocketClient == null) throw new NotSupportedException("This client is not configured with WebSocket support."); + RequestQueue.ClearGatewayBuckets(); + //Re-create streams to reset the zlib state _compressed?.Dispose(); _decompressor?.Dispose(); @@ -205,7 +207,11 @@ namespace Discord.API payload = new SocketFrame { Operation = (int)opCode, Payload = payload }; if (payload != null) bytes = Encoding.UTF8.GetBytes(SerializeJson(payload)); - await RequestQueue.SendAsync(new WebSocketRequest(WebSocketClient, null, bytes, true, options)).ConfigureAwait(false); + + options.IsGatewayBucket = true; + if (options.BucketId == null) + options.BucketId = GatewayBucket.Get(GatewayBucketType.Unbucketed).Id; + await RequestQueue.SendAsync(new WebSocketRequest(WebSocketClient, bytes, true, opCode == GatewayOpCode.Heartbeat, options)).ConfigureAwait(false); await _sentGatewayMessageEvent.InvokeAsync(opCode).ConfigureAwait(false); } @@ -225,6 +231,8 @@ namespace Discord.API if (totalShards > 1) msg.ShardingParams = new int[] { shardID, totalShards }; + options.BucketId = GatewayBucket.Get(GatewayBucketType.Identify).Id; + if (gatewayIntents.HasValue) msg.Intents = (int)gatewayIntents.Value; else @@ -258,6 +266,7 @@ namespace Discord.API IsAFK = isAFK, Game = game }; + options.BucketId = GatewayBucket.Get(GatewayBucketType.PresenceUpdate).Id; await SendGatewayAsync(GatewayOpCode.StatusUpdate, args, options: options).ConfigureAwait(false); } public async Task SendRequestMembersAsync(IEnumerable guildIds, RequestOptions options = null) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index dfdad99fc..d53387afc 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -26,7 +26,7 @@ namespace Discord.WebSocket { private readonly ConcurrentQueue _largeGuilds; private readonly JsonSerializer _serializer; - private readonly SemaphoreSlim _connectionGroupLock; + private readonly DiscordShardedClient _shardedClient; private readonly DiscordSocketClient _parentClient; private readonly ConcurrentQueue _heartbeatTimes; private readonly ConnectionManager _connection; @@ -120,9 +120,9 @@ namespace Discord.WebSocket /// The configuration to be used with the client. #pragma warning disable IDISP004 public DiscordSocketClient(DiscordSocketConfig config) : this(config, CreateApiClient(config), null, null) { } - internal DiscordSocketClient(DiscordSocketConfig config, SemaphoreSlim groupLock, DiscordSocketClient parentClient) : this(config, CreateApiClient(config), groupLock, parentClient) { } + internal DiscordSocketClient(DiscordSocketConfig config, DiscordShardedClient shardedClient, DiscordSocketClient parentClient) : this(config, CreateApiClient(config), shardedClient, parentClient) { } #pragma warning restore IDISP004 - private DiscordSocketClient(DiscordSocketConfig config, API.DiscordSocketApiClient client, SemaphoreSlim groupLock, DiscordSocketClient parentClient) + private DiscordSocketClient(DiscordSocketConfig config, API.DiscordSocketApiClient client, DiscordShardedClient shardedClient, DiscordSocketClient parentClient) : base(config, client) { ShardId = config.ShardId ?? 0; @@ -148,7 +148,7 @@ namespace Discord.WebSocket _connection.Disconnected += (ex, recon) => TimedInvokeAsync(_disconnectedEvent, nameof(Disconnected), ex); _nextAudioId = 1; - _connectionGroupLock = groupLock; + _shardedClient = shardedClient; _parentClient = parentClient; _serializer = new JsonSerializer { ContractResolver = new DiscordContractResolver() }; @@ -229,8 +229,12 @@ namespace Discord.WebSocket private async Task OnConnectingAsync() { - if (_connectionGroupLock != null) - await _connectionGroupLock.WaitAsync(_connection.CancelToken).ConfigureAwait(false); + bool locked = false; + if (_shardedClient != null && _sessionId == null) + { + await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); + locked = true; + } try { await _gatewayLogger.DebugAsync("Connecting ApiClient").ConfigureAwait(false); @@ -255,11 +259,8 @@ namespace Discord.WebSocket } finally { - if (_connectionGroupLock != null) - { - await Task.Delay(5000).ConfigureAwait(false); - _connectionGroupLock.Release(); - } + if (locked) + _shardedClient.ReleaseIdentifyLock(); } } private async Task OnDisconnectingAsync(Exception ex) @@ -519,7 +520,15 @@ namespace Discord.WebSocket _sessionId = null; _lastSeq = 0; - await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents).ConfigureAwait(false); + await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); + try + { + await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents).ConfigureAwait(false); + } + finally + { + _shardedClient.ReleaseIdentifyLock(); + } } break; case GatewayOpCode.Reconnect: diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index 0e8fbe73f..6b0c5ebc4 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -126,6 +126,14 @@ namespace Discord.WebSocket public bool GuildSubscriptions { get; set; } = true; /// + /// Gets or sets the maximum identify concurrency. + /// + /// + /// This information is provided by Discord. + /// It is only used when using a and auto-sharding is disabled. + /// + public int IdentifyMaxConcurrency { get; set; } = 1; + /// Gets or sets the maximum wait time in milliseconds between GUILD_AVAILABLE events before firing READY. /// /// If zero, READY will fire as soon as it is received and all guilds will be unavailable. From 25d5d36772b5f518a40f8596ee36bb145b733ce2 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 22 Nov 2020 00:42:48 -0300 Subject: [PATCH 39/76] feature: Send presence on Identify payload (#1688) * Send presence on identify * Change CurrentUser presence --- .../API/Gateway/IdentifyParams.cs | 2 + .../API/Gateway/StatusUpdateParams.cs | 6 +-- .../DiscordSocketApiClient.cs | 18 +++++-- .../DiscordSocketClient.cs | 47 ++++++++++++------- 4 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/Discord.Net.WebSocket/API/Gateway/IdentifyParams.cs b/src/Discord.Net.WebSocket/API/Gateway/IdentifyParams.cs index e3e24491d..92a494b71 100644 --- a/src/Discord.Net.WebSocket/API/Gateway/IdentifyParams.cs +++ b/src/Discord.Net.WebSocket/API/Gateway/IdentifyParams.cs @@ -15,6 +15,8 @@ namespace Discord.API.Gateway public int LargeThreshold { get; set; } [JsonProperty("shard")] public Optional ShardingParams { get; set; } + [JsonProperty("presence")] + public Optional Presence { get; set; } [JsonProperty("guild_subscriptions")] public Optional GuildSubscriptions { get; set; } [JsonProperty("intents")] diff --git a/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs b/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs index fc0964c17..e685e5e57 100644 --- a/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs +++ b/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API.Gateway @@ -12,7 +12,7 @@ namespace Discord.API.Gateway public long? IdleSince { get; set; } [JsonProperty("afk")] public bool IsAFK { get; set; } - [JsonProperty("game")] - public Game Game { get; set; } + [JsonProperty("activities")] + public Game[] Activities { get; set; } } } diff --git a/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs b/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs index 07ebc87ec..5a926ba26 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs @@ -12,6 +12,7 @@ using System.IO.Compression; using System.Text; using System.Threading; using System.Threading.Tasks; +using GameModel = Discord.API.Game; namespace Discord.API { @@ -215,7 +216,7 @@ namespace Discord.API await _sentGatewayMessageEvent.InvokeAsync(opCode).ConfigureAwait(false); } - public async Task SendIdentifyAsync(int largeThreshold = 100, int shardID = 0, int totalShards = 1, bool guildSubscriptions = true, GatewayIntents? gatewayIntents = null, RequestOptions options = null) + public async Task SendIdentifyAsync(int largeThreshold = 100, int shardID = 0, int totalShards = 1, bool guildSubscriptions = true, GatewayIntents? gatewayIntents = null, (UserStatus, bool, long?, GameModel[])? presence = null, RequestOptions options = null) { options = RequestOptions.CreateOrClone(options); var props = new Dictionary @@ -238,6 +239,17 @@ namespace Discord.API else msg.GuildSubscriptions = guildSubscriptions; + if (presence.HasValue) + { + msg.Presence = new StatusUpdateParams + { + Status = presence.Value.Item1, + IsAFK = presence.Value.Item2, + IdleSince = presence.Value.Item3, + Activities = presence.Value.Item4 + }; + } + await SendGatewayAsync(GatewayOpCode.Identify, msg, options: options).ConfigureAwait(false); } public async Task SendResumeAsync(string sessionId, int lastSeq, RequestOptions options = null) @@ -256,7 +268,7 @@ namespace Discord.API options = RequestOptions.CreateOrClone(options); await SendGatewayAsync(GatewayOpCode.Heartbeat, lastSeq, options: options).ConfigureAwait(false); } - public async Task SendStatusUpdateAsync(UserStatus status, bool isAFK, long? since, Game game, RequestOptions options = null) + public async Task SendStatusUpdateAsync(UserStatus status, bool isAFK, long? since, GameModel[] game, RequestOptions options = null) { options = RequestOptions.CreateOrClone(options); var args = new StatusUpdateParams @@ -264,7 +276,7 @@ namespace Discord.API Status = status, IdleSince = since, IsAFK = isAFK, - Game = game + Activities = game }; options.BucketId = GatewayBucket.Get(GatewayBucketType.PresenceUpdate).Id; await SendGatewayAsync(GatewayOpCode.StatusUpdate, args, options: options).ConfigureAwait(false); diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index d53387afc..26a0d73bd 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -59,7 +59,8 @@ namespace Discord.WebSocket /// public override UserStatus Status { get; protected set; } = UserStatus.Online; /// - public override IActivity Activity { get; protected set; } + public override IActivity Activity { get => _activity.GetValueOrDefault(); protected set => _activity = Optional.Create(value); } + private Optional _activity; //From DiscordSocketConfig internal int TotalShards { get; private set; } @@ -248,14 +249,11 @@ namespace Discord.WebSocket else { await _gatewayLogger.DebugAsync("Identifying").ConfigureAwait(false); - await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents).ConfigureAwait(false); + await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); } //Wait for READY await _connection.WaitAsync().ConfigureAwait(false); - - await _gatewayLogger.DebugAsync("Sending Status").ConfigureAwait(false); - await SendStatusAsync().ConfigureAwait(false); } finally { @@ -449,28 +447,44 @@ namespace Discord.WebSocket { if (CurrentUser == null) return; + CurrentUser.Presence = new SocketPresence(Status, Activity, null, null); + + var presence = BuildCurrentStatus(); + + await ApiClient.SendStatusUpdateAsync( + presence.Item1, + presence.Item2, + presence.Item3, + presence.Item4).ConfigureAwait(false); + } + + private (UserStatus, bool, long?, GameModel[]) BuildCurrentStatus() + { var status = Status; var statusSince = _statusSince; - CurrentUser.Presence = new SocketPresence(status, Activity, null, null); + var activity = _activity; - var gameModel = new GameModel(); + GameModel[] gameModels = null; // Discord only accepts rich presence over RPC, don't even bother building a payload - if (Activity is RichGame) - throw new NotSupportedException("Outgoing Rich Presences are not supported via WebSocket."); - if (Activity != null) + if (activity.GetValueOrDefault() != null) { + var gameModel = new GameModel(); + if (activity.Value is RichGame) + throw new NotSupportedException("Outgoing Rich Presences are not supported via WebSocket."); gameModel.Name = Activity.Name; gameModel.Type = Activity.Type; if (Activity is StreamingGame streamGame) gameModel.StreamUrl = streamGame.Url; + gameModels = new[] { gameModel }; } + else if (activity.IsSpecified) + gameModels = new GameModel[0]; - await ApiClient.SendStatusUpdateAsync( - status, - status == UserStatus.AFK, - statusSince != null ? _statusSince.Value.ToUnixTimeMilliseconds() : (long?)null, - gameModel).ConfigureAwait(false); + return (status, + status == UserStatus.AFK, + statusSince != null ? _statusSince.Value.ToUnixTimeMilliseconds() : (long?)null, + gameModels); } private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload) @@ -523,7 +537,7 @@ namespace Discord.WebSocket await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); try { - await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents).ConfigureAwait(false); + await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); } finally { @@ -551,6 +565,7 @@ namespace Discord.WebSocket var state = new ClientState(data.Guilds.Length, data.PrivateChannels.Length); var currentUser = SocketSelfUser.Create(this, state, data.User); + currentUser.Presence = new SocketPresence(Status, Activity, null, null); ApiClient.CurrentUserId = currentUser.Id; int unavailableGuilds = 0; for (int i = 0; i < data.Guilds.Length; i++) From e3850e1e8f0f24652f22cc6322329495707ff67f Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 22 Nov 2020 00:43:38 -0300 Subject: [PATCH 40/76] feature: Add inline replies (#1659) * Add inline replies * Missed a few things * Change xml docs, IUserMessage, and other changes * Missed one when changing * Fix referencedMessage author --- src/Discord.Net.Commands/ModuleBase.cs | 5 ++-- .../Entities/Channels/IMessageChannel.cs | 9 ++++-- .../Entities/Messages/AllowedMentions.cs | 8 +++++ .../Entities/Messages/IMessage.cs | 6 ++-- .../Entities/Messages/IUserMessage.cs | 9 +++++- .../Entities/Messages/MessageReference.cs | 27 +++++++++++++++-- .../Entities/Messages/MessageType.cs | 7 +++++ .../Entities/Users/IGuildUser.cs | 2 +- .../Extensions/MessageExtensions.cs | 20 +++++++++++++ src/Discord.Net.Rest/API/Common/Message.cs | 2 ++ .../API/Common/MessageReference.cs | 2 +- .../API/Rest/CreateMessageParams.cs | 2 ++ .../API/Rest/UploadFileParams.cs | 1 + .../Entities/Channels/ChannelHelper.cs | 30 ++++++------------- .../Entities/Channels/IRestMessageChannel.cs | 13 ++++---- .../Entities/Channels/RestDMChannel.cs | 24 +++++++-------- .../Entities/Channels/RestGroupChannel.cs | 24 +++++++-------- .../Entities/Channels/RestTextChannel.cs | 24 +++++++-------- .../Entities/Messages/AllowedMentions.cs | 2 ++ .../Entities/Messages/MessageHelper.cs | 13 +++++++- .../Entities/Messages/RestMessage.cs | 4 +-- .../Entities/Messages/RestUserMessage.cs | 14 +++++++-- .../Extensions/EntityExtensions.cs | 10 +++++++ .../Channels/ISocketMessageChannel.cs | 13 ++++---- .../Entities/Channels/SocketDMChannel.cs | 24 +++++++-------- .../Entities/Channels/SocketGroupChannel.cs | 24 +++++++-------- .../Entities/Channels/SocketTextChannel.cs | 24 +++++++-------- .../Entities/Messages/SocketMessage.cs | 4 +-- .../Entities/Messages/SocketUserMessage.cs | 6 ++++ .../MockedEntities/MockedDMChannel.cs | 6 ++-- .../MockedEntities/MockedGroupChannel.cs | 6 ++-- .../MockedEntities/MockedTextChannel.cs | 6 ++-- 32 files changed, 239 insertions(+), 132 deletions(-) diff --git a/src/Discord.Net.Commands/ModuleBase.cs b/src/Discord.Net.Commands/ModuleBase.cs index ec1722c70..6ec2db54d 100644 --- a/src/Discord.Net.Commands/ModuleBase.cs +++ b/src/Discord.Net.Commands/ModuleBase.cs @@ -35,9 +35,10 @@ namespace Discord.Commands /// Specifies if notifications are sent for mentioned users and roles in the . /// If null, all mentioned roles and users will be notified. /// - protected virtual async Task ReplyAsync(string message = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) + /// The message references to be included. Used to reply to specific messages. + protected virtual async Task ReplyAsync(string message = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { - return await Context.Channel.SendMessageAsync(message, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + return await Context.Channel.SendMessageAsync(message, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); } /// /// The method to execute before executing the command. diff --git a/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs b/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs index 030a278bc..abd20e4f0 100644 --- a/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs +++ b/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs @@ -27,11 +27,12 @@ namespace Discord /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null); + Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Sends a file to this message channel with an optional caption. /// @@ -63,11 +64,12 @@ namespace Discord /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null); + Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Sends a file to this message channel with an optional caption. /// @@ -96,11 +98,12 @@ namespace Discord /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null); + Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Gets a message from this message channel. diff --git a/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs b/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs index d52feaa7d..0206ad7b1 100644 --- a/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs +++ b/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs @@ -49,6 +49,14 @@ namespace Discord /// public List UserIds { get; set; } = new List(); + /// + /// Gets or sets whether to mention the author of the message you are replying to or not. + /// + /// + /// Specifically for inline replies. + /// + public bool? MentionRepliedUser { get; set; } = null; + /// /// Initializes a new instance of the class. /// diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index b74e333c1..35458d87d 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -148,11 +148,11 @@ namespace Discord MessageApplication Application { get; } /// - /// Gets the reference to the original message if it was crossposted. + /// Gets the reference to the original message if it is a crosspost, channel follow add, pin, or reply message. /// /// - /// Sent with Cross-posted messages, meaning they were published from news channels - /// and received by subscriber channels. + /// Sent with cross-posted messages, meaning they were published from news channels + /// and received by subscriber channels, channel follow adds, pins, and message replies. /// /// /// A message's reference, if any is associated. diff --git a/src/Discord.Net.Core/Entities/Messages/IUserMessage.cs b/src/Discord.Net.Core/Entities/Messages/IUserMessage.cs index e2fb25aae..1589e2ae5 100644 --- a/src/Discord.Net.Core/Entities/Messages/IUserMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IUserMessage.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Threading.Tasks; namespace Discord @@ -9,6 +8,14 @@ namespace Discord /// public interface IUserMessage : IMessage { + /// + /// Gets the referenced message if it is a crosspost, channel follow add, pin, or reply message. + /// + /// + /// The referenced message, if any is associated and still exists. + /// + IUserMessage ReferencedMessage { get; } + /// /// Modifies this message. /// diff --git a/src/Discord.Net.Core/Entities/Messages/MessageReference.cs b/src/Discord.Net.Core/Entities/Messages/MessageReference.cs index 57a508a7c..029910e56 100644 --- a/src/Discord.Net.Core/Entities/Messages/MessageReference.cs +++ b/src/Discord.Net.Core/Entities/Messages/MessageReference.cs @@ -3,7 +3,7 @@ using System.Diagnostics; namespace Discord { /// - /// Contains the IDs sent from a crossposted message. + /// Contains the IDs sent from a crossposted message or inline reply. /// [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class MessageReference @@ -16,13 +16,36 @@ namespace Discord /// /// Gets the Channel ID of the original message. /// - public ulong ChannelId { get; internal set; } + /// + /// It only will be the default value (zero) if it was instantiated with a in the constructor. + /// + public ulong ChannelId { get => InternalChannelId.GetValueOrDefault(); } + internal Optional InternalChannelId; /// /// Gets the Guild ID of the original message. /// public Optional GuildId { get; internal set; } + /// + /// Initializes a new instance of the class. + /// + /// + /// The ID of the message that will be referenced. Used to reply to specific messages and the only parameter required for it. + /// + /// + /// The ID of the channel that will be referenced. It will be validated if sent. + /// + /// + /// The ID of the guild that will be referenced. It will be validated if sent. + /// + public MessageReference(ulong? messageId = null, ulong? channelId = null, ulong? guildId = null) + { + MessageId = messageId ?? Optional.Create(); + InternalChannelId = channelId ?? Optional.Create(); + GuildId = guildId ?? Optional.Create(); + } + private string DebuggerDisplay => $"Channel ID: ({ChannelId}){(GuildId.IsSpecified ? $", Guild ID: ({GuildId.Value})" : "")}" + $"{(MessageId.IsSpecified ? $", Message ID: ({MessageId.Value})" : "")}"; diff --git a/src/Discord.Net.Core/Entities/Messages/MessageType.cs b/src/Discord.Net.Core/Entities/Messages/MessageType.cs index ee5f4fb4d..ad1f3a3cd 100644 --- a/src/Discord.Net.Core/Entities/Messages/MessageType.cs +++ b/src/Discord.Net.Core/Entities/Messages/MessageType.cs @@ -57,5 +57,12 @@ namespace Discord /// The message for when a news channel subscription is added to a text channel. /// ChannelFollowAdd = 12, + /// + /// The message is an inline reply. + /// + /// + /// Only available in API v8. + /// + Reply = 19, } } diff --git a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs index 92b146e05..0e4004c46 100644 --- a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs @@ -73,7 +73,7 @@ namespace Discord /// /// /// The following example checks if the current user has the ability to send a message with attachment in - /// this channel; if so, uploads a file via . + /// this channel; if so, uploads a file via . /// /// if (currentUser?.GetPermissions(targetChannel)?.AttachFiles) /// await targetChannel.SendFileAsync("fortnite.png"); diff --git a/src/Discord.Net.Core/Extensions/MessageExtensions.cs b/src/Discord.Net.Core/Extensions/MessageExtensions.cs index e44e397fa..b043d7b77 100644 --- a/src/Discord.Net.Core/Extensions/MessageExtensions.cs +++ b/src/Discord.Net.Core/Extensions/MessageExtensions.cs @@ -71,5 +71,25 @@ namespace Discord foreach (var rxn in reactions) await msg.RemoveReactionAsync(rxn, user, options).ConfigureAwait(false); } + + /// + /// Sends an inline reply that references a message. + /// + /// The message to be sent. + /// Determines whether the message should be read aloud by Discord or not. + /// The to be sent. + /// + /// Specifies if notifications are sent for mentioned users and roles in the message . + /// If null, all mentioned roles and users will be notified. + /// + /// The options to be used when sending the request. + /// + /// A task that represents an asynchronous send operation for delivering the message. The task result + /// contains the sent message. + /// + public static async Task ReplyAsync(this IUserMessage msg, string text = null, bool isTTS = false, Embed embed = null, AllowedMentions allowedMentions = null, RequestOptions options = null) + { + return await msg.Channel.SendMessageAsync(text, isTTS, embed, options, allowedMentions, new MessageReference(messageId: msg.Id)).ConfigureAwait(false); + } } } diff --git a/src/Discord.Net.Rest/API/Common/Message.cs b/src/Discord.Net.Rest/API/Common/Message.cs index b4529d457..b781de346 100644 --- a/src/Discord.Net.Rest/API/Common/Message.cs +++ b/src/Discord.Net.Rest/API/Common/Message.cs @@ -56,5 +56,7 @@ namespace Discord.API public Optional Flags { get; set; } [JsonProperty("allowed_mentions")] public Optional AllowedMentions { get; set; } + [JsonProperty("referenced_message")] + public Optional ReferencedMessage { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Common/MessageReference.cs b/src/Discord.Net.Rest/API/Common/MessageReference.cs index 8c0f8fe14..6cc7603e0 100644 --- a/src/Discord.Net.Rest/API/Common/MessageReference.cs +++ b/src/Discord.Net.Rest/API/Common/MessageReference.cs @@ -8,7 +8,7 @@ namespace Discord.API public Optional MessageId { get; set; } [JsonProperty("channel_id")] - public ulong ChannelId { get; set; } + public Optional ChannelId { get; set; } // Optional when sending, always present when receiving [JsonProperty("guild_id")] public Optional GuildId { get; set; } diff --git a/src/Discord.Net.Rest/API/Rest/CreateMessageParams.cs b/src/Discord.Net.Rest/API/Rest/CreateMessageParams.cs index 4b56658d6..e64532864 100644 --- a/src/Discord.Net.Rest/API/Rest/CreateMessageParams.cs +++ b/src/Discord.Net.Rest/API/Rest/CreateMessageParams.cs @@ -17,6 +17,8 @@ namespace Discord.API.Rest public Optional Embed { get; set; } [JsonProperty("allowed_mentions")] public Optional AllowedMentions { get; set; } + [JsonProperty("message_reference")] + public Optional MessageReference { get; set; } public CreateMessageParams(string content) { diff --git a/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs b/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs index 64535e6d7..a7d19b4ef 100644 --- a/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs +++ b/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs @@ -20,6 +20,7 @@ namespace Discord.API.Rest public Optional IsTTS { get; set; } public Optional Embed { get; set; } public Optional AllowedMentions { get; set; } + public Optional MessageReference { get; set; } public bool IsSpoiler { get; set; } = false; public UploadFileParams(Stream file) diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs index 6494f7fb7..c1d0ac294 100644 --- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs +++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs @@ -6,7 +6,6 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using Model = Discord.API.Channel; -using UserModel = Discord.API.User; namespace Discord.Rest { @@ -130,7 +129,7 @@ namespace Discord.Rest var model = await client.ApiClient.GetChannelMessageAsync(channel.Id, id, options).ConfigureAwait(false); if (model == null) return null; - var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); + var author = MessageHelper.GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); return RestMessage.Create(client, channel, author, model); } public static IAsyncEnumerable> GetMessagesAsync(IMessageChannel channel, BaseDiscordClient client, @@ -165,7 +164,7 @@ namespace Discord.Rest var builder = ImmutableArray.CreateBuilder(); foreach (var model in models) { - var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); + var author = MessageHelper.GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); builder.Add(RestMessage.Create(client, channel, author, model)); } return builder.ToImmutable(); @@ -193,7 +192,7 @@ namespace Discord.Rest var builder = ImmutableArray.CreateBuilder(); foreach (var model in models) { - var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); + var author = MessageHelper.GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); builder.Add(RestMessage.Create(client, channel, author, model)); } return builder.ToImmutable(); @@ -201,7 +200,7 @@ namespace Discord.Rest /// Message content is too long, length must be less or equal to . public static async Task SendMessageAsync(IMessageChannel channel, BaseDiscordClient client, - string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, RequestOptions options) + string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, RequestOptions options) { Preconditions.AtMost(allowedMentions?.RoleIds?.Count ?? 0, 100, nameof(allowedMentions.RoleIds), "A max of 100 role Ids are allowed."); Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); @@ -222,7 +221,7 @@ namespace Discord.Rest } } - var args = new CreateMessageParams(text) { IsTTS = isTTS, Embed = embed?.ToModel(), AllowedMentions = allowedMentions?.ToModel() }; + var args = new CreateMessageParams(text) { IsTTS = isTTS, Embed = embed?.ToModel(), AllowedMentions = allowedMentions?.ToModel(), MessageReference = messageReference?.ToModel() }; var model = await client.ApiClient.CreateMessageAsync(channel.Id, args, options).ConfigureAwait(false); return RestUserMessage.Create(client, channel, client.CurrentUser, model); } @@ -252,16 +251,16 @@ namespace Discord.Rest /// An I/O error occurred while opening the file. /// Message content is too long, length must be less or equal to . public static async Task SendFileAsync(IMessageChannel channel, BaseDiscordClient client, - string filePath, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, RequestOptions options, bool isSpoiler) + string filePath, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, RequestOptions options, bool isSpoiler) { string filename = Path.GetFileName(filePath); using (var file = File.OpenRead(filePath)) - return await SendFileAsync(channel, client, file, filename, text, isTTS, embed, allowedMentions, options, isSpoiler).ConfigureAwait(false); + return await SendFileAsync(channel, client, file, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler).ConfigureAwait(false); } /// Message content is too long, length must be less or equal to . public static async Task SendFileAsync(IMessageChannel channel, BaseDiscordClient client, - Stream stream, string filename, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, RequestOptions options, bool isSpoiler) + Stream stream, string filename, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, RequestOptions options, bool isSpoiler) { Preconditions.AtMost(allowedMentions?.RoleIds?.Count ?? 0, 100, nameof(allowedMentions.RoleIds), "A max of 100 role Ids are allowed."); Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); @@ -282,7 +281,7 @@ namespace Discord.Rest } } - var args = new UploadFileParams(stream) { Filename = filename, Content = text, IsTTS = isTTS, Embed = embed?.ToModel() ?? Optional.Unspecified, AllowedMentions = allowedMentions?.ToModel() ?? Optional.Unspecified, IsSpoiler = isSpoiler }; + var args = new UploadFileParams(stream) { Filename = filename, Content = text, IsTTS = isTTS, Embed = embed?.ToModel() ?? Optional.Unspecified, AllowedMentions = allowedMentions?.ToModel() ?? Optional.Unspecified, MessageReference = messageReference?.ToModel() ?? Optional.Unspecified, IsSpoiler = isSpoiler }; var model = await client.ApiClient.UploadFileAsync(channel.Id, args, options).ConfigureAwait(false); return RestUserMessage.Create(client, channel, client.CurrentUser, model); } @@ -450,16 +449,5 @@ namespace Discord.Rest }; await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); } - - //Helpers - private static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model, ulong? webhookId) - { - IUser author = null; - if (guild != null) - author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result; - if (author == null) - author = RestUser.Create(client, guild, model, webhookId); - return author; - } } } diff --git a/src/Discord.Net.Rest/Entities/Channels/IRestMessageChannel.cs b/src/Discord.Net.Rest/Entities/Channels/IRestMessageChannel.cs index d02b293ef..09404d836 100644 --- a/src/Discord.Net.Rest/Entities/Channels/IRestMessageChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/IRestMessageChannel.cs @@ -24,17 +24,18 @@ namespace Discord.Rest /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - new Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null); + new Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Sends a file to this message channel with an optional caption. /// /// /// This method follows the same behavior as described in - /// . Please visit + /// . Please visit /// its documentation for more details on this method. /// /// The file path of the file. @@ -47,16 +48,17 @@ namespace Discord.Rest /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - new Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null); + new Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Sends a file to this message channel with an optional caption. /// /// - /// This method follows the same behavior as described in . + /// This method follows the same behavior as described in . /// Please visit its documentation for more details on this method. /// /// The of the file to be sent. @@ -70,11 +72,12 @@ namespace Discord.Rest /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - new Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null); + new Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Gets a message from this message channel. diff --git a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs index 0f29f9d77..d59a10fb5 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs @@ -93,8 +93,8 @@ namespace Discord.Rest /// /// Message content is too long, length must be less or equal to . - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) - => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, options); + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, messageReference, options); /// /// @@ -121,12 +121,12 @@ namespace Discord.Rest /// is in an invalid format. /// An I/O error occurred while opening the file. /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null) @@ -200,14 +200,14 @@ namespace Discord.Rest async Task> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options) => await GetPinnedMessagesAsync(options).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions) - => await SendMessageAsync(text, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendMessageAsync(text, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); //IChannel /// diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs index 4361fd281..666d6a4f4 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs @@ -95,8 +95,8 @@ namespace Discord.Rest /// /// Message content is too long, length must be less or equal to . - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) - => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, options); + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, messageReference, options); /// /// @@ -123,12 +123,12 @@ namespace Discord.Rest /// is in an invalid format. /// An I/O error occurred while opening the file. /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// public Task TriggerTypingAsync(RequestOptions options = null) @@ -178,14 +178,14 @@ namespace Discord.Rest async Task> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options) => await GetPinnedMessagesAsync(options).ConfigureAwait(false); - async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); - async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); - async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions) - => await SendMessageAsync(text, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendMessageAsync(text, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); //IAudioChannel /// diff --git a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs index a85ef4f0b..fdc4b7988 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs @@ -102,8 +102,8 @@ namespace Discord.Rest /// /// Message content is too long, length must be less or equal to . - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) - => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, options); + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, messageReference, options); /// /// @@ -130,13 +130,13 @@ namespace Discord.Rest /// is in an invalid format. /// An I/O error occurred while opening the file. /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null) @@ -267,15 +267,15 @@ namespace Discord.Rest => await GetPinnedMessagesAsync(options).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions) - => await SendMessageAsync(text, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendMessageAsync(text, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); //IGuildChannel /// diff --git a/src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs b/src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs index 5ab96032f..8b8870be2 100644 --- a/src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs +++ b/src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs @@ -11,5 +11,7 @@ namespace Discord.API public Optional Roles { get; set; } [JsonProperty("users")] public Optional Users { get; set; } + [JsonProperty("replied_user")] + public Optional RepliedUser { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs index 619ddc876..b86a5dbf3 100644 --- a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs +++ b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; using Model = Discord.API.Message; +using UserModel = Discord.API.User; namespace Discord.Rest { @@ -290,7 +291,7 @@ namespace Discord.Rest public static MessageSource GetSource(Model msg) { - if (msg.Type != MessageType.Default) + if (msg.Type != MessageType.Default && msg.Type != MessageType.Reply) return MessageSource.System; else if (msg.WebhookId.IsSpecified) return MessageSource.Webhook; @@ -307,5 +308,15 @@ namespace Discord.Rest { await client.ApiClient.CrosspostAsync(channelId, msgId, options).ConfigureAwait(false); } + + public static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model, ulong? webhookId) + { + IUser author = null; + if (guild != null) + author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result; + if (author == null) + author = RestUser.Create(client, guild, model, webhookId); + return author; + } } } diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs index 2456e65e7..0169c9b8b 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs @@ -77,7 +77,7 @@ namespace Discord.Rest } internal static RestMessage Create(BaseDiscordClient discord, IMessageChannel channel, IUser author, Model model) { - if (model.Type == MessageType.Default) + if (model.Type == MessageType.Default || model.Type == MessageType.Reply) return RestUserMessage.Create(discord, channel, author, model); else return RestSystemMessage.Create(discord, channel, author, model); @@ -119,7 +119,7 @@ namespace Discord.Rest Reference = new MessageReference { GuildId = model.Reference.Value.GuildId, - ChannelId = model.Reference.Value.ChannelId, + InternalChannelId = model.Reference.Value.ChannelId, MessageId = model.Reference.Value.MessageId }; } diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs index 79df4308d..2c76a4253 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs @@ -15,6 +15,7 @@ namespace Discord.Rest { private bool _isMentioningEveryone, _isTTS, _isPinned, _isSuppressed; private long? _editedTimestampTicks; + private IUserMessage _referencedMessage; private ImmutableArray _attachments = ImmutableArray.Create(); private ImmutableArray _embeds = ImmutableArray.Create(); private ImmutableArray _tags = ImmutableArray.Create(); @@ -43,6 +44,8 @@ namespace Discord.Rest public override IReadOnlyCollection MentionedUsers => _userMentions; /// public override IReadOnlyCollection Tags => _tags; + /// + public IUserMessage ReferencedMessage => _referencedMessage; internal RestUserMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source) : base(discord, id, channel, author, source) @@ -118,14 +121,21 @@ namespace Discord.Rest } } + var guildId = (Channel as IGuildChannel)?.GuildId; + var guild = guildId != null ? (Discord as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).Result : null; if (model.Content.IsSpecified) { var text = model.Content.Value; - var guildId = (Channel as IGuildChannel)?.GuildId; - var guild = guildId != null ? (Discord as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).Result : null; _tags = MessageHelper.ParseTags(text, null, guild, _userMentions); model.Content = text; } + + if (model.ReferencedMessage.IsSpecified && model.ReferencedMessage.Value != null) + { + var refMsg = model.ReferencedMessage.Value; + IUser refMsgAuthor = MessageHelper.GetAuthor(Discord, guild, refMsg.Author.Value, refMsg.WebhookId.ToNullable()); + _referencedMessage = RestUserMessage.Create(Discord, Channel, refMsgAuthor, refMsg); + } } /// diff --git a/src/Discord.Net.Rest/Extensions/EntityExtensions.cs b/src/Discord.Net.Rest/Extensions/EntityExtensions.cs index abdfc9d4f..8e1b9c6d8 100644 --- a/src/Discord.Net.Rest/Extensions/EntityExtensions.cs +++ b/src/Discord.Net.Rest/Extensions/EntityExtensions.cs @@ -68,6 +68,16 @@ namespace Discord.Rest Parse = entity.AllowedTypes?.EnumerateMentionTypes().ToArray(), Roles = entity.RoleIds?.ToArray(), Users = entity.UserIds?.ToArray(), + RepliedUser = entity.MentionRepliedUser ?? Optional.Create(), + }; + } + public static API.MessageReference ToModel(this MessageReference entity) + { + return new API.MessageReference() + { + ChannelId = entity.InternalChannelId, + GuildId = entity.GuildId, + MessageId = entity.MessageId, }; } public static IEnumerable EnumerateMentionTypes(this AllowedMentionTypes mentionTypes) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs index e8511f1f5..b4625f799 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs @@ -33,16 +33,17 @@ namespace Discord.WebSocket /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - new Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null); + new Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Sends a file to this message channel with an optional caption. /// /// - /// This method follows the same behavior as described in . + /// This method follows the same behavior as described in . /// Please visit its documentation for more details on this method. /// /// The file path of the file. @@ -55,16 +56,17 @@ namespace Discord.WebSocket /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - new Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null); + new Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Sends a file to this message channel with an optional caption. /// /// - /// This method follows the same behavior as described in . + /// This method follows the same behavior as described in . /// Please visit its documentation for more details on this method. /// /// The of the file to be sent. @@ -78,11 +80,12 @@ namespace Discord.WebSocket /// Specifies if notifications are sent for mentioned users and roles in the message . /// If null, all mentioned roles and users will be notified. /// + /// The message references to be included. Used to reply to specific messages. /// /// A task that represents an asynchronous send operation for delivering the message. The task result /// contains the sent message. /// - new Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null); + new Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null); /// /// Gets a cached message from this channel. diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs index 527685578..c123a9d4e 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs @@ -135,16 +135,16 @@ namespace Discord.WebSocket /// /// Message content is too long, length must be less or equal to . - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) - => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, options); + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, messageReference, options); /// - public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null) => ChannelHelper.DeleteMessageAsync(this, messageId, Discord, options); @@ -229,14 +229,14 @@ namespace Discord.WebSocket async Task> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options) => await GetPinnedMessagesAsync(options).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions) - => await SendMessageAsync(text, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendMessageAsync(text, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); //IChannel /// diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs index b95bbffc1..dc5ac4222 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs @@ -163,15 +163,15 @@ namespace Discord.WebSocket /// /// Message content is too long, length must be less or equal to . - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) - => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, options); + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, messageReference, options); /// - public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// - public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null) @@ -293,14 +293,14 @@ namespace Discord.WebSocket => await GetPinnedMessagesAsync(options).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions) - => await SendMessageAsync(text, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendMessageAsync(text, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); //IAudioChannel /// diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs index e49e3ed37..d7d918f9f 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs @@ -161,17 +161,17 @@ namespace Discord.WebSocket /// /// Message content is too long, length must be less or equal to . - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) - => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, options); + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, allowedMentions, messageReference, options); /// - public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// /// Message content is too long, length must be less or equal to . - public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) - => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, options, isSpoiler); + public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) + => ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, allowedMentions, messageReference, options, isSpoiler); /// public Task DeleteMessagesAsync(IEnumerable messages, RequestOptions options = null) @@ -302,14 +302,14 @@ namespace Discord.WebSocket => await GetPinnedMessagesAsync(options).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(filePath, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions) - => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendFileAsync(stream, filename, text, isTTS, embed, options, isSpoiler, allowedMentions, messageReference).ConfigureAwait(false); /// - async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions) - => await SendMessageAsync(text, isTTS, embed, options, allowedMentions).ConfigureAwait(false); + async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options, AllowedMentions allowedMentions, MessageReference messageReference) + => await SendMessageAsync(text, isTTS, embed, options, allowedMentions, messageReference).ConfigureAwait(false); // INestedChannel /// diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs index 614bd044b..98fd4af07 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs @@ -110,7 +110,7 @@ namespace Discord.WebSocket } internal static SocketMessage Create(DiscordSocketClient discord, ClientState state, SocketUser author, ISocketMessageChannel channel, Model model) { - if (model.Type == MessageType.Default) + if (model.Type == MessageType.Default || model.Type == MessageType.Reply) return SocketUserMessage.Create(discord, state, author, channel, model); else return SocketSystemMessage.Create(discord, state, author, channel, model); @@ -152,7 +152,7 @@ namespace Discord.WebSocket Reference = new MessageReference { GuildId = model.Reference.Value.GuildId, - ChannelId = model.Reference.Value.ChannelId, + InternalChannelId = model.Reference.Value.ChannelId, MessageId = model.Reference.Value.MessageId }; } diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index da7f8f16b..4f876ed6f 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -17,6 +17,7 @@ namespace Discord.WebSocket { private bool _isMentioningEveryone, _isTTS, _isPinned, _isSuppressed; private long? _editedTimestampTicks; + private IUserMessage _referencedMessage; private ImmutableArray _attachments = ImmutableArray.Create(); private ImmutableArray _embeds = ImmutableArray.Create(); private ImmutableArray _tags = ImmutableArray.Create(); @@ -45,6 +46,8 @@ namespace Discord.WebSocket public override IReadOnlyCollection MentionedRoles => _roleMentions; /// public override IReadOnlyCollection MentionedUsers => _userMentions; + /// + public IUserMessage ReferencedMessage => _referencedMessage; internal SocketUserMessage(DiscordSocketClient discord, ulong id, ISocketMessageChannel channel, SocketUser author, MessageSource source) : base(discord, id, channel, author, source) @@ -131,6 +134,9 @@ namespace Discord.WebSocket _tags = MessageHelper.ParseTags(text, Channel, guild, _userMentions); model.Content = text; } + + if (model.ReferencedMessage.IsSpecified && model.ReferencedMessage.Value != null) + _referencedMessage = RestUserMessage.Create(Discord, Channel, Author, model.ReferencedMessage.Value); } /// diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs index 870c05812..f169fb717 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs @@ -73,17 +73,17 @@ namespace Discord throw new NotImplementedException(); } - public Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + public Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } - public Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + public Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs index 31df719da..e662d628a 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs @@ -81,17 +81,17 @@ namespace Discord throw new NotImplementedException(); } - public Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + public Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } - public Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + public Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs index a95a91f5c..fbaaf9a18 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs @@ -167,17 +167,17 @@ namespace Discord throw new NotImplementedException(); } - public Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + public Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } - public Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null) + public Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } - public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null) + public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, AllowedMentions allowedMentions = null, MessageReference messageReference = null) { throw new NotImplementedException(); } From 521391690300aadbd624187279d9a27b5c3880c2 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 25 Nov 2020 14:27:26 -0300 Subject: [PATCH 41/76] fix: Possible NullReferenceException when receiving InvalidSession (#1695) --- .../DiscordSocketClient.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 26a0d73bd..8fa09e8f6 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -534,15 +534,20 @@ namespace Discord.WebSocket _sessionId = null; _lastSeq = 0; - await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); - try + if (_shardedClient != null) { - await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); - } - finally - { - _shardedClient.ReleaseIdentifyLock(); + await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); + try + { + await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); + } + finally + { + _shardedClient.ReleaseIdentifyLock(); + } } + else + await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); } break; case GatewayOpCode.Reconnect: From 5ed01a30b6c25da65e5c401bf6b7ed8fbb939926 Mon Sep 17 00:00:00 2001 From: Paulo Date: Thu, 26 Nov 2020 14:30:58 -0300 Subject: [PATCH 42/76] fix: UserMentions throwing NullRef --- .../Entities/Messages/SocketUserMessage.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index 4f876ed6f..6d8581291 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -118,11 +118,14 @@ namespace Discord.WebSocket for (int i = 0; i < value.Length; i++) { var val = value[i]; - var guildUser = guild.GetUser(val.Id); - if (guildUser != null) - newMentions.Add(guildUser); - else if (val.Object != null) - newMentions.Add(SocketUnknownUser.Create(Discord, state, val.Object)); + if (val.Object != null) + { + var user = Channel.GetUserAsync(val.Object.Id, CacheMode.CacheOnly).GetAwaiter().GetResult() as SocketUser; + if (user != null) + newMentions.Add(user); + else + newMentions.Add(SocketUnknownUser.Create(Discord, state, val.Object)); + } } _userMentions = newMentions.ToImmutable(); } From 1e9b252e642e560abd5e1a319c80ba3c66cf304c Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 29 Nov 2020 21:18:52 -0300 Subject: [PATCH 43/76] fix: Wrong author for SocketUserMessage.ReferencedMessage --- .../Entities/Messages/SocketUserMessage.cs | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index 6d8581291..bea0f45eb 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -139,7 +139,29 @@ namespace Discord.WebSocket } if (model.ReferencedMessage.IsSpecified && model.ReferencedMessage.Value != null) - _referencedMessage = RestUserMessage.Create(Discord, Channel, Author, model.ReferencedMessage.Value); + { + var refMsg = model.ReferencedMessage.Value; + ulong? webhookId = refMsg.WebhookId.ToNullable(); + SocketUser refMsgAuthor = null; + if (refMsg.Author.IsSpecified) + { + if (guild != null) + { + if (webhookId != null) + refMsgAuthor = SocketWebhookUser.Create(guild, state, refMsg.Author.Value, webhookId.Value); + else + refMsgAuthor = guild.GetUser(refMsg.Author.Value.Id); + } + else + refMsgAuthor = (Channel as SocketChannel).GetUser(refMsg.Author.Value.Id); + if (refMsgAuthor == null) + refMsgAuthor = SocketUnknownUser.Create(Discord, state, refMsg.Author.Value); + } + else + // Message author wasn't specified in the payload, so create a completely anonymous unknown user + refMsgAuthor = new SocketUnknownUser(Discord, id: 0); + _referencedMessage = SocketUserMessage.Create(Discord, state, refMsgAuthor, Channel, refMsg); + } } /// From 9d7cb39faabd087c835515e63ab6ce53e2202991 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 1 Dec 2020 02:47:20 -0300 Subject: [PATCH 44/76] fix: Rollback Activities to Game (#1702) --- .../API/Gateway/StatusUpdateParams.cs | 4 +-- .../DiscordSocketApiClient.cs | 8 ++--- .../DiscordSocketClient.cs | 30 +++++++++++-------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs b/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs index e685e5e57..5fec8b4bd 100644 --- a/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs +++ b/src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs @@ -12,7 +12,7 @@ namespace Discord.API.Gateway public long? IdleSince { get; set; } [JsonProperty("afk")] public bool IsAFK { get; set; } - [JsonProperty("activities")] - public Game[] Activities { get; set; } + [JsonProperty("game")] + public Game Game { get; set; } } } diff --git a/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs b/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs index 5a926ba26..d14a314d6 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketApiClient.cs @@ -216,7 +216,7 @@ namespace Discord.API await _sentGatewayMessageEvent.InvokeAsync(opCode).ConfigureAwait(false); } - public async Task SendIdentifyAsync(int largeThreshold = 100, int shardID = 0, int totalShards = 1, bool guildSubscriptions = true, GatewayIntents? gatewayIntents = null, (UserStatus, bool, long?, GameModel[])? presence = null, RequestOptions options = null) + public async Task SendIdentifyAsync(int largeThreshold = 100, int shardID = 0, int totalShards = 1, bool guildSubscriptions = true, GatewayIntents? gatewayIntents = null, (UserStatus, bool, long?, GameModel)? presence = null, RequestOptions options = null) { options = RequestOptions.CreateOrClone(options); var props = new Dictionary @@ -246,7 +246,7 @@ namespace Discord.API Status = presence.Value.Item1, IsAFK = presence.Value.Item2, IdleSince = presence.Value.Item3, - Activities = presence.Value.Item4 + Game = presence.Value.Item4, }; } @@ -268,7 +268,7 @@ namespace Discord.API options = RequestOptions.CreateOrClone(options); await SendGatewayAsync(GatewayOpCode.Heartbeat, lastSeq, options: options).ConfigureAwait(false); } - public async Task SendStatusUpdateAsync(UserStatus status, bool isAFK, long? since, GameModel[] game, RequestOptions options = null) + public async Task SendStatusUpdateAsync(UserStatus status, bool isAFK, long? since, GameModel game, RequestOptions options = null) { options = RequestOptions.CreateOrClone(options); var args = new StatusUpdateParams @@ -276,7 +276,7 @@ namespace Discord.API Status = status, IdleSince = since, IsAFK = isAFK, - Activities = game + Game = game }; options.BucketId = GatewayBucket.Get(GatewayBucketType.PresenceUpdate).Id; await SendGatewayAsync(GatewayOpCode.StatusUpdate, args, options: options).ConfigureAwait(false); diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 8fa09e8f6..0a2123ef2 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -57,7 +57,8 @@ namespace Discord.WebSocket /// public override int Latency { get; protected set; } /// - public override UserStatus Status { get; protected set; } = UserStatus.Online; + public override UserStatus Status { get => _status ?? UserStatus.Online; protected set => _status = value; } + private UserStatus? _status; /// public override IActivity Activity { get => _activity.GetValueOrDefault(); protected set => _activity = Optional.Create(value); } private Optional _activity; @@ -449,22 +450,25 @@ namespace Discord.WebSocket return; CurrentUser.Presence = new SocketPresence(Status, Activity, null, null); - var presence = BuildCurrentStatus(); + var presence = BuildCurrentStatus() ?? (UserStatus.Online, false, null, null); await ApiClient.SendStatusUpdateAsync( - presence.Item1, - presence.Item2, - presence.Item3, - presence.Item4).ConfigureAwait(false); + status: presence.Item1, + isAFK: presence.Item2, + since: presence.Item3, + game: presence.Item4).ConfigureAwait(false); } - private (UserStatus, bool, long?, GameModel[]) BuildCurrentStatus() + private (UserStatus, bool, long?, GameModel)? BuildCurrentStatus() { - var status = Status; + var status = _status; var statusSince = _statusSince; var activity = _activity; - GameModel[] gameModels = null; + if (status == null && !activity.IsSpecified) + return null; + + GameModel game = null; // Discord only accepts rich presence over RPC, don't even bother building a payload if (activity.GetValueOrDefault() != null) @@ -476,15 +480,15 @@ namespace Discord.WebSocket gameModel.Type = Activity.Type; if (Activity is StreamingGame streamGame) gameModel.StreamUrl = streamGame.Url; - gameModels = new[] { gameModel }; + game = gameModel; } else if (activity.IsSpecified) - gameModels = new GameModel[0]; + game = null; - return (status, + return (status ?? UserStatus.Online, status == UserStatus.AFK, statusSince != null ? _statusSince.Value.ToUnixTimeMilliseconds() : (long?)null, - gameModels); + game); } private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload) From e385c40fc7b3106fd8ee09ec9feb4f2b89514224 Mon Sep 17 00:00:00 2001 From: Joel Liechti <52202086+Joelius300@users.noreply.github.com> Date: Mon, 14 Dec 2020 04:42:04 +0100 Subject: [PATCH 45/76] docs: Update summary of SocketVoiceChannel.Users (#1714) The inherited summary incorrectly stated that all users who _see_ the channel are returned when in reality only the ones _connected_ are. --- .../Entities/Channels/SocketVoiceChannel.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs index 9fff6c207..bf4a63c9f 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs @@ -34,7 +34,12 @@ namespace Discord.WebSocket public Task SyncPermissionsAsync(RequestOptions options = null) => ChannelHelper.SyncPermissionsAsync(this, Discord, options); - /// + /// + /// Gets a collection of users that are currently connected to this voice channel. + /// + /// + /// A read-only collection of users that are currently connected to this voice channel. + /// public override IReadOnlyCollection Users => Guild.Users.Where(x => x.VoiceChannel?.Id == Id).ToImmutableArray(); From aacfea05ea6739b3eccde3fee87b87159457cff0 Mon Sep 17 00:00:00 2001 From: vrachv <52053491+vrachv@users.noreply.github.com> Date: Mon, 14 Dec 2020 06:54:31 +0300 Subject: [PATCH 46/76] feature: Add max bitrate value to SocketGuild * Update SocketGuild.cs * Fix returns value docs Signed-off-by: Still Hsu Co-authored-by: Still Hsu --- .../Entities/Guilds/SocketGuild.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index ad58a735e..2f098844f 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -178,6 +178,26 @@ namespace Discord.WebSocket } } /// + /// Gets the max bitrate for voice channels in this guild. + /// + /// + /// A representing the maximum bitrate value allowed by Discord in this guild. + /// + public int MaxBitrate + { + get + { + var maxBitrate = PremiumTier switch + { + PremiumTier.Tier1 => 128000, + PremiumTier.Tier2 => 256000, + PremiumTier.Tier3 => 384000, + _ => 96000, + }; + return maxBitrate; + } + } + /// /// Gets the embed channel (i.e. the channel set in the guild's widget settings) in this guild. /// /// From 47f571ef1c883a9c3ba20e30ffeb4aa04c9a1c70 Mon Sep 17 00:00:00 2001 From: Daniel Baynton <49287178+230Daniel@users.noreply.github.com> Date: Mon, 14 Dec 2020 03:55:03 +0000 Subject: [PATCH 47/76] fix: SocketGuild.HasAllMembers is false if a user left a guild (#1683) * Fix: HasAllMembers is false if a user left * Fix: Correct boolean logic --- src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index 2f098844f..e9e535998 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -136,7 +136,7 @@ namespace Discord.WebSocket /// public string BannerUrl => CDN.GetGuildBannerUrl(Id, BannerId); /// Indicates whether the client has all the members downloaded to the local guild cache. - public bool HasAllMembers => MemberCount == DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted; + public bool HasAllMembers => MemberCount <= DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted; /// Indicates whether the guild cache is synced to this guild. public bool IsSynced => _syncPromise.Task.IsCompleted; public Task SyncPromise => _syncPromise.Task; From 857ef77b41967148ee9f2dfb866b75062795625c Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Wed, 6 May 2020 09:26:15 +0800 Subject: [PATCH 48/76] Add new method of role ID copy Signed-off-by: Still Hsu <5843208+Still34@users.noreply.github.com> --- docs/faq/basics/getting-started.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/faq/basics/getting-started.md b/docs/faq/basics/getting-started.md index f38d2cea7..e254226d0 100644 --- a/docs/faq/basics/getting-started.md +++ b/docs/faq/basics/getting-started.md @@ -74,6 +74,9 @@ it will return the user ID of the aforementioned user. Several common ways to do this: -1. Make the role mentionable and mention the role, and escape it +1. (Easiest) Right click on the role either in the Server Settings + or in the user's role list. + ![Roles](images/role-copy.png) +2. Make the role mentionable and mention the role, and escape it using the `\` character in front. -2. Inspect the roles collection within the guild via your debugger. \ No newline at end of file +3. Inspect the roles collection within the guild via your debugger. \ No newline at end of file From 38f6186cd04434a3f8abbecbc58ccb847d2973fd Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Wed, 6 May 2020 09:27:26 +0800 Subject: [PATCH 49/76] Add missing asset Signed-off-by: Still Hsu <5843208+Still34@users.noreply.github.com> --- docs/faq/basics/images/role-copy.png | Bin 0 -> 16091 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/faq/basics/images/role-copy.png diff --git a/docs/faq/basics/images/role-copy.png b/docs/faq/basics/images/role-copy.png new file mode 100644 index 0000000000000000000000000000000000000000..1dbc2982f460a6bee2e6128cc60577efc714ac05 GIT binary patch literal 16091 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 literal 0 HcmV?d00001 From 9ea3291ef14a9c1f1a7604d47a4856aaacccaa2a Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Fri, 22 May 2020 11:29:25 +0800 Subject: [PATCH 50/76] Resolve inheritdocs warning --- src/Discord.Net.Rest/Entities/Messages/Attachment.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Rest/Entities/Messages/Attachment.cs b/src/Discord.Net.Rest/Entities/Messages/Attachment.cs index abe049180..1cd73518a 100644 --- a/src/Discord.Net.Rest/Entities/Messages/Attachment.cs +++ b/src/Discord.Net.Rest/Entities/Messages/Attachment.cs @@ -3,7 +3,7 @@ using Model = Discord.API.Attachment; namespace Discord { - /// + /// [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Attachment : IAttachment { From 62539f039109976ea64c52ec7a8df055b47e31e4 Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Fri, 22 May 2020 11:42:29 +0800 Subject: [PATCH 51/76] Move bulk deletes remarks from to --- .../DiscordSocketConfig.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index 6b0c5ebc4..c374d9e0d 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -109,14 +109,18 @@ namespace Discord.WebSocket /// /// Gets or sets the behavior for on bulk deletes. - /// - /// If true, the event will not be raised for bulk deletes, and - /// only the will be raised. - /// - /// If false, both events will be raised. - /// - /// If unset, both events will be raised, but a warning will be raised the first time a bulk delete event is received. /// + /// + /// + /// If true, the event will not be raised for bulk + /// deletes, and only the will be raised. If false + /// , both events will be raised. + /// + /// + /// If unset, both events will be raised, but a warning will be raised the first time a bulk delete event is + /// received. + /// + /// public bool? ExclusiveBulkDelete { get; set; } = null; /// From 13a41f875478a04738e64438aaa2508a25903df7 Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Fri, 22 May 2020 11:44:27 +0800 Subject: [PATCH 52/76] Mark null as a specific langword in summary --- src/Discord.Net.WebSocket/DiscordSocketConfig.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index c374d9e0d..8392105f0 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -102,8 +102,8 @@ namespace Discord.WebSocket /// public bool AlwaysDownloadUsers { get; set; } = false; /// - /// Gets or sets the timeout for event handlers, in milliseconds, after which a warning will be logged. Null - /// disables this check. + /// Gets or sets the timeout for event handlers, in milliseconds, after which a warning will be logged. + /// nulldisables this check. /// public int? HandlerTimeout { get; set; } = 3000; From 833ee42a1fd3cbdfe2e27af49cc1c904df7eb862 Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Fri, 22 May 2020 11:51:51 +0800 Subject: [PATCH 53/76] Cleanup GatewayReconnectException docs --- .../GatewayReconnectException.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Discord.Net.WebSocket/GatewayReconnectException.cs b/src/Discord.Net.WebSocket/GatewayReconnectException.cs index 1a8024558..c5b15e007 100644 --- a/src/Discord.Net.WebSocket/GatewayReconnectException.cs +++ b/src/Discord.Net.WebSocket/GatewayReconnectException.cs @@ -3,18 +3,15 @@ using System; namespace Discord.WebSocket { /// - /// An exception thrown when the gateway client has been requested to - /// reconnect. + /// The exception thrown when the gateway client has been requested to reconnect. /// public class GatewayReconnectException : Exception { /// - /// Creates a new instance of the - /// type. + /// Initializes a new instance of the class with the reconnection + /// message. /// - /// - /// The reason why the gateway has been requested to reconnect. - /// + /// The reason why the gateway has been requested to reconnect. public GatewayReconnectException(string message) : base(message) { } From 28a6f97d628a2b5f1afec6c42aa03ad8731f9ea1 Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Sun, 2 Aug 2020 23:25:34 +0800 Subject: [PATCH 54/76] Update Docfx.Plugins.LastModified to v1.2.4 Signed-off-by: Still Hsu <5843208+Still34@users.noreply.github.com> --- .../plugins/LastModifiedPostProcessor.dll | Bin 12288 -> 12288 bytes .../last-modified/plugins/LibGit2Sharp.dll | Bin 420864 -> 424448 bytes .../plugins/LibGit2Sharp.dll.config | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_template/last-modified/plugins/LastModifiedPostProcessor.dll b/docs/_template/last-modified/plugins/LastModifiedPostProcessor.dll index dd790e55eb6bb8c90b332cbc725c122308a65836..ccb2b0e3718efef6eacea25b3f1a0a7afdbe0bd3 100644 GIT binary patch delta 235 zcmZojXh@jQ!Lpv?e(%PfJA8~RlQa31nJpNYCinBJGD=V0%5M$gZT`$3D=09LgHLXq ztcvfN_eXBt7OD^2oS=A$S;R!ofPsOFk%84v&q&XNfkBRuL2|N!xD*>h!#oI6lCggB zJ#p#DQ&cTjOwII+CSO$5XJcTHpEqyPWEQmm0q;G_)IW+(_G$Yj9Nwe4TYPegT8{!$ zFvblk2vV(b^QdZF0QdfY WV^$LeJqCl#f_g5Dn;G@~GXelq&`4PT delta 235 zcmZojXh@jQ!Lm>`;myXLJA91HlQa31nKc-=CinBJGD=O}%5M$gZT`$3D=6TizeCp&lODEoS=A$S;Sb+fPsOFk%84v&q&XhfkBRuL2|N!xD*>h!vY9XlBuC# z@;!0s$&*zrSWOJ{3=JlqSJh|n?`v5wnMEx?;C-_pQ%lw~-x+IfF(eea+?<@E)}sIw z+zS%~s#eHUnOmiuYnQb)BD`j^fO;JxCo=;R10w?i1M}wT8nH}_#+$!t^)oUWPj1yQ VW;JHeV=&k(sOQ4CnNjaQBLLP6Nap|m diff --git a/docs/_template/last-modified/plugins/LibGit2Sharp.dll b/docs/_template/last-modified/plugins/LibGit2Sharp.dll index 82f214846eed7e2e2b651ebdf5d079ed20a913a5..31651507274c76c4e538cd3078fb7c4f79daa7f6 100644 GIT binary patch literal 424448 zcmd44d4L>Mx&K{LRbAcFvm~9F^h_p@3Co0Hx+jDnAs`|MA|eR5U_gWbf)bGmU4WQQ z4+8>j2?Fkl2m!e+SKJjh#Qk0uh@hy50ln_~f?mCP$KU7soT~1gNl@>-?;r0#`aI`3 z+jE}toaa1et>aI<)(bq(3;FlAzj@vrxcWQXe*gZ@48eor9~<;O*!$Hz?&vx0t9v}- z`RAp}H#U;zHO_qD^0Uvp;DY3$wc;y(qRsaT-o}S|ytVHRy#z{Bz{vGA09!1IScpjYWL8g7L=soQeudK$%`My&fttvsgQuC@e zsj9^V1?M?5+AX)IDjCMqK~1(oHHD`X?6__Kh)Rwy0K}pkVSwiitqQ!qKqC!YNl)wd zqH+|p?kISnD=B>rsJ>#<`Z%a!xOvaO3m=Z}gQnKU9A>*>gAz^16KP@RX;g|S|~l@b@$|P;^tu@X3aF6CiH{k@#gb`i_zx3*d0x-w6NrGg{VVP zXnAsF22^KzV9C&`g7*@m#PfFBdL*4}qB{Kv1YkBgOYQswl5Cq8$xvr^P@@^@xgFG! z40TQiHI|{y?Vy%ssOPm&DaDp&R1MTrdK8`(9WawzXjH#HoK6pyDm#UvymljU+AMj| z#7Judd6*as6NbDf-VClanqi&-CIww??UrGVZ)0``Qzq4uz|;?oHjm-o{GE`WJ0mab zFFo8BWTEjl3$()hbe!gQ39lB@qsel7I3{Vi`fxwdo}6W}bbclS%0!{_GwGd|Nmz*D z4P`GH3M*l}06xWkpe93w>QGeMw-Q#O_yr0r`c30gQw*pS(|yP~VUQ_TqLFn&Q6;Jr z4*J@T{z_OcR>C2lUu5w#MZVh_159Lm+)ATcwgdpQ5ElJ}HG@Wks{md1|*~ zi5=4t7mz9d z`=lHrV6_%HIGm&dD?)N2XnBN8PLk&mzZv%6xez(^NiBqKzx#v2uLjh{S&WW({PV#rxR<3;Us77(}qhL+*v6h%3=JL@2!m?(5{)IVrC zEDQQaFfkRan0_}c77Wk!q>xrFN6FK1`nm_VA_?61w%F@k)*jy=sXQs20MBIxRniS6 z1BKR|l7S#Z0A3&gp!jlpy6D;lcKR+tC#FVLOn(YsHo72>GBKkN7x8K$7UGjh==-zL z`J_#sg(qFdPYc-%;capb=;3%Re5(7ylg=L`zfwV~eKDdOztDM_N|L}mbfBM{Y3ZKr ze9hBv{q&`ZNIiyD`Of|X_Afq=pZW^l;v^0A=I0PQxh+&nwn33xo_v&8MutT|*3M8w zq(WsTo5(MnrQ8WW@q5Voo76-!EMTksgyey6⩔2{OK~enp1#+l==uJ^J14AV%GbPu? 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%0DNuN=qWh4LMlRSe)%h=$ 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%0AO3@kU%RYsMV|-PZFpJT$I1)MilP35Tv7Ym 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 literal 420864 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ð5*Vm-Kq!5N%d}4>@{s>Q{&W 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

O;L2IJJhT3$$~BpJ{RP&aDmP@V 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

1s~1;+#@2Dc0D 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

f$cJ6e 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 - - + + + From d761846638981d4406a938174eaab8e4f6ada165 Mon Sep 17 00:00:00 2001 From: Still Hsu <5843208+Still34@users.noreply.github.com> Date: Sun, 2 Aug 2020 23:26:27 +0800 Subject: [PATCH 55/76] Add updated libraries for LastModified Signed-off-by: Still Hsu <5843208+Still34@users.noreply.github.com> --- .../plugins/lib/alpine-x64/libgit2-ef5a385.so | Bin 0 -> 1545648 bytes .../lib/alpine.3.9-x64/libgit2-ef5a385.so | Bin 0 -> 1523400 bytes .../lib/debian-arm64/libgit2-ef5a385.so | Bin 0 -> 1311544 bytes .../lib/debian.9-x64/libgit2-ef5a385.so | Bin 0 -> 1523696 bytes .../plugins/lib/fedora-x64/libgit2-ef5a385.so | Bin 0 -> 1241048 bytes .../plugins/lib/linux-x64/libgit2-ef5a385.so | Bin 0 -> 1521701 bytes .../plugins/lib/osx/libgit2-ef5a385.dylib | Bin 0 -> 2098584 bytes .../plugins/lib/rhel-x64/libgit2-ef5a385.so | Bin 0 -> 1471527 bytes .../lib/ubuntu.16.04-arm64/libgit2-ef5a385.so | Bin 0 -> 1346760 bytes .../lib/ubuntu.18.04-x64/libgit2-ef5a385.so | Bin 0 -> 1564280 bytes .../plugins/lib/win32/x64/git2-ef5a385.dll | Bin 0 -> 1238016 bytes .../plugins/lib/win32/x86/git2-ef5a385.dll | Bin 0 -> 971264 bytes 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/_template/last-modified/plugins/lib/alpine-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/alpine.3.9-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/debian-arm64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/debian.9-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/fedora-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/linux-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/osx/libgit2-ef5a385.dylib create mode 100644 docs/_template/last-modified/plugins/lib/rhel-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/ubuntu.16.04-arm64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/ubuntu.18.04-x64/libgit2-ef5a385.so create mode 100644 docs/_template/last-modified/plugins/lib/win32/x64/git2-ef5a385.dll create mode 100644 docs/_template/last-modified/plugins/lib/win32/x86/git2-ef5a385.dll diff --git a/docs/_template/last-modified/plugins/lib/alpine-x64/libgit2-ef5a385.so b/docs/_template/last-modified/plugins/lib/alpine-x64/libgit2-ef5a385.so new file mode 100644 index 0000000000000000000000000000000000000000..793f4483a549d956c4fb0e7e88976bcc09fdbb5d GIT binary patch literal 1545648 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�U2^m|kOCOFj2=-Hy~GN^P4)uN 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 IgQO#1Q2N&I(b7`NvcW%Adbn>fc-`f7cL=M9ka% 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�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

public int? ShardId { get; set; } = null; + /// /// Gets or sets the total number of shards for this application. /// @@ -55,9 +56,10 @@ namespace Discord.WebSocket /// disables the message cache entirely. ///
public int MessageCacheSize { get; set; } = 0; + /// /// Gets or sets the max number of users a guild may have for offline users to be included in the READY - /// packet. Max is 250. + /// packet. The maximum value allowed is 250. /// public int LargeThreshold { get; set; } = 250; @@ -65,6 +67,7 @@ namespace Discord.WebSocket /// Gets or sets the provider used to generate new WebSocket connections. ///
public WebSocketProvider WebSocketProvider { get; set; } + /// /// Gets or sets the provider used to generate new UDP sockets. /// @@ -95,15 +98,16 @@ namespace Discord.WebSocket /// traffic. If you are using the command system, the default user TypeReader may fail to find the user /// due to this issue. This may be resolved at v3 of the library. Until then, you may want to consider /// overriding the TypeReader and use - /// + /// /// or /// as a backup. /// /// public bool AlwaysDownloadUsers { get; set; } = false; + /// /// Gets or sets the timeout for event handlers, in milliseconds, after which a warning will be logged. - /// nulldisables this check. + /// Setting this property to nulldisables this check. /// public int? HandlerTimeout { get; set; } = 3000; @@ -151,18 +155,21 @@ namespace Discord.WebSocket /// before firing READY. /// /// Value must be at least 0. - public int MaxWaitBetweenGuildAvailablesBeforeReady { + public int MaxWaitBetweenGuildAvailablesBeforeReady + { get { - return _maxWaitForGuildAvailable; + return this.maxWaitForGuildAvailable; } + set { - Preconditions.AtLeast(value, 0, nameof(MaxWaitBetweenGuildAvailablesBeforeReady)); - _maxWaitForGuildAvailable = value; + Preconditions.AtLeast(value, 0, nameof(this.MaxWaitBetweenGuildAvailablesBeforeReady)); + this.maxWaitForGuildAvailable = value; } } - private int _maxWaitForGuildAvailable = 10000; + + private int maxWaitForGuildAvailable = 10000; /// /// Gets or sets gateway intents to limit what events are sent from Discord. Allows for more granular control than the property. @@ -175,7 +182,7 @@ namespace Discord.WebSocket public GatewayIntents? GatewayIntents { get; set; } /// - /// Initializes a default configuration. + /// Initializes a new instance of the class with the default configuration. /// public DiscordSocketConfig() { From a48e46de522cbe84f8e18e9c587fa6a9701b0c00 Mon Sep 17 00:00:00 2001 From: Still Hsu Date: Mon, 14 Dec 2020 12:25:51 +0800 Subject: [PATCH 61/76] docs: Fix the missing "In This Article" section --- docs/_template/light-dark-theme/partials/affix.tmpl.partial | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_template/light-dark-theme/partials/affix.tmpl.partial b/docs/_template/light-dark-theme/partials/affix.tmpl.partial index aafcdf05b..b3ce60b5c 100644 --- a/docs/_template/light-dark-theme/partials/affix.tmpl.partial +++ b/docs/_template/light-dark-theme/partials/affix.tmpl.partial @@ -27,7 +27,8 @@ {{/_disableContribution}} From 36de7b25f336e26e954f244ed94f658bf00f66e3 Mon Sep 17 00:00:00 2001 From: Still Hsu Date: Thu, 17 Dec 2020 13:15:19 +0800 Subject: [PATCH 62/76] Temporarily disable StyleCops until all the fixes are impl'd --- StyleAnalyzer.targets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/StyleAnalyzer.targets b/StyleAnalyzer.targets index bbb90b800..0794cfacb 100644 --- a/StyleAnalyzer.targets +++ b/StyleAnalyzer.targets @@ -1,9 +1,9 @@ - + From dd2e524ff926f88fd1f2f69ef238f1b98e83248b Mon Sep 17 00:00:00 2001 From: Fyers Date: Sat, 19 Dec 2020 15:39:09 +0100 Subject: [PATCH 63/76] fix: Invite and InviteMetadata properties (#1639) * fixes #1495 * keep obsolete properties and return types for compatibility * missing properties for SocketInvite * Restore xml docs and change obsolete message Co-authored-by: Paulo --- .../Entities/Invites/IInvite.cs | 21 +++++++++++++++++++ .../Entities/Invites/IInviteMetadata.cs | 16 +++++--------- src/Discord.Net.Rest/API/Common/Invite.cs | 6 ++++++ .../API/Common/InviteMetadata.cs | 12 ++++------- .../Entities/Invites/RestInvite.cs | 9 ++++++++ .../Entities/Invites/RestInviteMetadata.cs | 20 ++++++------------ .../Entities/Invites/SocketInvite.cs | 5 ++++- 7 files changed, 55 insertions(+), 34 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Invites/IInvite.cs b/src/Discord.Net.Core/Entities/Invites/IInvite.cs index 993f1f047..47ffffacb 100644 --- a/src/Discord.Net.Core/Entities/Invites/IInvite.cs +++ b/src/Discord.Net.Core/Entities/Invites/IInvite.cs @@ -20,6 +20,13 @@ namespace Discord /// string Url { get; } + /// + /// Gets the user that created this invite. + /// + /// + /// A user that created this invite. + /// + IUser Inviter { get; } /// /// Gets the channel this invite is linked to. /// @@ -83,5 +90,19 @@ namespace Discord /// invite points to; null if one cannot be obtained. /// int? MemberCount { get; } + /// + /// Gets the user this invite is linked to via . + /// + /// + /// A user that is linked to this invite. + /// + IUser TargetUser { get; } + /// + /// Gets the type of the linked for this invite. + /// + /// + /// The type of the linked user that is linked to this invite. + /// + TargetUserType TargetUserType { get; } } } diff --git a/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs b/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs index 471dc377f..c64b3205b 100644 --- a/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs +++ b/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs @@ -8,28 +8,22 @@ namespace Discord public interface IInviteMetadata : IInvite { /// - /// Gets the user that created this invite. + /// Gets a value that indicates whether the invite is a temporary one. /// /// - /// A user that created this invite. + /// true if users accepting this invite will be removed from the guild when they log off; otherwise + /// false. /// - IUser Inviter { get; } + bool IsTemporary { get; } /// /// Gets a value that indicates whether the invite has been revoked. /// /// /// true if this invite was revoked; otherwise false. /// + [Obsolete("This property doesn't exist anymore and shouldn't be used.")] bool IsRevoked { get; } /// - /// Gets a value that indicates whether the invite is a temporary one. - /// - /// - /// true if users accepting this invite will be removed from the guild when they log off; otherwise - /// false. - /// - bool IsTemporary { get; } - /// /// Gets the time (in seconds) until the invite expires. /// /// diff --git a/src/Discord.Net.Rest/API/Common/Invite.cs b/src/Discord.Net.Rest/API/Common/Invite.cs index 649bc37ec..aba267f34 100644 --- a/src/Discord.Net.Rest/API/Common/Invite.cs +++ b/src/Discord.Net.Rest/API/Common/Invite.cs @@ -11,9 +11,15 @@ namespace Discord.API public Optional Guild { get; set; } [JsonProperty("channel")] public InviteChannel Channel { get; set; } + [JsonProperty("inviter")] + public Optional Inviter { get; set; } [JsonProperty("approximate_presence_count")] public Optional PresenceCount { get; set; } [JsonProperty("approximate_member_count")] public Optional MemberCount { get; set; } + [JsonProperty("target_user")] + public Optional TargetUser { get; set; } + [JsonProperty("target_user_type")] + public Optional TargetUserType { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Common/InviteMetadata.cs b/src/Discord.Net.Rest/API/Common/InviteMetadata.cs index ca019b79b..f818de699 100644 --- a/src/Discord.Net.Rest/API/Common/InviteMetadata.cs +++ b/src/Discord.Net.Rest/API/Common/InviteMetadata.cs @@ -6,19 +6,15 @@ namespace Discord.API { internal class InviteMetadata : Invite { - [JsonProperty("inviter")] - public User Inviter { get; set; } [JsonProperty("uses")] - public Optional Uses { get; set; } + public int Uses { get; set; } [JsonProperty("max_uses")] - public Optional MaxUses { get; set; } + public int MaxUses { get; set; } [JsonProperty("max_age")] - public Optional MaxAge { get; set; } + public int MaxAge { get; set; } [JsonProperty("temporary")] public bool Temporary { get; set; } [JsonProperty("created_at")] - public Optional CreatedAt { get; set; } - [JsonProperty("revoked")] - public bool Revoked { get; set; } + public DateTimeOffset CreatedAt { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Invites/RestInvite.cs b/src/Discord.Net.Rest/Entities/Invites/RestInvite.cs index 153eb6c41..95b454c20 100644 --- a/src/Discord.Net.Rest/Entities/Invites/RestInvite.cs +++ b/src/Discord.Net.Rest/Entities/Invites/RestInvite.cs @@ -21,6 +21,12 @@ namespace Discord.Rest public ulong ChannelId { get; private set; } /// public ulong? GuildId { get; private set; } + /// + public IUser Inviter { get; private set; } + /// + public IUser TargetUser { get; private set; } + /// + public TargetUserType TargetUserType { get; private set; } internal IChannel Channel { get; } internal IGuild Guild { get; } @@ -50,6 +56,9 @@ namespace Discord.Rest MemberCount = model.MemberCount.IsSpecified ? model.MemberCount.Value : null; PresenceCount = model.PresenceCount.IsSpecified ? model.PresenceCount.Value : null; ChannelType = (ChannelType)model.Channel.Type; + Inviter = model.Inviter.IsSpecified ? RestUser.Create(Discord, model.Inviter.Value) : null; + TargetUser = model.TargetUser.IsSpecified ? RestUser.Create(Discord, model.TargetUser.Value) : null; + TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : TargetUserType.Undefined; } /// diff --git a/src/Discord.Net.Rest/Entities/Invites/RestInviteMetadata.cs b/src/Discord.Net.Rest/Entities/Invites/RestInviteMetadata.cs index 55acd5f45..07ee5851c 100644 --- a/src/Discord.Net.Rest/Entities/Invites/RestInviteMetadata.cs +++ b/src/Discord.Net.Rest/Entities/Invites/RestInviteMetadata.cs @@ -6,9 +6,10 @@ namespace Discord.Rest /// Represents additional information regarding the REST-based invite object. public class RestInviteMetadata : RestInvite, IInviteMetadata { - private long? _createdAtTicks; + private long _createdAtTicks; /// + [Obsolete("This property doesn't exist anymore and shouldn't be used.")] public bool IsRevoked { get; private set; } /// public bool IsTemporary { get; private set; } @@ -18,10 +19,6 @@ namespace Discord.Rest public int? MaxUses { get; private set; } /// public int? Uses { get; private set; } - /// - /// Gets the user that created this invite. - /// - public RestUser Inviter { get; private set; } /// public DateTimeOffset? CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); @@ -39,16 +36,11 @@ namespace Discord.Rest internal void Update(Model model) { base.Update(model); - Inviter = model.Inviter != null ? RestUser.Create(Discord, model.Inviter) : null; - IsRevoked = model.Revoked; IsTemporary = model.Temporary; - MaxAge = model.MaxAge.IsSpecified ? model.MaxAge.Value : (int?)null; - MaxUses = model.MaxUses.IsSpecified ? model.MaxUses.Value : (int?)null; - Uses = model.Uses.IsSpecified ? model.Uses.Value : (int?)null; - _createdAtTicks = model.CreatedAt.IsSpecified ? model.CreatedAt.Value.UtcTicks : (long?)null; + MaxAge = model.MaxAge; + MaxUses = model.MaxUses; + Uses = model.Uses; + _createdAtTicks = model.CreatedAt.UtcTicks; } - - /// - IUser IInviteMetadata.Inviter => Inviter; } } diff --git a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs index 902f13935..5dc53a833 100644 --- a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs +++ b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs @@ -49,6 +49,7 @@ namespace Discord.WebSocket /// int? IInvite.MemberCount => throw new NotImplementedException(); /// + [Obsolete("This property doesn't exist anymore and shouldn't be used.")] bool IInviteMetadata.IsRevoked => throw new NotImplementedException(); /// public bool IsTemporary { get; private set; } @@ -138,6 +139,8 @@ namespace Discord.WebSocket /// IChannel IInvite.Channel => Channel; /// - IUser IInviteMetadata.Inviter => Inviter; + IUser IInvite.Inviter => Inviter; + /// + IUser IInvite.TargetUser => TargetUser; } } From accd3510dfeb64623491580ae2c47fbc815c7da2 Mon Sep 17 00:00:00 2001 From: Still Hsu Date: Sun, 20 Dec 2020 18:46:58 +0900 Subject: [PATCH 64/76] docs: Add alternative documentation link --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ace4f22e..34a633f72 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,12 @@ An unofficial .NET API Wrapper for the Discord client (https://discord.com). -Check out the [documentation](https://discord.foxbot.me/) or join the [Discord API Chat](https://discord.gg/jkrBmQR). +## Documentation + +- [Stable](https://discord.foxbot.me/) + - Hosted by @foxbot +- [Nightly](https://docs.stillu.cc/) + - [Latest CI repo](https://github.com/discord-net/docs-static) ## Installation ### Stable (NuGet) From a4d32d366d1526562ed3cf074e412161ef5ebe03 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 20 Dec 2020 07:09:44 -0300 Subject: [PATCH 65/76] fix: IMessage.Embeds docs remarks --- src/Discord.Net.Core/Entities/Messages/IMessage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index 35458d87d..1f3f5b945 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -92,10 +92,10 @@ namespace Discord /// Gets all embeds included in this message. /// /// - /// /// This property gets a read-only collection of embeds associated with this message. Depending on the /// message, a sent message may contain one or more embeds. This is usually true when multiple link previews /// are generated; however, only one can be featured. + /// /// /// A read-only collection of embed objects. /// From 4a7f8fec937f296bfdbdf60d4ed924e6897f9a75 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 20 Dec 2020 07:37:32 -0300 Subject: [PATCH 66/76] fix: Move and fix internal AllowedMentions object (#1727) --- .../{Entities/Messages => API/Common}/AllowedMentions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/Discord.Net.Rest/{Entities/Messages => API/Common}/AllowedMentions.cs (92%) diff --git a/src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs b/src/Discord.Net.Rest/API/Common/AllowedMentions.cs similarity index 92% rename from src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs rename to src/Discord.Net.Rest/API/Common/AllowedMentions.cs index 8b8870be2..7737a464f 100644 --- a/src/Discord.Net.Rest/Entities/Messages/AllowedMentions.cs +++ b/src/Discord.Net.Rest/API/Common/AllowedMentions.cs @@ -2,7 +2,7 @@ using Newtonsoft.Json; namespace Discord.API { - public class AllowedMentions + internal class AllowedMentions { [JsonProperty("parse")] public Optional Parse { get; set; } From 5934c7949a03d492dfc85c94c2c4fc920aaba670 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 23 Dec 2020 12:46:12 -0300 Subject: [PATCH 67/76] misc: VoiceRegions and related changes (#1720) --- src/Discord.Net.WebSocket/BaseSocketClient.cs | 21 +++++++ .../DiscordShardedClient.cs | 14 +++++ .../DiscordSocketClient.cs | 55 +++++++++++++------ 3 files changed, 73 insertions(+), 17 deletions(-) diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.cs b/src/Discord.Net.WebSocket/BaseSocketClient.cs index 548bb75bf..425889613 100644 --- a/src/Discord.Net.WebSocket/BaseSocketClient.cs +++ b/src/Discord.Net.WebSocket/BaseSocketClient.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; @@ -75,6 +76,7 @@ namespace Discord.WebSocket /// /// A read-only collection of voice regions that the user has access to. /// + [Obsolete("This property is obsolete, use the GetVoiceRegionsAsync method instead.")] public abstract IReadOnlyCollection VoiceRegions { get; } internal BaseSocketClient(DiscordSocketConfig config, DiscordRestApiClient client) @@ -169,7 +171,26 @@ namespace Discord.WebSocket /// A REST-based voice region associated with the identifier; null if the voice region is not /// found. /// + [Obsolete("This method is obsolete, use GetVoiceRegionAsync instead.")] public abstract RestVoiceRegion GetVoiceRegion(string id); + /// + /// Gets all voice regions. + /// + /// The options to be used when sending the request. + /// + /// A task that contains a read-only collection of REST-based voice regions. + /// + public abstract ValueTask> GetVoiceRegionsAsync(RequestOptions options = null); + /// + /// Gets a voice region. + /// + /// The identifier of the voice region (e.g. eu-central ). + /// The options to be used when sending the request. + /// + /// A task that contains a REST-based voice region associated with the identifier; null if the + /// voice region is not found. + /// + public abstract ValueTask GetVoiceRegionAsync(string id, RequestOptions options = null); /// public abstract Task StartAsync(); /// diff --git a/src/Discord.Net.WebSocket/DiscordShardedClient.cs b/src/Discord.Net.WebSocket/DiscordShardedClient.cs index a2c89d4e5..4c94b14e8 100644 --- a/src/Discord.Net.WebSocket/DiscordShardedClient.cs +++ b/src/Discord.Net.WebSocket/DiscordShardedClient.cs @@ -37,6 +37,7 @@ namespace Discord.WebSocket public override IReadOnlyCollection PrivateChannels => GetPrivateChannels().ToReadOnlyCollection(GetPrivateChannelCount); public IReadOnlyCollection Shards => _shards; /// + [Obsolete("This property is obsolete, use the GetVoiceRegionsAsync method instead.")] public override IReadOnlyCollection VoiceRegions => _shards[0].VoiceRegions; /// @@ -264,9 +265,22 @@ namespace Discord.WebSocket } /// + [Obsolete("This method is obsolete, use GetVoiceRegionAsync instead.")] public override RestVoiceRegion GetVoiceRegion(string id) => _shards[0].GetVoiceRegion(id); + /// + public override async ValueTask> GetVoiceRegionsAsync(RequestOptions options = null) + { + return await _shards[0].GetVoiceRegionsAsync().ConfigureAwait(false); + } + + /// + public override async ValueTask GetVoiceRegionAsync(string id, RequestOptions options = null) + { + return await _shards[0].GetVoiceRegionAsync(id, options).ConfigureAwait(false); + } + /// /// is public override async Task DownloadUsersAsync(IEnumerable guilds) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 0a2123ef2..d4c96ab26 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -110,7 +110,8 @@ namespace Discord.WebSocket public IReadOnlyCollection GroupChannels => State.PrivateChannels.OfType().ToImmutableArray(); /// - public override IReadOnlyCollection VoiceRegions => _voiceRegions.ToReadOnlyCollection(); + [Obsolete("This property is obsolete, use the GetVoiceRegionsAsync method instead.")] + public override IReadOnlyCollection VoiceRegions => GetVoiceRegionsAsync().GetAwaiter().GetResult(); /// /// Initializes a new REST/WebSocket-based Discord client. @@ -178,7 +179,6 @@ namespace Discord.WebSocket return Task.Delay(0); }; - _voiceRegions = ImmutableDictionary.Create(); _largeGuilds = new ConcurrentQueue(); } private static API.DiscordSocketApiClient CreateApiClient(DiscordSocketConfig config) @@ -204,13 +204,6 @@ namespace Discord.WebSocket /// internal override async Task OnLoginAsync(TokenType tokenType, string token) { - if (_parentClient == null) - { - var voiceRegions = await ApiClient.GetVoiceRegionsAsync(new RequestOptions { IgnoreState = true, RetryMode = RetryMode.AlwaysRetry }).ConfigureAwait(false); - _voiceRegions = voiceRegions.Select(x => RestVoiceRegion.Create(this, x)).ToImmutableDictionary(x => x.Id); - } - else - _voiceRegions = _parentClient._voiceRegions; await Rest.OnLoginAsync(tokenType, token); } /// @@ -218,7 +211,7 @@ namespace Discord.WebSocket { await StopAsync().ConfigureAwait(false); _applicationInfo = null; - _voiceRegions = ImmutableDictionary.Create(); + _voiceRegions = null; await Rest.OnLogoutAsync(); } @@ -350,11 +343,39 @@ namespace Discord.WebSocket => State.RemoveUser(id); /// + [Obsolete("This method is obsolete, use GetVoiceRegionAsync instead.")] public override RestVoiceRegion GetVoiceRegion(string id) + => GetVoiceRegionAsync(id).GetAwaiter().GetResult(); + + /// + public override async ValueTask> GetVoiceRegionsAsync(RequestOptions options = null) { - if (_voiceRegions.TryGetValue(id, out RestVoiceRegion region)) - return region; - return null; + if (_parentClient == null) + { + if (_voiceRegions == null) + { + options = RequestOptions.CreateOrClone(options); + options.IgnoreState = true; + var voiceRegions = await ApiClient.GetVoiceRegionsAsync(options).ConfigureAwait(false); + _voiceRegions = voiceRegions.Select(x => RestVoiceRegion.Create(this, x)).ToImmutableDictionary(x => x.Id); + } + return _voiceRegions.ToReadOnlyCollection(); + } + return await _parentClient.GetVoiceRegionsAsync().ConfigureAwait(false); + } + + /// + public override async ValueTask GetVoiceRegionAsync(string id, RequestOptions options = null) + { + if (_parentClient == null) + { + if (_voiceRegions == null) + await GetVoiceRegionsAsync().ConfigureAwait(false); + if (_voiceRegions.TryGetValue(id, out RestVoiceRegion region)) + return region; + return null; + } + return await _parentClient.GetVoiceRegionAsync(id, options).ConfigureAwait(false); } /// @@ -2120,11 +2141,11 @@ namespace Discord.WebSocket => Task.FromResult(GetUser(username, discriminator)); /// - Task> IDiscordClient.GetVoiceRegionsAsync(RequestOptions options) - => Task.FromResult>(VoiceRegions); + async Task> IDiscordClient.GetVoiceRegionsAsync(RequestOptions options) + => await GetVoiceRegionsAsync(options).ConfigureAwait(false); /// - Task IDiscordClient.GetVoiceRegionAsync(string id, RequestOptions options) - => Task.FromResult(GetVoiceRegion(id)); + async Task IDiscordClient.GetVoiceRegionAsync(string id, RequestOptions options) + => await GetVoiceRegionAsync(id, options).ConfigureAwait(false); /// async Task IDiscordClient.StartAsync() From 6a62c4770c363710e555c510619986f30b683324 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 23 Dec 2020 12:46:27 -0300 Subject: [PATCH 68/76] feature: Add role tags (#1721) --- src/Discord.Net.Core/Entities/Roles/IRole.cs | 7 ++++ .../Entities/Roles/RoleTags.cs | 40 +++++++++++++++++++ src/Discord.Net.Rest/API/Common/Role.cs | 4 +- src/Discord.Net.Rest/API/Common/RoleTags.cs | 15 +++++++ .../Entities/Roles/RestRole.cs | 4 ++ .../Extensions/EntityExtensions.cs | 7 ++++ .../Entities/Roles/SocketRole.cs | 4 ++ 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/Discord.Net.Core/Entities/Roles/RoleTags.cs create mode 100644 src/Discord.Net.Rest/API/Common/RoleTags.cs diff --git a/src/Discord.Net.Core/Entities/Roles/IRole.cs b/src/Discord.Net.Core/Entities/Roles/IRole.cs index 66556fc2c..c02322be9 100644 --- a/src/Discord.Net.Core/Entities/Roles/IRole.cs +++ b/src/Discord.Net.Core/Entities/Roles/IRole.cs @@ -65,6 +65,13 @@ namespace Discord /// An representing the position of the role in the role list of the guild. /// int Position { get; } + /// + /// Gets the tags related to this role. + /// + /// + /// A object containing all tags related to this role. + /// + RoleTags Tags { get; } /// /// Modifies this role. diff --git a/src/Discord.Net.Core/Entities/Roles/RoleTags.cs b/src/Discord.Net.Core/Entities/Roles/RoleTags.cs new file mode 100644 index 000000000..d0cbd3580 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Roles/RoleTags.cs @@ -0,0 +1,40 @@ +namespace Discord +{ + /// + /// Provides tags related to a discord role. + /// + public class RoleTags + { + /// + /// Gets the identifier of the bot that this role belongs to, if it does. + /// + /// + /// A if this role belongs to a bot; otherwise + /// . + /// + public ulong? BotId { get; } + /// + /// Gets the identifier of the integration that this role belongs to, if it does. + /// + /// + /// A if this role belongs to an integration; otherwise + /// . + /// + public ulong? IntegrationId { get; } + /// + /// Gets if this role is the guild's premium subscriber (booster) role. + /// + /// + /// if this role is the guild's premium subscriber role; + /// otherwise . + /// + public bool IsPremiumSubscriberRole { get; } + + internal RoleTags(ulong? botId, ulong? integrationId, bool isPremiumSubscriber) + { + BotId = botId; + IntegrationId = integrationId; + IsPremiumSubscriberRole = isPremiumSubscriber; + } + } +} diff --git a/src/Discord.Net.Rest/API/Common/Role.cs b/src/Discord.Net.Rest/API/Common/Role.cs index 856a8695f..190ae25c0 100644 --- a/src/Discord.Net.Rest/API/Common/Role.cs +++ b/src/Discord.Net.Rest/API/Common/Role.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API @@ -21,5 +21,7 @@ namespace Discord.API public ulong Permissions { get; set; } [JsonProperty("managed")] public bool Managed { get; set; } + [JsonProperty("tags")] + public Optional Tags { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Common/RoleTags.cs b/src/Discord.Net.Rest/API/Common/RoleTags.cs new file mode 100644 index 000000000..6446f2037 --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/RoleTags.cs @@ -0,0 +1,15 @@ +#pragma warning disable CS1591 +using Newtonsoft.Json; + +namespace Discord.API +{ + internal class RoleTags + { + [JsonProperty("bot_id")] + public Optional BotId { get; set; } + [JsonProperty("integration_id")] + public Optional IntegrationId { get; set; } + [JsonProperty("premium_subscriber")] + public Optional IsPremiumSubscriber { get; set; } + } +} diff --git a/src/Discord.Net.Rest/Entities/Roles/RestRole.cs b/src/Discord.Net.Rest/Entities/Roles/RestRole.cs index 7c1a3aaa2..aa33ae7e5 100644 --- a/src/Discord.Net.Rest/Entities/Roles/RestRole.cs +++ b/src/Discord.Net.Rest/Entities/Roles/RestRole.cs @@ -26,6 +26,8 @@ namespace Discord.Rest public GuildPermissions Permissions { get; private set; } /// public int Position { get; private set; } + /// + public RoleTags Tags { get; private set; } /// public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); @@ -56,6 +58,8 @@ namespace Discord.Rest Position = model.Position; Color = new Color(model.Color); Permissions = new GuildPermissions(model.Permissions); + if (model.Tags.IsSpecified) + Tags = model.Tags.Value.ToEntity(); } /// diff --git a/src/Discord.Net.Rest/Extensions/EntityExtensions.cs b/src/Discord.Net.Rest/Extensions/EntityExtensions.cs index 8e1b9c6d8..f8676c783 100644 --- a/src/Discord.Net.Rest/Extensions/EntityExtensions.cs +++ b/src/Discord.Net.Rest/Extensions/EntityExtensions.cs @@ -34,6 +34,13 @@ namespace Discord.Rest model.Thumbnail.IsSpecified ? model.Thumbnail.Value.ToEntity() : (EmbedThumbnail?)null, model.Fields.IsSpecified ? model.Fields.Value.Select(x => x.ToEntity()).ToImmutableArray() : ImmutableArray.Create()); } + public static RoleTags ToEntity(this API.RoleTags model) + { + return new RoleTags( + model.BotId.IsSpecified ? model.BotId.Value : null, + model.IntegrationId.IsSpecified ? model.IntegrationId.Value : null, + model.IsPremiumSubscriber.IsSpecified ? true : false); + } public static API.Embed ToModel(this Embed entity) { if (entity == null) return null; diff --git a/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs b/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs index b5e26ad78..e6aac2c04 100644 --- a/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs +++ b/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs @@ -36,6 +36,8 @@ namespace Discord.WebSocket public GuildPermissions Permissions { get; private set; } /// public int Position { get; private set; } + /// + public RoleTags Tags { get; private set; } /// public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); @@ -71,6 +73,8 @@ namespace Discord.WebSocket Position = model.Position; Color = new Color(model.Color); Permissions = new GuildPermissions(model.Permissions); + if (model.Tags.IsSpecified) + Tags = model.Tags.Value.ToEntity(); } /// From c683b2901d5768bb402993765c9c329aa26537eb Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 23 Dec 2020 12:46:42 -0300 Subject: [PATCH 69/76] feature: Add user public flags (#1722) --- src/Discord.Net.Core/Entities/Users/IUser.cs | 10 ++++ .../Entities/Users/UserProperties.cs | 48 +++++++++++++++---- src/Discord.Net.Rest/API/Common/User.cs | 2 + .../Entities/Users/RestUser.cs | 4 ++ .../Entities/Users/SocketUser.cs | 7 +++ 5 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Users/IUser.cs b/src/Discord.Net.Core/Entities/Users/IUser.cs index c36fb2326..e6008aab6 100644 --- a/src/Discord.Net.Core/Entities/Users/IUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IUser.cs @@ -75,6 +75,16 @@ namespace Discord /// Gets the username for this user. /// string Username { get; } + /// + /// Gets the public flags that are applied to this user's account. + /// + /// + /// This value is determined by bitwise OR-ing values together. + /// + /// + /// The value of public flags for this user. + /// + UserProperties? PublicFlags { get; } /// /// Gets the direct message channel of this user, or create one if it does not already exist. diff --git a/src/Discord.Net.Core/Entities/Users/UserProperties.cs b/src/Discord.Net.Core/Entities/Users/UserProperties.cs index 4f7272daa..b6deb744b 100644 --- a/src/Discord.Net.Core/Entities/Users/UserProperties.cs +++ b/src/Discord.Net.Core/Entities/Users/UserProperties.cs @@ -10,32 +10,62 @@ namespace Discord /// None = 0, /// - /// Flag given to Discord staff. + /// Flag given to users who are a Discord employee. /// - Staff = 0b1, + Staff = 1 << 0, /// - /// Flag given to Discord partners. + /// Flag given to users who are owners of a partnered Discord server. /// - Partner = 0b10, + Partner = 1 << 1, + /// + /// Flag given to users in HypeSquad events. + /// + HypeSquadEvents = 1 << 2, /// /// Flag given to users who have participated in the bug report program. + /// This flag is obsolete, use instead. + /// + [Obsolete("Use BugHunterLevel1 instead.")] + BugHunter = 1 << 3, + /// + /// Flag given to users who have participated in the bug report program and are level 1. /// - BugHunter = 0b1000, + BugHunterLevel1 = 1 << 3, /// /// Flag given to users who are in the HypeSquad House of Bravery. /// - HypeSquadBravery = 0b100_0000, + HypeSquadBravery = 1 << 6, /// /// Flag given to users who are in the HypeSquad House of Brilliance. /// - HypeSquadBrilliance = 0b1000_0000, + HypeSquadBrilliance = 1 << 7, /// /// Flag given to users who are in the HypeSquad House of Balance. /// - HypeSquadBalance = 0b1_0000_0000, + HypeSquadBalance = 1 << 8, /// /// Flag given to users who subscribed to Nitro before games were added. /// - EarlySupporter = 0b10_0000_0000, + EarlySupporter = 1 << 9, + /// + /// Flag given to users who are part of a team. + /// + TeamUser = 1 << 10, + /// + /// Flag given to users who represent Discord (System). + /// + System = 1 << 12, + /// + /// Flag given to users who have participated in the bug report program and are level 2. + /// + BugHunterLevel2 = 1 << 14, + /// + /// Flag given to users who are verified bots. + /// + VerifiedBot = 1 << 16, + /// + /// Flag given to users that developed bots and early verified their accounts. + /// + EarlyVerifiedBotDeveloper = 1 << 17, } } diff --git a/src/Discord.Net.Rest/API/Common/User.cs b/src/Discord.Net.Rest/API/Common/User.cs index 2eff3753d..d1f436afb 100644 --- a/src/Discord.Net.Rest/API/Common/User.cs +++ b/src/Discord.Net.Rest/API/Common/User.cs @@ -29,5 +29,7 @@ namespace Discord.API public Optional PremiumType { get; set; } [JsonProperty("locale")] public Optional Locale { get; set; } + [JsonProperty("public_flags")] + public Optional PublicFlags { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs index f5becd3ff..131a4ec73 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs @@ -21,6 +21,8 @@ namespace Discord.Rest public ushort DiscriminatorValue { get; private set; } /// public string AvatarId { get; private set; } + /// + public UserProperties? PublicFlags { get; private set; } /// public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); @@ -65,6 +67,8 @@ namespace Discord.Rest IsBot = model.Bot.Value; if (model.Username.IsSpecified) Username = model.Username.Value; + if (model.PublicFlags.IsSpecified) + PublicFlags = model.PublicFlags.Value; } /// diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs index 7d3c2d23b..4e6d4b3f8 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs @@ -26,6 +26,8 @@ namespace Discord.WebSocket public abstract string AvatarId { get; internal set; } /// public abstract bool IsWebhook { get; } + /// + public UserProperties? PublicFlags { get; private set; } internal abstract SocketGlobalUser GlobalUser { get; } internal abstract SocketPresence Presence { get; set; } @@ -83,6 +85,11 @@ namespace Discord.WebSocket Username = model.Username.Value; hasChanges = true; } + if (model.PublicFlags.IsSpecified && model.PublicFlags.Value != PublicFlags) + { + PublicFlags = model.PublicFlags.Value; + hasChanges = true; + } return hasChanges; } From 225550dc5ac64cec1a38e5cfc1699bd0db0813ee Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 23 Dec 2020 12:47:20 -0300 Subject: [PATCH 70/76] feature: Add MessageFlags and AllowedMentions to message modify (#1724) * feature: Add MessageFlags and AllowedMentions to Modify * Change exception message --- .../Entities/Messages/IMessage.cs | 11 ++++++ .../Entities/Messages/MessageFlags.cs | 36 +++++++++++++++++++ .../Entities/Messages/MessageProperties.cs | 12 +++++++ .../API/Common/MessageFlags.cs | 10 ------ .../API/Rest/ModifyMessageParams.cs | 6 +++- .../Entities/Messages/MessageHelper.cs | 33 ++++++++++++++--- .../Entities/Messages/RestMessage.cs | 5 +++ .../Entities/Messages/RestUserMessage.cs | 8 ++--- .../Entities/Messages/SocketMessage.cs | 6 ++++ .../Entities/Messages/SocketUserMessage.cs | 8 ++--- 10 files changed, 108 insertions(+), 27 deletions(-) create mode 100644 src/Discord.Net.Core/Entities/Messages/MessageFlags.cs delete mode 100644 src/Discord.Net.Rest/API/Common/MessageFlags.cs diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index 1f3f5b945..80b1ffa68 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -164,6 +164,17 @@ namespace Discord /// IReadOnlyDictionary Reactions { get; } + /// + /// Gets the flags related to this message. + /// + /// + /// This value is determined by bitwise OR-ing values together. + /// + /// + /// A message's flags, if any is associated. + /// + MessageFlags? Flags { get; } + /// /// Adds a reaction to this message. /// diff --git a/src/Discord.Net.Core/Entities/Messages/MessageFlags.cs b/src/Discord.Net.Core/Entities/Messages/MessageFlags.cs new file mode 100644 index 000000000..52d0f0e9e --- /dev/null +++ b/src/Discord.Net.Core/Entities/Messages/MessageFlags.cs @@ -0,0 +1,36 @@ +using System; + +namespace Discord +{ + [Flags] + public enum MessageFlags + { + /// + /// Default value for flags, when none are given to a message. + /// + None = 0, + /// + /// Flag given to messages that have been published to subscribed + /// channels (via Channel Following). + /// + Crossposted = 1 << 0, + /// + /// Flag given to messages that originated from a message in another + /// channel (via Channel Following). + /// + IsCrosspost = 1 << 1, + /// + /// Flag given to messages that do not display any embeds. + /// + SuppressEmbeds = 1 << 2, + /// + /// Flag given to messages that the source message for this crosspost + /// has been deleted (via Channel Following). + /// + SourceMessageDeleted = 1 << 3, + /// + /// Flag given to messages that came from the urgent message system. + /// + Urgent = 1 << 4, + } +} diff --git a/src/Discord.Net.Core/Entities/Messages/MessageProperties.cs b/src/Discord.Net.Core/Entities/Messages/MessageProperties.cs index b632d6a18..9504e04cb 100644 --- a/src/Discord.Net.Core/Entities/Messages/MessageProperties.cs +++ b/src/Discord.Net.Core/Entities/Messages/MessageProperties.cs @@ -21,5 +21,17 @@ namespace Discord /// Gets or sets the embed the message should display. /// public Optional Embed { get; set; } + /// + /// Gets or sets the flags of the message. + /// + /// + /// Only can be set/unset and you need to be + /// the author of the message. + /// + public Optional Flags { get; set; } + /// + /// Gets or sets the allowed mentions of the message. + /// + public Optional AllowedMentions { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Common/MessageFlags.cs b/src/Discord.Net.Rest/API/Common/MessageFlags.cs deleted file mode 100644 index ebe4e80ca..000000000 --- a/src/Discord.Net.Rest/API/Common/MessageFlags.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace Discord.API -{ - [Flags] - internal enum MessageFlags : byte // probably safe to constrain this to 8 values, if not, it's internal so who cares - { - Suppressed = 0x04, - } -} diff --git a/src/Discord.Net.Rest/API/Rest/ModifyMessageParams.cs b/src/Discord.Net.Rest/API/Rest/ModifyMessageParams.cs index fdff4de15..3752df3a2 100644 --- a/src/Discord.Net.Rest/API/Rest/ModifyMessageParams.cs +++ b/src/Discord.Net.Rest/API/Rest/ModifyMessageParams.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS1591 +#pragma warning disable CS1591 using Newtonsoft.Json; namespace Discord.API.Rest @@ -10,5 +10,9 @@ namespace Discord.API.Rest public Optional Content { get; set; } [JsonProperty("embed")] public Optional Embed { get; set; } + [JsonProperty("flags")] + public Optional Flags { get; set; } + [JsonProperty("allowed_mentions")] + public Optional AllowedMentions { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs index b86a5dbf3..e22ae71cd 100644 --- a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs +++ b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs @@ -27,21 +27,46 @@ namespace Discord.Rest public static async Task ModifyAsync(IMessage msg, BaseDiscordClient client, Action func, RequestOptions options) { - if (msg.Author.Id != client.CurrentUser.Id) - throw new InvalidOperationException("Only the author of a message may modify the message."); - var args = new MessageProperties(); func(args); + if (msg.Author.Id != client.CurrentUser.Id && (args.Content.IsSpecified || args.Embed.IsSpecified || args.AllowedMentions.IsSpecified)) + throw new InvalidOperationException("Only the author of a message may modify the message content, embed, or allowed mentions."); + bool hasText = args.Content.IsSpecified ? !string.IsNullOrEmpty(args.Content.Value) : !string.IsNullOrEmpty(msg.Content); bool hasEmbed = args.Embed.IsSpecified ? args.Embed.Value != null : msg.Embeds.Any(); if (!hasText && !hasEmbed) Preconditions.NotNullOrEmpty(args.Content.IsSpecified ? args.Content.Value : string.Empty, nameof(args.Content)); + if (args.AllowedMentions.IsSpecified) + { + AllowedMentions allowedMentions = args.AllowedMentions.Value; + Preconditions.AtMost(allowedMentions?.RoleIds?.Count ?? 0, 100, nameof(allowedMentions.RoleIds), "A max of 100 role Ids are allowed."); + Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); + + // check that user flag and user Id list are exclusive, same with role flag and role Id list + if (allowedMentions != null && allowedMentions.AllowedTypes.HasValue) + { + if (allowedMentions.AllowedTypes.Value.HasFlag(AllowedMentionTypes.Users) && + allowedMentions.UserIds != null && allowedMentions.UserIds.Count > 0) + { + throw new ArgumentException("The Users flag is mutually exclusive with the list of User Ids.", nameof(allowedMentions)); + } + + if (allowedMentions.AllowedTypes.Value.HasFlag(AllowedMentionTypes.Roles) && + allowedMentions.RoleIds != null && allowedMentions.RoleIds.Count > 0) + { + throw new ArgumentException("The Roles flag is mutually exclusive with the list of Role Ids.", nameof(allowedMentions)); + } + } + } + var apiArgs = new API.Rest.ModifyMessageParams { Content = args.Content, - Embed = args.Embed.IsSpecified ? args.Embed.Value.ToModel() : Optional.Create() + Embed = args.Embed.IsSpecified ? args.Embed.Value.ToModel() : Optional.Create(), + Flags = args.Flags.IsSpecified ? args.Flags.Value : Optional.Create(), + AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value.ToModel() : Optional.Create(), }; return await client.ApiClient.ModifyMessageAsync(msg.Channel.Id, msg.Id, apiArgs, options).ConfigureAwait(false); } diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs index 0169c9b8b..b2a745980 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs @@ -67,6 +67,8 @@ namespace Discord.Rest public MessageApplication Application { get; private set; } /// public MessageReference Reference { get; private set; } + /// + public MessageFlags? Flags { get; private set; } internal RestMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source) : base(discord, id) @@ -124,6 +126,9 @@ namespace Discord.Rest }; } + if (model.Flags.IsSpecified) + Flags = model.Flags.Value; + if (model.Reactions.IsSpecified) { var value = model.Reactions.Value; diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs index 2c76a4253..cf025aea1 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs @@ -13,7 +13,7 @@ namespace Discord.Rest [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class RestUserMessage : RestMessage, IUserMessage { - private bool _isMentioningEveryone, _isTTS, _isPinned, _isSuppressed; + private bool _isMentioningEveryone, _isTTS, _isPinned; private long? _editedTimestampTicks; private IUserMessage _referencedMessage; private ImmutableArray _attachments = ImmutableArray.Create(); @@ -27,7 +27,7 @@ namespace Discord.Rest /// public override bool IsPinned => _isPinned; /// - public override bool IsSuppressed => _isSuppressed; + public override bool IsSuppressed => Flags.HasValue && Flags.Value.HasFlag(MessageFlags.SuppressEmbeds); /// public override DateTimeOffset? EditedTimestamp => DateTimeUtils.FromTicks(_editedTimestampTicks); /// @@ -70,10 +70,6 @@ namespace Discord.Rest _editedTimestampTicks = model.EditedTimestamp.Value?.UtcTicks; if (model.MentionEveryone.IsSpecified) _isMentioningEveryone = model.MentionEveryone.Value; - if (model.Flags.IsSpecified) - { - _isSuppressed = model.Flags.Value.HasFlag(API.MessageFlags.Suppressed); - } if (model.RoleMentions.IsSpecified) _roleMentionIds = model.RoleMentions.Value.ToImmutableArray(); diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs index 98fd4af07..2ca53cbb9 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs @@ -58,6 +58,9 @@ namespace Discord.WebSocket /// public MessageReference Reference { get; private set; } + /// + public MessageFlags? Flags { get; private set; } + /// /// Returns all attachments included in this message. /// @@ -156,6 +159,9 @@ namespace Discord.WebSocket MessageId = model.Reference.Value.MessageId }; } + + if (model.Flags.IsSpecified) + Flags = model.Flags.Value; } /// diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index bea0f45eb..859b1b80a 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -15,7 +15,7 @@ namespace Discord.WebSocket [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class SocketUserMessage : SocketMessage, IUserMessage { - private bool _isMentioningEveryone, _isTTS, _isPinned, _isSuppressed; + private bool _isMentioningEveryone, _isTTS, _isPinned; private long? _editedTimestampTicks; private IUserMessage _referencedMessage; private ImmutableArray _attachments = ImmutableArray.Create(); @@ -29,7 +29,7 @@ namespace Discord.WebSocket /// public override bool IsPinned => _isPinned; /// - public override bool IsSuppressed => _isSuppressed; + public override bool IsSuppressed => Flags.HasValue && Flags.Value.HasFlag(MessageFlags.SuppressEmbeds); /// public override DateTimeOffset? EditedTimestamp => DateTimeUtils.FromTicks(_editedTimestampTicks); /// @@ -74,10 +74,6 @@ namespace Discord.WebSocket _editedTimestampTicks = model.EditedTimestamp.Value?.UtcTicks; if (model.MentionEveryone.IsSpecified) _isMentioningEveryone = model.MentionEveryone.Value; - if (model.Flags.IsSpecified) - { - _isSuppressed = model.Flags.Value.HasFlag(API.MessageFlags.Suppressed); - } if (model.RoleMentions.IsSpecified) _roleMentions = model.RoleMentions.Value.Select(x => guild.GetRole(x)).ToImmutableArray(); From 8b25c9bbfb88818f0a3eda6ca04ba3c06a4fec43 Mon Sep 17 00:00:00 2001 From: quinchs <49576606+quinchs@users.noreply.github.com> Date: Wed, 23 Dec 2020 11:47:54 -0400 Subject: [PATCH 71/76] feature: Add GuildUser IsPending property (#1731) * Implemented Pending property * Implemented changes --- src/Discord.Net.Core/Entities/Users/IGuildUser.cs | 5 +++++ src/Discord.Net.Rest/API/Common/GuildMember.cs | 2 ++ src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs | 4 ++++ src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs | 2 ++ src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs | 4 ++++ .../Entities/Users/SocketWebhookUser.cs | 2 ++ 6 files changed, 19 insertions(+) diff --git a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs index 0e4004c46..582e9e7a7 100644 --- a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs @@ -68,6 +68,11 @@ namespace Discord /// IReadOnlyCollection RoleIds { get; } + /// + /// Whether the user has passed the guild's Membership Screening requirements. + /// + bool? IsPending { get; } + /// /// Gets the level permissions granted to this user to a given channel. /// diff --git a/src/Discord.Net.Rest/API/Common/GuildMember.cs b/src/Discord.Net.Rest/API/Common/GuildMember.cs index 940eb925a..fc2092d6c 100644 --- a/src/Discord.Net.Rest/API/Common/GuildMember.cs +++ b/src/Discord.Net.Rest/API/Common/GuildMember.cs @@ -18,6 +18,8 @@ namespace Discord.API public Optional Deaf { get; set; } [JsonProperty("mute")] public Optional Mute { get; set; } + [JsonProperty("pending")] + public Optional Pending { get; set; } [JsonProperty("premium_since")] public Optional PremiumSince { get; set; } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs index d6a8c2eda..4a6bc1025 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs @@ -29,6 +29,8 @@ namespace Discord.Rest public DateTimeOffset? PremiumSince => DateTimeUtils.FromTicks(_premiumSinceTicks); /// public ulong GuildId => Guild.Id; + /// + public bool? IsPending { get; private set; } /// /// Resolving permissions requires the parent guild to be downloaded. @@ -73,6 +75,8 @@ namespace Discord.Rest UpdateRoles(model.Roles.Value); if (model.PremiumSince.IsSpecified) _premiumSinceTicks = model.PremiumSince.Value?.UtcTicks; + if (model.Pending.IsSpecified) + IsPending = model.Pending.Value; } private void UpdateRoles(ulong[] roleIds) { diff --git a/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs b/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs index 8462cb8d4..a06916c9b 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs @@ -52,6 +52,8 @@ namespace Discord.Rest /// string IGuildUser.Nickname => null; /// + bool? IGuildUser.IsPending => null; + /// GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook; /// diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs index a506a5d7f..c0a681d9d 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs @@ -57,6 +57,8 @@ namespace Discord.WebSocket /// public bool IsStreaming => VoiceState?.IsStreaming ?? false; /// + public bool? IsPending { get; private set; } + /// public DateTimeOffset? JoinedAt => DateTimeUtils.FromTicks(_joinedAtTicks); /// /// Returns a collection of roles that the user possesses. @@ -142,6 +144,8 @@ namespace Discord.WebSocket UpdateRoles(model.Roles.Value); if (model.PremiumSince.IsSpecified) _premiumSinceTicks = model.PremiumSince.Value?.UtcTicks; + if (model.Pending.IsSpecified) + IsPending = model.Pending.Value; } internal void Update(ClientState state, PresenceModel model, bool updatePresence) { diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs index d400e1ae7..5103aa8b3 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs @@ -65,6 +65,8 @@ namespace Discord.WebSocket /// DateTimeOffset? IGuildUser.PremiumSince => null; /// + bool? IGuildUser.IsPending => null; + /// GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook; /// From 20957016653e2dba1a7a1007f2c684b7c02a6ee8 Mon Sep 17 00:00:00 2001 From: Paulo Date: Thu, 21 Jan 2021 18:08:46 -0300 Subject: [PATCH 72/76] fix: Missing MessageReference when sending files --- src/Discord.Net.Rest/API/Rest/UploadFileParams.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs b/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs index a7d19b4ef..dd442a6de 100644 --- a/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs +++ b/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs @@ -49,6 +49,8 @@ namespace Discord.API.Rest payload["allowed_mentions"] = AllowedMentions.Value; if (IsSpoiler) payload["hasSpoiler"] = IsSpoiler.ToString(); + if (MessageReference.IsSpecified) + payload["message_reference"] = MessageReference.Value; var json = new StringBuilder(); using (var text = new StringWriter(json)) From 6bb54577ab15c192cc678fb37150c1e313d0a81a Mon Sep 17 00:00:00 2001 From: Paulo Date: Thu, 28 Jan 2021 19:13:18 -0300 Subject: [PATCH 73/76] meta: 2.3.0 --- CHANGELOG.md | 91 ++++++++++++++++++++++++++++++ Discord.Net.targets | 2 +- src/Discord.Net/Discord.Net.nuspec | 32 +++++------ 3 files changed, 108 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 886754052..7f4041a7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,96 @@ # Changelog +## [2.3.0] - 2021-01-28 +### Added +- #1491 Add INVITE_CREATE and INVITE_DELETE events (1ab670b) +- #1520 Support reading multiple activities (421a0c1) +- #1521 Allow for inherited commands in modules (a51cdf6) +- #1526 Add Direction.Around to GetMessagesAsync (f2130f8) +- #1537 Implement gateway ratelimit (ec673e1) +- #1544 Add MESSAGE_REACTION_REMOVE_EMOJI and RemoveAllReactionsForEmoteAsync (a89f076) +- #1549 Add GetUsersAsync to SocketGuild (30b5a83) +- #1566 Support Gateway Intents (d5d10d3) +- #1573 Add missing properties to Guild and deprecate GuildEmbed (ec212b1) +- #1581 Add includeRoleIds to PruneUsersAsync (a80e5ff) +- #1588 Add GetStreams to AudioClient (1e012ac) +- #1596 Add missing channel properties (2d80037) +- #1604 Add missing application properties (including Teams) (10fcde0) +- #1619 Add "View Guild Insights" to GuildPermission (2592264) +- #1637 Added CultureInvariant RegexOption to WebhookUrlRegex (e3925a7) +- #1659 Add inline replies (e3850e1) +- #1688 Send presence on Identify payload (25d5d36) +- #1721 Add role tags (6a62c47) +- #1722 Add user public flags (c683b29) +- #1724 Add MessageFlags and AllowedMentions to message modify (225550d) +- #1731 Add GuildUser IsPending property (8b25c9b) +- #1690 Add max bitrate value to SocketGuild (aacfea0) + +### Fixed +- #1244 Missing AddReactions permission for DM channels. (e40ca4a) +- #1469 unsupported property causes an exception (468f826) +- #1525 AllowedMentions and AllowedMentionTypes (3325031) +- #1531 Add AllowedMentions to SendFileAsync (ab32607) +- #1532 GuildEmbed.ChannelId as nullable per API documentation (971d519) +- #1546 Different ratelimits for the same route (implement discord buckets) (2f6c017) +- #1548 Incomplete Ready, DownloadUsersAsync, and optimize AlwaysDownloadUsers (dc8c959) +- #1555 InvalidOperationException at MESSAGE_CREATE (bd4672a) +- #1557 Sending 2 requests instead of 1 to create a Guild role. (5430cc8) +- #1571 Not using the new domain name. (df8a0f7) +- #1578 Trim token before passing it to the authorization header (42ba372) +- #1580 Stop TaskCanceledException from bubbling up (b8fa464) +- #1599 Invite audit log without inviter (b95b95b) +- #1602 Add AllowedMentions to webhooks (bd4516b) +- #1603 Cancel reconnection when 4014 (f396cd9) +- #1608 Voice overwrites and CategoryId remarks (43c8fc0) +- #1614 Check error 404 and return null for GetBanAsync (ae9fff6) +- #1621 Parse mentions from message payload (366ca9a) +- #1622 Do not update overwrite cache locally (3860da0) +- #1623 Invoke UserUpdated from GuildMemberUpdated if needed (3085e88) +- #1624 Handle null PreferredLocale in rare cases (c1d04b4) +- #1639 Invite and InviteMetadata properties (dd2e524) +- #1642 Add missing permissions (4b389f3) +- #1647 handicap member downloading for verified bots (fa5ef5e) +- #1652 Update README.MD to reflect new discord domain (03b831e) +- #1667 Audio stream dispose (a2af985) +- #1671 Crosspost throwing InvalidOperationException (9134443) +- #1672 Team is nullable, not optional (be60d81) +- #1681 Emoji url encode (04389a4) +- #1683 SocketGuild.HasAllMembers is false if a user left a guild (47f571e) +- #1686 Revert PremiumSubscriptionCount type (97e71cd) +- #1695 Possible NullReferenceException when receiving InvalidSession (5213916) +- #1702 Rollback Activities to Game (9d7cb39) +- #1727 Move and fix internal AllowedMentions object (4a7f8fe) +- limit request members batch size (084db25) +- UserMentions throwing NullRef (5ed01a3) +- Wrong author for SocketUserMessage.ReferencedMessage (1e9b252) +- Discord sends null when there's no team (05a1f0a) +- IMessage.Embeds docs remarks (a4d32d3) +- Missing MessageReference when sending files (2095701) + +### Misc +- #1545 MutualGuilds optimization (323a677) +- #1551 Update webhook regex to support discord.com (7585789) +- #1556 Add SearchUsersAsync (57880de) +- #1561 Minor refactor to switch expression (42826df) +- #1576 Updating comments for privileged intents (c42bfa6) +- #1678 Change ratelimit messages (47ed806) +- #1714 Update summary of SocketVoiceChannel.Users (e385c40) +- #1720 VoiceRegions and related changes (5934c79) +- Add updated libraries for LastModified (d761846) +- Add alternative documentation link (accd351) +- Temporarily disable StyleCops until all the fixes are impl'd (36de7b2) +- Remove redundant CreateGuildRoleParams (3df0539) +- Add minor tweaks to DiscordSocketConfig docs strings (2cd1880) +- Fix MaxWaitBetweenGuildAvailablesBeforeReady docs string (e31cdc7) +- Missing summary tag for GatewayIntents (3a10018) +- Add new method of role ID copy (857ef77) +- Resolve inheritdocs for IAttachment (9ea3291) +- Mark null as a specific langword in summary (13a41f8) +- Cleanup GatewayReconnectException docs (833ee42) +- Update Docfx.Plugins.LastModified to v1.2.4 (28a6f97) +- Update framework version for tests to Core 3.1 to comply with LTS (4988a07) +- Move bulk deletes remarks from to (62539f0) + ## [2.2.0] - 2020-04-16 ### Added - #1247 Implement Client Status Support (9da11b4) diff --git a/Discord.Net.targets b/Discord.Net.targets index 9502e91dd..503035b0c 100644 --- a/Discord.Net.targets +++ b/Discord.Net.targets @@ -1,7 +1,7 @@ 2.3.0 - dev + latest Discord.Net Contributors discord;discordapp diff --git a/src/Discord.Net/Discord.Net.nuspec b/src/Discord.Net/Discord.Net.nuspec index 5c5ea4072..c675f2fc5 100644 --- a/src/Discord.Net/Discord.Net.nuspec +++ b/src/Discord.Net/Discord.Net.nuspec @@ -2,7 +2,7 @@ Discord.Net - 2.3.0-dev$suffix$ + 2.3.0$suffix$ Discord.Net Discord.Net Contributors foxbot @@ -14,25 +14,25 @@ https://github.com/RogueException/Discord.Net/raw/dev/docs/marketing/logo/PackageLogo.png - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + From 83e88f4fb961bb78d5446e87e31fff4470f616dc Mon Sep 17 00:00:00 2001 From: Paulo Date: Sat, 30 Jan 2021 23:40:33 -0300 Subject: [PATCH 74/76] meta: Bump version to 2.3.1-dev --- Discord.Net.targets | 4 ++-- src/Discord.Net/Discord.Net.nuspec | 32 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Discord.Net.targets b/Discord.Net.targets index 503035b0c..a7e2c8a51 100644 --- a/Discord.Net.targets +++ b/Discord.Net.targets @@ -1,7 +1,7 @@ - 2.3.0 - + 2.3.1 + dev latest Discord.Net Contributors discord;discordapp diff --git a/src/Discord.Net/Discord.Net.nuspec b/src/Discord.Net/Discord.Net.nuspec index c675f2fc5..494e3ea43 100644 --- a/src/Discord.Net/Discord.Net.nuspec +++ b/src/Discord.Net/Discord.Net.nuspec @@ -2,7 +2,7 @@ Discord.Net - 2.3.0$suffix$ + 2.3.1-dev$suffix$ Discord.Net Discord.Net Contributors foxbot @@ -14,25 +14,25 @@ https://github.com/RogueException/Discord.Net/raw/dev/docs/marketing/logo/PackageLogo.png - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + From 73e5cc2fbcc7c974706165f5cb0703770a0be727 Mon Sep 17 00:00:00 2001 From: Yeba <31899118+yebafan@users.noreply.github.com> Date: Sun, 31 Jan 2021 07:13:09 +0100 Subject: [PATCH 75/76] fix: Deadlock in DiscordShardedClient when Ready is never received (#1761) * fixed a deadlock in DiscordShardedClient during a failed Identify due to InvalidSession * fixed log * Don't wait ready before releasing semaphore Co-authored-by: Paulo --- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index d4c96ab26..b43db5d98 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -245,15 +245,15 @@ namespace Discord.WebSocket await _gatewayLogger.DebugAsync("Identifying").ConfigureAwait(false); await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); } - - //Wait for READY - await _connection.WaitAsync().ConfigureAwait(false); } finally { if (locked) _shardedClient.ReleaseIdentifyLock(); } + + //Wait for READY + await _connection.WaitAsync().ConfigureAwait(false); } private async Task OnDisconnectingAsync(Exception ex) { @@ -632,7 +632,7 @@ namespace Discord.WebSocket } else if (_connection.CancelToken.IsCancellationRequested) return; - + if (BaseConfig.AlwaysDownloadUsers) _ = DownloadUsersAsync(Guilds.Where(x => x.IsAvailable && !x.HasAllMembers)); From 0fc713a8977d2474adf03dc83a46d02ffcd295e8 Mon Sep 17 00:00:00 2001 From: Antonio Zdravkov Nikolov Date: Wed, 10 Feb 2021 02:04:32 +0200 Subject: [PATCH 76/76] fix: Private methods aren't added as commands (#1773) Fix breaking change introduced by #1521 --- src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs index 28037b0fa..7a752090e 100644 --- a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs @@ -136,7 +136,7 @@ namespace Discord.Commands builder.Name = typeInfo.Name; // Get all methods (including from inherited members), that are valid commands - var validCommands = typeInfo.GetMethods().Where(IsValidCommandDefinition); + var validCommands = typeInfo.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(IsValidCommandDefinition); foreach (var method in validCommands) {