From a2acaa42f18c3ebfc832b18adf4da951198273dc Mon Sep 17 00:00:00 2001 From: Wizzard Date: Thu, 6 Feb 2025 08:29:28 -0500 Subject: [PATCH] Update autodelete.js --- commands/autodelete.js | 51 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/commands/autodelete.js b/commands/autodelete.js index 9bfa495..b90606b 100644 --- a/commands/autodelete.js +++ b/commands/autodelete.js @@ -4,11 +4,20 @@ let isProcessingQueue = false; let messageTimers = new Map(); let ignoredMessages = new Set(); let isFirstDeletion = true; +let deletedMessages = new Set(); +const CACHE_CLEANUP_INTERVAL = 30 * 60 * 1000; const DELETION_DELAY = 5 * 60 * 1000; const MIN_DELETE_INTERVAL = 2500; const MAX_DELETE_INTERVAL = 3500; +setInterval(() => { + if (deletedMessages.size > 1000) { + console.log(`[AUTODELETE] Cleaning message cache (size: ${deletedMessages.size})`); + deletedMessages.clear(); + } +}, CACHE_CLEANUP_INTERVAL); + const getRandomInterval = () => { return Math.floor(Math.random() * (MAX_DELETE_INTERVAL - MIN_DELETE_INTERVAL)) + MIN_DELETE_INTERVAL; }; @@ -20,6 +29,19 @@ const processDeleteQueue = async () => { const messageToDelete = deleteQueue.shift(); if (!messageToDelete) return; + if (deletedMessages.has(messageToDelete.id)) { + console.log(`[AUTODELETE] Message ${messageToDelete.id} already deleted (cached), skipping`); + + if (deleteQueue.length > 0 && isProcessingQueue) { + const nextInterval = getRandomInterval(); + console.log(`[AUTODELETE] Next deletion in ${nextInterval}ms | Queue size: ${deleteQueue.length}`); + setTimeout(processDeleteQueue, nextInterval); + } else { + isProcessingQueue = false; + } + return; + } + const deleteDelay = Math.floor(Math.random() * 100) + 50; await new Promise(resolve => setTimeout(resolve, deleteDelay)); console.log(`[AUTODELETE] Waited ${deleteDelay}ms before processing`); @@ -28,7 +50,8 @@ const processDeleteQueue = async () => { console.log(`[AUTODELETE] Checking message ${messageToDelete.id} existence${isFirstDeletion ? ' (first deletion)' : ''}`); const exists = await messageToDelete.fetch().catch(() => null); if (!exists) { - console.log(`[AUTODELETE] Message ${messageToDelete.id} no longer exists, skipping`); + console.log(`[AUTODELETE] Message ${messageToDelete.id} no longer exists, adding to cache`); + deletedMessages.add(messageToDelete.id); isFirstDeletion = false; if (deleteQueue.length > 0 && isProcessingQueue) { const nextInterval = getRandomInterval(); @@ -41,11 +64,19 @@ const processDeleteQueue = async () => { } } - await messageToDelete.delete().catch(() => { - console.log(`[AUTODELETE] Couldn't delete message ${messageToDelete.id}`); + await messageToDelete.delete().catch((error) => { + if (error.code === 10008) { + console.log(`[AUTODELETE] Message ${messageToDelete.id} already deleted, adding to cache`); + deletedMessages.add(messageToDelete.id); + } else { + console.log(`[AUTODELETE] Couldn't delete message ${messageToDelete.id}:`, error); + } }); - console.log(`[AUTODELETE] Processed message ${messageToDelete.id}`); + if (!deletedMessages.has(messageToDelete.id)) { + deletedMessages.add(messageToDelete.id); + console.log(`[AUTODELETE] Processed and cached message ${messageToDelete.id}`); + } isFirstDeletion = false; } catch (error) { @@ -71,8 +102,8 @@ const startQueueProcessing = () => { const handleNewMessage = (message) => { if (!isAutoDeleteActive || message.author.id !== message.client.user.id) return; - if (ignoredMessages.has(message.id)) { - console.log(`[AUTODELETE] Skipping ignored message: ${message.id}`); + if (ignoredMessages.has(message.id) || deletedMessages.has(message.id)) { + console.log(`[AUTODELETE] Skipping cached/ignored message: ${message.id}`); return; } if (message.content.startsWith('.autodelete')) { @@ -86,9 +117,11 @@ const handleNewMessage = (message) => { const timer = setTimeout(() => { if (isAutoDeleteActive) { console.log(`[AUTODELETE] Timer completed for message: ${message.id}`); - deleteQueue.push(message); - messageTimers.delete(message.id); - startQueueProcessing(); + if (!deletedMessages.has(message.id)) { + deleteQueue.push(message); + messageTimers.delete(message.id); + startQueueProcessing(); + } } }, DELETION_DELAY);