diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs
index b5f951608..644307592 100644
--- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs
+++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs
@@ -66,7 +66,7 @@ namespace Discord.WebSocket
internal WebSocketProvider WebSocketProvider { get; private set; }
internal bool AlwaysDownloadUsers { get; private set; }
internal int? HandlerTimeout { get; private set; }
- internal bool UseMessagesBulkDeletedOnly { get; private set; }
+ internal bool? ExclusiveBulkDelete { get; private set; }
internal new DiscordSocketApiClient ApiClient => base.ApiClient as DiscordSocketApiClient;
///
@@ -129,7 +129,7 @@ namespace Discord.WebSocket
WebSocketProvider = config.WebSocketProvider;
AlwaysDownloadUsers = config.AlwaysDownloadUsers;
HandlerTimeout = config.HandlerTimeout;
- UseMessagesBulkDeletedOnly = config.UseMessagesBulkDeletedOnly;
+ ExclusiveBulkDelete = config.ExclusiveBulkDelete;
State = new ClientState(0, 0);
Rest = new DiscordSocketRestClient(config, ApiClient);
_heartbeatTimes = new ConcurrentQueue();
@@ -1357,6 +1357,14 @@ namespace Discord.WebSocket
{
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_DELETE_BULK)").ConfigureAwait(false);
+ if (!ExclusiveBulkDelete.HasValue)
+ {
+ await _gatewayLogger.WarningAsync("A bulk delete event has been received, but the event handling behavior has not been set. " +
+ "To supress this message, set the ExclusiveBulkDelete configuration property. " +
+ "This message will appear only once.");
+ ExclusiveBulkDelete = false;
+ }
+
var data = (payload as JToken).ToObject(_serializer);
if (State.GetChannel(data.ChannelId) is ISocketMessageChannel channel)
{
@@ -1375,7 +1383,7 @@ namespace Discord.WebSocket
var cacheable = new Cacheable(msg, id, isCached, async () => await channel.GetMessageAsync(id).ConfigureAwait(false));
cacheableList = cacheableList.Add(cacheable);
- if (!UseMessagesBulkDeletedOnly)
+ if (!ExclusiveBulkDelete ?? false) // this shouldn't happen, but we'll play it safe anyways
await TimedInvokeAsync(_messageDeletedEvent, nameof(MessageDeleted), cacheable, channel).ConfigureAwait(false);
}
diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs
index 369964b74..a038bc8f4 100644
--- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs
+++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs
@@ -107,9 +107,16 @@ namespace Discord.WebSocket
public int? HandlerTimeout { get; set; } = 3000;
///
- /// Gets or sets whether or not is fired for each message on bulk delete.
+ /// Gets or sets the behavior for on bulk deletes.
+ ///
+ /// If true, the event will not be raised for bulk deletes, and
+ /// only the will be raised.
+ ///
+ /// If false, both events will be raised.
+ ///
+ /// If unset, both events will be raised, but a warning will be logged when hooking into the bulk delete event.
///
- public bool UseMessagesBulkDeletedOnly { get; set; } = false;
+ public bool? ExclusiveBulkDelete { get; set; } = null;
///
/// Initializes a default configuration.