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.