Add ignore and unignore functionality autodelete

This commit is contained in:
Wizzard 2025-04-11 15:36:41 -04:00
parent 73149b8d6d
commit 887ebb0c64

@ -3,10 +3,60 @@ let deleteQueue = [];
let isProcessingQueue = false;
let messageTimers = new Map();
let ignoredMessages = new Set();
let ignoredChannels = new Set();
let ignoredUsers = new Set();
let ignoredGuilds = new Set();
let isFirstDeletion = true;
let deletedMessages = new Set();
const CACHE_CLEANUP_INTERVAL = 30 * 60 * 1000;
const { sendCommandResponse } = require('../utils/messageUtils');
const fs = require('fs');
const path = require('path');
const DATA_DIR = path.join(__dirname, '..', 'data');
const IGNORE_FILE = path.join(DATA_DIR, 'autodelete_ignores.json');
if (!fs.existsSync(DATA_DIR)) {
try {
fs.mkdirSync(DATA_DIR, { recursive: true });
console.log('[AUTODELETE] Created data directory');
} catch (error) {
console.error('[AUTODELETE] Error creating data directory:', error);
}
}
function loadIgnoreLists() {
try {
if (fs.existsSync(IGNORE_FILE)) {
const data = JSON.parse(fs.readFileSync(IGNORE_FILE, 'utf8'));
if (data.ignoredChannels) ignoredChannels = new Set(data.ignoredChannels);
if (data.ignoredUsers) ignoredUsers = new Set(data.ignoredUsers);
if (data.ignoredGuilds) ignoredGuilds = new Set(data.ignoredGuilds);
console.log('[AUTODELETE] Loaded ignore lists from file');
}
} catch (error) {
console.error('[AUTODELETE] Error loading ignore lists:', error);
}
}
function saveIgnoreLists() {
try {
const data = {
ignoredChannels: Array.from(ignoredChannels),
ignoredUsers: Array.from(ignoredUsers),
ignoredGuilds: Array.from(ignoredGuilds)
};
fs.writeFileSync(IGNORE_FILE, JSON.stringify(data, null, 2), 'utf8');
console.log('[AUTODELETE] Saved ignore lists to file');
} catch (error) {
console.error('[AUTODELETE] Error saving ignore lists:', error);
}
}
loadIgnoreLists();
const DELETION_DELAY = 5 * 60 * 1000;
let DELETE_INTERVAL_MIN = 8000;
@ -186,6 +236,21 @@ const handleNewMessage = (message) => {
return;
}
if (message.channel && ignoredChannels.has(message.channel.id)) {
console.log(`[AUTODELETE] Skipping message in ignored channel: ${message.channel.id}`);
return;
}
if (message.guild && ignoredGuilds.has(message.guild.id)) {
console.log(`[AUTODELETE] Skipping message in ignored guild: ${message.guild.id}`);
return;
}
if (!message.guild && message.channel && ignoredUsers.has(message.channel.recipient?.id)) {
console.log(`[AUTODELETE] Skipping message to ignored user: ${message.channel.recipient.id}`);
return;
}
console.log(`[AUTODELETE] New message tracked: ${message.id}`);
console.log(`[AUTODELETE] Content preview: ${message.content.slice(0, 30)}...`);
@ -212,13 +277,18 @@ module.exports = {
ignoredMessages.add(message.id);
if (args.length === 0 || args[0].toLowerCase() === 'status') {
let ignoreStatus = '';
if (ignoredChannels.size > 0 || ignoredGuilds.size > 0 || ignoredUsers.size > 0) {
ignoreStatus = `\nIgnored: ${ignoredChannels.size} channels, ${ignoredGuilds.size} servers, ${ignoredUsers.size} users`;
}
const statusText = isAutoDeleteActive
? `Auto-delete is ON - Messages will be deleted after approximately ${Math.round(DELETION_DELAY / 1000 / 60)} minutes.`
: 'Auto-delete is OFF.';
await sendCommandResponse(
message,
`${statusText}\nQueue size: ${deleteQueue.length} messages | Tracked messages: ${messageTimers.size}`,
`${statusText}\nQueue size: ${deleteQueue.length} messages | Tracked messages: ${messageTimers.size}${ignoreStatus}`,
deleteTimeout,
true
);
@ -316,9 +386,176 @@ module.exports = {
return;
}
if (command === 'ignore') {
if (args.length < 2) {
await sendCommandResponse(
message,
'Please specify what to ignore. Usage: `.autodelete ignore [channel/server/user] [ID]`',
deleteTimeout,
true
);
return;
}
const ignoreType = args[1].toLowerCase();
const id = args[2];
if (!id || !/^\d{17,19}$/.test(id)) {
await sendCommandResponse(
message,
'Please provide a valid ID (channel, server, or user ID).',
deleteTimeout,
true
);
return;
}
if (ignoreType === 'channel' || ignoreType === 'c') {
ignoredChannels.add(id);
saveIgnoreLists();
await sendCommandResponse(
message,
`Channel ${id} will now be ignored by auto-delete.`,
deleteTimeout,
true
);
} else if (ignoreType === 'server' || ignoreType === 'guild' || ignoreType === 's' || ignoreType === 'g') {
ignoredGuilds.add(id);
saveIgnoreLists();
await sendCommandResponse(
message,
`Server ${id} will now be ignored by auto-delete.`,
deleteTimeout,
true
);
} else if (ignoreType === 'user' || ignoreType === 'u' || ignoreType === 'dm') {
ignoredUsers.add(id);
saveIgnoreLists();
await sendCommandResponse(
message,
`User ${id} (DMs) will now be ignored by auto-delete.`,
deleteTimeout,
true
);
} else {
await sendCommandResponse(
message,
'Invalid ignore type. Use "channel", "server", or "user".',
deleteTimeout,
true
);
}
return;
}
if (command === 'unignore') {
if (args.length < 2) {
await sendCommandResponse(
message,
'Please specify what to unignore. Usage: `.autodelete unignore [channel/server/user] [ID]`',
deleteTimeout,
true
);
return;
}
const ignoreType = args[1].toLowerCase();
const id = args[2];
if (!id || !/^\d{17,19}$/.test(id)) {
await sendCommandResponse(
message,
'Please provide a valid ID (channel, server, or user ID).',
deleteTimeout,
true
);
return;
}
if (ignoreType === 'channel' || ignoreType === 'c') {
if (ignoredChannels.has(id)) {
ignoredChannels.delete(id);
saveIgnoreLists();
await sendCommandResponse(
message,
`Channel ${id} will no longer be ignored by auto-delete.`,
deleteTimeout,
true
);
} else {
await sendCommandResponse(
message,
`Channel ${id} is not in the ignore list.`,
deleteTimeout,
true
);
}
} else if (ignoreType === 'server' || ignoreType === 'guild' || ignoreType === 's' || ignoreType === 'g') {
if (ignoredGuilds.has(id)) {
ignoredGuilds.delete(id);
saveIgnoreLists();
await sendCommandResponse(
message,
`Server ${id} will no longer be ignored by auto-delete.`,
deleteTimeout,
true
);
} else {
await sendCommandResponse(
message,
`Server ${id} is not in the ignore list.`,
deleteTimeout,
true
);
}
} else if (ignoreType === 'user' || ignoreType === 'u' || ignoreType === 'dm') {
if (ignoredUsers.has(id)) {
ignoredUsers.delete(id);
saveIgnoreLists();
await sendCommandResponse(
message,
`User ${id} (DMs) will no longer be ignored by auto-delete.`,
deleteTimeout,
true
);
} else {
await sendCommandResponse(
message,
`User ${id} is not in the ignore list.`,
deleteTimeout,
true
);
}
} else {
await sendCommandResponse(
message,
'Invalid ignore type. Use "channel", "server", or "user".',
deleteTimeout,
true
);
}
return;
}
if (command === 'ignorelist' || command === 'list') {
let ignoredChannelsList = Array.from(ignoredChannels).join(', ');
let ignoredGuildsList = Array.from(ignoredGuilds).join(', ');
let ignoredUsersList = Array.from(ignoredUsers).join(', ');
const ignoredInfo = `**Ignored Channels:** ${ignoredChannels.size > 0 ? ignoredChannelsList : 'None'}\n**Ignored Servers:** ${ignoredGuilds.size > 0 ? ignoredGuildsList : 'None'}\n**Ignored Users (DMs):** ${ignoredUsers.size > 0 ? ignoredUsersList : 'None'}`;
await sendCommandResponse(
message,
`**Auto-delete Ignore List**\n\n${ignoredInfo}`,
deleteTimeout,
true
);
return;
}
await sendCommandResponse(
message,
'Unknown command. Available options: on/off, status, clear, speed [slow/normal/fast]',
'Unknown command. Valid commands: on, off, status, ignore, unignore, ignorelist',
deleteTimeout,
true
);