diff --git a/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs b/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs
index d921a2474..d75a4e29c 100644
--- a/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs
+++ b/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
namespace Discord
@@ -26,6 +27,44 @@ namespace Discord
int? UserLimit { get; }
///
+ /// Bulk-deletes multiple messages.
+ ///
+ ///
+ /// The following example gets 250 messages from the channel and deletes them.
+ ///
+ /// var messages = await voiceChannel.GetMessagesAsync(250).FlattenAsync();
+ /// await voiceChannel.DeleteMessagesAsync(messages);
+ ///
+ ///
+ ///
+ /// This method attempts to remove the messages specified in bulk.
+ ///
+ /// Due to the limitation set by Discord, this method can only remove messages that are posted within 14 days!
+ ///
+ ///
+ /// The messages to be bulk-deleted.
+ /// The options to be used when sending the request.
+ ///
+ /// A task that represents the asynchronous bulk-removal operation.
+ ///
+ Task DeleteMessagesAsync(IEnumerable messages, RequestOptions options = null);
+ ///
+ /// Bulk-deletes multiple messages.
+ ///
+ ///
+ /// This method attempts to remove the messages specified in bulk.
+ ///
+ /// Due to the limitation set by Discord, this method can only remove messages that are posted within 14 days!
+ ///
+ ///
+ /// The snowflake identifier of the messages to be bulk-deleted.
+ /// The options to be used when sending the request.
+ ///
+ /// A task that represents the asynchronous bulk-removal operation.
+ ///
+ Task DeleteMessagesAsync(IEnumerable messageIds, RequestOptions options = null);
+
+ ///
/// Modifies this voice channel.
///
/// The properties to modify the channel with.
diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs
index 75f477c7c..af43e9f4e 100644
--- a/src/Discord.Net.Rest/BaseDiscordClient.cs
+++ b/src/Discord.Net.Rest/BaseDiscordClient.cs
@@ -57,7 +57,7 @@ namespace Discord.Rest
if (info == null)
await _restLogger.VerboseAsync($"Preemptive Rate limit triggered: {endpoint} {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false);
else
- await _restLogger.WarningAsync($"Rate limit triggered: {endpoint} {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false);
+ await _restLogger.WarningAsync($"Rate limit triggered: {endpoint} Remaining: {info.Value.RetryAfter}s {(id.IsHashBucket ? $"(Bucket: {id.BucketHash})" : "")}").ConfigureAwait(false);
};
ApiClient.SentRequest += async (method, endpoint, millis) => await _restLogger.VerboseAsync($"{method} {endpoint}: {millis} ms").ConfigureAwait(false);
}
@@ -257,6 +257,6 @@ namespace Discord.Rest
///
Task IDiscordClient.StopAsync()
=> Task.Delay(0);
- #endregion
+ #endregion
}
}
diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs
index fdbdeda5e..2ffc75a24 100644
--- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs
+++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs
@@ -12,6 +12,9 @@ namespace Discord
public int Bitrate => throw new NotImplementedException();
public int? UserLimit => throw new NotImplementedException();
+ public Task DeleteMessagesAsync(IEnumerable messages, RequestOptions options = null) => throw new NotImplementedException();
+
+ public Task DeleteMessagesAsync(IEnumerable messageIds, RequestOptions options = null) => throw new NotImplementedException();
public ulong? CategoryId => throw new NotImplementedException();