diff --git a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs index 029f6762c..f7ce3ded0 100644 --- a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs +++ b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs @@ -47,32 +47,25 @@ namespace Discord.Rest } public static IAsyncEnumerable> GetReactionUsersAsync(IMessage msg, IEmote emote, - Action func, BaseDiscordClient client, RequestOptions options) + int? limit, BaseDiscordClient client, RequestOptions options) { Preconditions.NotNull(emote, nameof(emote)); var emoji = (emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name); - var arguments = new GetReactionUsersParams(); - func(arguments); - return new PagedAsyncEnumerable( DiscordConfig.MaxUserReactionsPerBatch, async (info, ct) => { - var args = new GetReactionUsersParams(); - func(args); - args.Limit = info.PageSize; + var args = new GetReactionUsersParams + { + Limit = info.PageSize + }; if (info.Position != null) args.AfterUserId = info.Position.Value; var models = await client.ApiClient.GetReactionUsersAsync(msg.Channel.Id, msg.Id, emoji, args, options).ConfigureAwait(false); - var builder = ImmutableArray.CreateBuilder(); - - foreach (var model in models) - builder.Add(RestUser.Create(client, model)); - - return builder.ToImmutable(); + return models.Select(x => RestUser.Create(client, x)).ToImmutableArray(); }, nextPage: (info, lastPage) => { @@ -82,8 +75,7 @@ namespace Discord.Rest info.Position = lastPage.Max(x => x.Id); return true; }, - start: arguments.AfterUserId.IsSpecified ? arguments.AfterUserId.Value : (ulong?)null, - count: arguments.Limit.GetValueOrDefault(DiscordConfig.MaxUserReactionsPerBatch) + count: limit ); } diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs index 5e51087f1..7354cc4af 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs @@ -137,7 +137,7 @@ namespace Discord.Rest public Task RemoveAllReactionsAsync(RequestOptions options = null) => MessageHelper.RemoveAllReactionsAsync(this, Discord, options); public IAsyncEnumerable> GetReactionUsersAsync(IEmote emote, int limit, RequestOptions options = null) - => MessageHelper.GetReactionUsersAsync(this, emote, x => { x.Limit = limit; }, Discord, options); + => MessageHelper.GetReactionUsersAsync(this, emote, limit, Discord, options); public Task PinAsync(RequestOptions options = null) diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index 6d323412d..f8c15a986 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -131,7 +131,7 @@ namespace Discord.WebSocket public Task RemoveAllReactionsAsync(RequestOptions options = null) => MessageHelper.RemoveAllReactionsAsync(this, Discord, options); public IAsyncEnumerable> GetReactionUsersAsync(IEmote emote, int limit, RequestOptions options = null) - => MessageHelper.GetReactionUsersAsync(this, emote, x => { x.Limit = limit; }, Discord, options); + => MessageHelper.GetReactionUsersAsync(this, emote, limit, Discord, options); public Task PinAsync(RequestOptions options = null) => MessageHelper.PinAsync(this, Discord, options);