Files
general-purpose-bot/timers/cleanupMessages.js
2026-01-26 09:03:33 +01:00

57 lines
2.3 KiB
JavaScript

const { MessageActivityType } = require("discord.js");
module.exports = {
timeout: 60000,
immediate: true,
name: 'Cleanup tasks',
async tick(client, timer) {
const keepMessageEmoteId = '1214140438265724980';
const channelConfigs = [
{ channelId: '1214134516247957504', keepTimeMinutes: 2, keepAttachment: true }, //toho-test/mnzbot-test
];
function isMessageLocked(message) {
for (const [id, reaction] of message.reactions.cache) {
if (id === keepMessageEmoteId) {
return true;
}
}
return false;
}
for (let i = 0; i < channelConfigs.length; i++) {
try {
const config = channelConfigs[i];
const channel = await client.channels.fetch(config.channelId);
console.log(`[TIMER] Running cleanup task for ${channel.guild.name}/${channel.name}`);
channel.messages.fetch({ limit: 100 }).then(messages => {
messages.forEach(message => {
if (isMessageLocked(message)) {
//skip if message has mnzboKeepMessage reaction
console.log(`[LOCKED] [${message.guild.name}/${message.channel.name}] | ${message.author.globalName}: ${message.content}`);
return;
}
if (message.attachments.size > 0 && config.keepAttachment) {
//Skip messages with attachment
return;
}
let ageInMinutes = Math.ceil((Date.now() - message.createdTimestamp) / 1000 / 60);
if (ageInMinutes < config.keepTimeMinutes) {
//Skip messages posted within last 48 Hours
return;
}
console.log(`[CLEANUP] [${message.guild.name}/${message.channel.name}] | ${message.author.globalName}: ${message.content}`);
message.delete();
});
});
} catch (error) {
console.log(`[CLEANUP] Failed for ${channelConfigs[i].channelId}`);
}
}
},
};