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}`); } } }, };