diff --git a/src/Discord.Net/API/Gateway/MessageDeleteBulkEvent.cs b/src/Discord.Net/API/Gateway/MessageDeleteBulkEvent.cs new file mode 100644 index 000000000..8e7951530 --- /dev/null +++ b/src/Discord.Net/API/Gateway/MessageDeleteBulkEvent.cs @@ -0,0 +1,13 @@ +using Newtonsoft.Json; +using System.Collections.Generic; + +namespace Discord.API.Gateway +{ + public class MessageDeleteBulkEvent + { + [JsonProperty("channel_id")] + public ulong ChannelId { get; set; } + [JsonProperty("ids")] + public IEnumerable Ids { get; set; } + } +} diff --git a/src/Discord.Net/DiscordSocketClient.cs b/src/Discord.Net/DiscordSocketClient.cs index 13050fc96..47a554249 100644 --- a/src/Discord.Net/DiscordSocketClient.cs +++ b/src/Discord.Net/DiscordSocketClient.cs @@ -805,6 +805,27 @@ namespace Discord } } break; + case "MESSAGE_DELETE_BULK": + { + await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_DELETE_BULK)").ConfigureAwait(false); + + var data = (payload as JToken).ToObject(_serializer); + var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; + if (channel != null) + { + foreach (var id in data.Ids) + { + var msg = channel.RemoveMessage(id); + await MessageDeleted.RaiseAsync(msg).ConfigureAwait(false); + } + } + else + { + await _gatewayLogger.WarningAsync("MESSAGE_DELETE_BULK referenced an unknown channel.").ConfigureAwait(false); + return; + } + } + break; //Statuses case "PRESENCE_UPDATE":