From 284af7b6e2941e133062589f23c28065d0756b2f Mon Sep 17 00:00:00 2001 From: RogueException Date: Fri, 7 Apr 2017 05:49:14 -0300 Subject: [PATCH] Support large DeleteMessages collections --- .../Entities/Channels/ChannelHelper.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs index efcadac0d..8fb26377f 100644 --- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs +++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs @@ -181,8 +181,22 @@ namespace Discord.Rest public static async Task DeleteMessagesAsync(IMessageChannel channel, BaseDiscordClient client, IEnumerable messages, RequestOptions options) { - var args = new DeleteMessagesParams(messages.Select(x => x.Id).ToArray()); - await client.ApiClient.DeleteMessagesAsync(channel.Id, args, options).ConfigureAwait(false); + var msgs = messages.Select(x => x.Id).ToArray(); + if (msgs.Length < 100) + { + var args = new DeleteMessagesParams(msgs); + await client.ApiClient.DeleteMessagesAsync(channel.Id, args, options).ConfigureAwait(false); + } + else + { + var batch = new ulong[100]; + for (int i = 0; i < (msgs.Length + 99) / 100; i++) + { + Array.Copy(msgs, i * 100, batch, 0, Math.Min(msgs.Length - (100 * i), 100)); + var args = new DeleteMessagesParams(batch); + await client.ApiClient.DeleteMessagesAsync(channel.Id, args, options).ConfigureAwait(false); + } + } } //Permission Overwrites