@@ -307,14 +307,16 @@ async def _delete_messages_individually(self, channel_messages: dict[TextChannel
307307 deleted .append (message )
308308 return deleted
309309
310- async def _delete_found (
310+ async def _delete_bulk (
311311 self , message_mappings : dict [TextChannel , list [Message ]], executor :AsyncExecutor
312- ) -> list [Message ]:
312+ ) -> tuple [ list [Message ], dict [ TextChannel , list [ Message ]] ]:
313313 """
314314 Delete the detected messages.
315315
316316 Deletion is made in bulk per channel for messages less than 14d old.
317- The function returns the deleted messages.
317+
318+ The function returns the deleted messages. Additionally, messages older than 14d are returned to
319+ be deleted separately.
318320 If cleaning was cancelled in the middle, return messages already deleted.
319321 """
320322 deleted = []
@@ -325,7 +327,7 @@ async def _delete_found(
325327 for current_index , message in enumerate (messages ):
326328 if not self .cleaning :
327329 # Means that the cleaning was canceled
328- return deleted
330+ return deleted , {}
329331
330332 if self .is_older_than_14d (message ):
331333 # Further messages are too old to be deleted in bulk
@@ -341,21 +343,15 @@ async def _delete_found(
341343 to_delete = []
342344
343345 if not self .cleaning :
344- return deleted
346+ return deleted , {}
345347 if len (to_delete ) > 0 :
346348 # Deleting any leftover messages if there are any
347349 executor .submit (channel .delete_messages (to_delete ))
348350 deleted .extend (to_delete )
349351
350352 await executor .gather (return_exceptions = True )
351353
352- if old_messages :
353- if not self .cleaning :
354- return deleted
355- old_deleted = await self ._delete_messages_individually (old_messages )
356- deleted .extend (old_deleted )
357-
358- return deleted
354+ return deleted , old_messages
359355
360356 async def _modlog_cleaned_messages (
361357 self ,
@@ -440,14 +436,15 @@ async def _clean_messages(
440436 executor .submit (self ._delete_invocation (ctx ))
441437
442438 deleted_messages = []
439+ old_messages = {channel : [] for channel in deletion_channels }
443440
444441 if self ._use_cache (second_limit ):
445442 log .trace (f"Messages for cleaning by { ctx .author .id } will be searched in the cache." )
446443 message_mappings , message_ids = self ._get_messages_from_cache (
447444 channels = deletion_channels , to_delete = predicate , lower_limit = first_limit
448445 )
449446 self .mod_log .ignore (Event .message_delete , * message_ids )
450- deleted_messages = await self ._delete_found (message_mappings , executor )
447+ deleted_messages , old_messages = await self ._delete_bulk (message_mappings , executor )
451448 second_limit = self ._earliest_cache_datetime ()
452449
453450 if self ._use_api (first_limit ):
@@ -459,12 +456,17 @@ async def _clean_messages(
459456 before = second_limit
460457 )
461458 self .mod_log .ignore (Event .message_delete , * message_ids )
462- api_deleted_messages = await self ._delete_found (message_mappings , executor )
459+ api_deleted_messages , api_old_messages = await self ._delete_bulk (message_mappings , executor )
463460 deleted_messages .extend (api_deleted_messages )
461+ for channel , messages in api_old_messages .items ():
462+ old_messages [channel ].extend (messages )
464463
465464 if not self .cleaning :
466465 # Means that the cleaning was canceled
467466 return None
467+ if old_messages :
468+ old_deleted = await self ._delete_messages_individually (old_messages )
469+ deleted_messages .extend (old_deleted )
468470
469471 self .cleaning = False
470472 log .trace ("Cleaning completed, wrapping up" )
0 commit comments