diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs index c236b1045..49c881138 100644 --- a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs +++ b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; namespace Discord.WebSocket @@ -39,6 +40,13 @@ namespace Discord.WebSocket remove { _messageDeletedEvent.Remove(value); } } internal readonly AsyncEvent, ISocketMessageChannel, Task>> _messageDeletedEvent = new AsyncEvent, ISocketMessageChannel, Task>>(); + /// Fired when multiple messages are bulk deleted. + public event Func>, ISocketMessageChannel, Task> MessageBulkDeleted { + add { _messageBulkDeletedEvent.Add(value); } + remove { _messageBulkDeletedEvent.Remove(value); } + + } + internal readonly AsyncEvent>, ISocketMessageChannel, Task>> _messageBulkDeletedEvent = new AsyncEvent>, ISocketMessageChannel, Task>>(); /// Fired when a message is updated. public event Func, SocketMessage, ISocketMessageChannel, Task> MessageUpdated { add { _messageUpdatedEvent.Add(value); } diff --git a/src/Discord.Net.WebSocket/DiscordShardedClient.cs b/src/Discord.Net.WebSocket/DiscordShardedClient.cs index 881ce3909..51a609ba3 100644 --- a/src/Discord.Net.WebSocket/DiscordShardedClient.cs +++ b/src/Discord.Net.WebSocket/DiscordShardedClient.cs @@ -286,6 +286,7 @@ namespace Discord.WebSocket client.MessageReceived += (msg) => _messageReceivedEvent.InvokeAsync(msg); client.MessageDeleted += (cache, channel) => _messageDeletedEvent.InvokeAsync(cache, channel); + client.MessageBulkDeleted += (cache, channel) => _messageBulkDeletedEvent.InvokeAsync(cache, channel); client.MessageUpdated += (oldMsg, newMsg, channel) => _messageUpdatedEvent.InvokeAsync(oldMsg, newMsg, channel); client.ReactionAdded += (cache, channel, reaction) => _reactionAddedEvent.InvokeAsync(cache, channel, reaction); client.ReactionRemoved += (cache, channel, reaction) => _reactionRemovedEvent.InvokeAsync(cache, channel, reaction); diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 45d60b764..bbc8e041c 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1270,13 +1270,17 @@ namespace Discord.WebSocket return; } + var cacheablelist = new List>(); foreach (ulong id in data.Ids) { var msg = SocketChannelHelper.RemoveMessage(channel, this, id); bool isCached = msg != null; var cacheable = new Cacheable(msg, id, isCached, async () => await channel.GetMessageAsync(id)); - await TimedInvokeAsync(_messageDeletedEvent, nameof(MessageDeleted), cacheable, channel).ConfigureAwait(false); + cacheablelist.Add(cacheable); } + await TimedInvokeAsync(_messageBulkDeletedEvent, nameof(MessageBulkDeleted), cacheablelist.ToReadOnlyCollection(), channel).ConfigureAwait(false); + + } else {