From 15eea920e720dbfc5a083cbc082c178f10de36d9 Mon Sep 17 00:00:00 2001 From: Zane Pereira Date: Wed, 8 Aug 2018 23:20:56 +0530 Subject: [PATCH 1/2] Added MessageBulkDeleted event (wip) --- src/Discord.Net.WebSocket/BaseSocketClient.Events.cs | 8 ++++++++ src/Discord.Net.WebSocket/DiscordShardedClient.cs | 1 + src/Discord.Net.WebSocket/DiscordSocketClient.cs | 6 +++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs index c236b1045..6993cda47 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 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 e29cc4057..a4af5fea3 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 9efc7d3fa..2745dbc06 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, channel).ConfigureAwait(false); + + } else { From 1d5e7d6b76a20ee1b45abe7e7c054afcc753a258 Mon Sep 17 00:00:00 2001 From: Zane Pereira Date: Thu, 9 Aug 2018 11:58:57 +0530 Subject: [PATCH 2/2] Made some requested changes --- src/Discord.Net.WebSocket/BaseSocketClient.Events.cs | 6 +++--- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs index 6993cda47..49c881138 100644 --- a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs +++ b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs @@ -40,13 +40,13 @@ namespace Discord.WebSocket remove { _messageDeletedEvent.Remove(value); } } internal readonly AsyncEvent, ISocketMessageChannel, Task>> _messageDeletedEvent = new AsyncEvent, ISocketMessageChannel, Task>>(); - /// Fired when multiple messages bulk deleted. - public event Func>, ISocketMessageChannel, Task> MessageBulkDeleted { + /// 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>>(); + 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/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 2745dbc06..c0e41adba 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1278,7 +1278,7 @@ namespace Discord.WebSocket var cacheable = new Cacheable(msg, id, isCached, async () => await channel.GetMessageAsync(id)); cacheablelist.Add(cacheable); } - await TimedInvokeAsync(_messageBulkDeletedEvent, nameof(MessageBulkDeleted), cacheablelist, channel).ConfigureAwait(false); + await TimedInvokeAsync(_messageBulkDeletedEvent, nameof(MessageBulkDeleted), cacheablelist.ToReadOnlyCollection(), channel).ConfigureAwait(false); }