@@ -1,4 +1,5 @@ | |||||
using System; | using System; | ||||
using System.Collections.Generic; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
@@ -39,6 +40,13 @@ namespace Discord.WebSocket | |||||
remove { _messageDeletedEvent.Remove(value); } | remove { _messageDeletedEvent.Remove(value); } | ||||
} | } | ||||
internal readonly AsyncEvent<Func<Cacheable<IMessage, ulong>, ISocketMessageChannel, Task>> _messageDeletedEvent = new AsyncEvent<Func<Cacheable<IMessage, ulong>, ISocketMessageChannel, Task>>(); | internal readonly AsyncEvent<Func<Cacheable<IMessage, ulong>, ISocketMessageChannel, Task>> _messageDeletedEvent = new AsyncEvent<Func<Cacheable<IMessage, ulong>, ISocketMessageChannel, Task>>(); | ||||
/// <summary> Fired when multiple messages are bulk deleted. </summary> | |||||
public event Func<IReadOnlyCollection<Cacheable<IMessage, ulong>>, ISocketMessageChannel, Task> MessageBulkDeleted { | |||||
add { _messageBulkDeletedEvent.Add(value); } | |||||
remove { _messageBulkDeletedEvent.Remove(value); } | |||||
} | |||||
internal readonly AsyncEvent<Func<IReadOnlyCollection<Cacheable<IMessage, ulong>>, ISocketMessageChannel, Task>> _messageBulkDeletedEvent = new AsyncEvent<Func<IReadOnlyCollection<Cacheable<IMessage, ulong>>, ISocketMessageChannel, Task>>(); | |||||
/// <summary> Fired when a message is updated. </summary> | /// <summary> Fired when a message is updated. </summary> | ||||
public event Func<Cacheable<IMessage, ulong>, SocketMessage, ISocketMessageChannel, Task> MessageUpdated { | public event Func<Cacheable<IMessage, ulong>, SocketMessage, ISocketMessageChannel, Task> MessageUpdated { | ||||
add { _messageUpdatedEvent.Add(value); } | add { _messageUpdatedEvent.Add(value); } | ||||
@@ -286,6 +286,7 @@ namespace Discord.WebSocket | |||||
client.MessageReceived += (msg) => _messageReceivedEvent.InvokeAsync(msg); | client.MessageReceived += (msg) => _messageReceivedEvent.InvokeAsync(msg); | ||||
client.MessageDeleted += (cache, channel) => _messageDeletedEvent.InvokeAsync(cache, channel); | 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.MessageUpdated += (oldMsg, newMsg, channel) => _messageUpdatedEvent.InvokeAsync(oldMsg, newMsg, channel); | ||||
client.ReactionAdded += (cache, channel, reaction) => _reactionAddedEvent.InvokeAsync(cache, channel, reaction); | client.ReactionAdded += (cache, channel, reaction) => _reactionAddedEvent.InvokeAsync(cache, channel, reaction); | ||||
client.ReactionRemoved += (cache, channel, reaction) => _reactionRemovedEvent.InvokeAsync(cache, channel, reaction); | client.ReactionRemoved += (cache, channel, reaction) => _reactionRemovedEvent.InvokeAsync(cache, channel, reaction); | ||||
@@ -1270,13 +1270,17 @@ namespace Discord.WebSocket | |||||
return; | return; | ||||
} | } | ||||
var cacheablelist = new List<Cacheable<IMessage, ulong>>(); | |||||
foreach (ulong id in data.Ids) | foreach (ulong id in data.Ids) | ||||
{ | { | ||||
var msg = SocketChannelHelper.RemoveMessage(channel, this, id); | var msg = SocketChannelHelper.RemoveMessage(channel, this, id); | ||||
bool isCached = msg != null; | bool isCached = msg != null; | ||||
var cacheable = new Cacheable<IMessage, ulong>(msg, id, isCached, async () => await channel.GetMessageAsync(id)); | var cacheable = new Cacheable<IMessage, ulong>(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 | else | ||||
{ | { | ||||