| @@ -115,73 +115,11 @@ namespace Discord.Rest | |||
| if (dir == Direction.Around && limit > DiscordConfig.MaxMessagesPerBatch) | |||
| { | |||
| int around = limit / 2; | |||
| return new PagedAsyncEnumerable<RestMessage>( | |||
| DiscordConfig.MaxMessagesPerBatch, | |||
| async (info, ct) => | |||
| { | |||
| var args = new GetChannelMessagesParams | |||
| { | |||
| RelativeDirection = Direction.Before, | |||
| Limit = info.PageSize | |||
| }; | |||
| if (info.Position != null) | |||
| args.RelativeMessageId = info.Position.Value; | |||
| var models = await client.ApiClient.GetChannelMessagesAsync(channel.Id, args, options).ConfigureAwait(false); | |||
| var builder = ImmutableArray.CreateBuilder<RestMessage>(); | |||
| foreach (var model in models) | |||
| { | |||
| var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); | |||
| builder.Add(RestMessage.Create(client, channel, author, model)); | |||
| } | |||
| return builder.ToImmutable(); | |||
| }, | |||
| nextPage: (info, lastPage) => | |||
| { | |||
| if (lastPage.Count != DiscordConfig.MaxMessagesPerBatch) | |||
| return false; | |||
| if (dir == Direction.Before) | |||
| info.Position = lastPage.Min(x => x.Id); | |||
| else | |||
| info.Position = lastPage.Max(x => x.Id); | |||
| return true; | |||
| }, | |||
| start: fromMessageId + 1, //Needs to include the message itself | |||
| count: around + 1 | |||
| ).Concat(new PagedAsyncEnumerable<RestMessage>( | |||
| DiscordConfig.MaxMessagesPerBatch, | |||
| async (info, ct) => | |||
| { | |||
| var args = new GetChannelMessagesParams | |||
| { | |||
| RelativeDirection = Direction.After, | |||
| Limit = info.PageSize | |||
| }; | |||
| if (info.Position != null) | |||
| args.RelativeMessageId = info.Position.Value; | |||
| var models = await client.ApiClient.GetChannelMessagesAsync(channel.Id, args, options).ConfigureAwait(false); | |||
| var builder = ImmutableArray.CreateBuilder<RestMessage>(); | |||
| foreach (var model in models) | |||
| { | |||
| var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable()); | |||
| builder.Add(RestMessage.Create(client, channel, author, model)); | |||
| } | |||
| return builder.ToImmutable(); | |||
| }, | |||
| nextPage: (info, lastPage) => | |||
| { | |||
| if (lastPage.Count != DiscordConfig.MaxMessagesPerBatch) | |||
| return false; | |||
| if (dir == Direction.Before) | |||
| info.Position = lastPage.Min(x => x.Id); | |||
| else | |||
| info.Position = lastPage.Max(x => x.Id); | |||
| return true; | |||
| }, | |||
| start: fromMessageId, | |||
| count: around | |||
| )); | |||
| if (fromMessageId.HasValue) | |||
| return GetMessagesAsync(channel, client, fromMessageId.Value + 1, Direction.Before, around + 1, options) //Need to include the message itself | |||
| .Concat(GetMessagesAsync(channel, client, fromMessageId, Direction.After, around, options)); | |||
| else //Shouldn't happen since there's no public overload for ulong? and Direction | |||
| return GetMessagesAsync(channel, client, null, Direction.Before, around, options); | |||
| } | |||
| return new PagedAsyncEnumerable<RestMessage>( | |||