Will auto-delete event-specific invite links after event has passed (uses scheduledevents.retrieve to test if event ID is valid and deletes if not). Note: will only work for the latest 50 messages and will only work if the Discord event-specific invite link is the only thing in the message content.
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
const today = new Date(); // [date]T00:00:00:00
today.setHours(0, 0, 0, 0);
const today_str = today.toISOString().slice(0, 10); // [date]T00:00:00:00 => [date]
console.log(today_str); // For console logging purposes
// <--CHANGE THESE FOR YOUR SERVER-->
let guildId = 'YOUR_GUILD_ID'; // guild id goes here
let channelId = 'YOUR_CHANNEL_ID_TO_AUTODELETE_FROM'; //channel id goes here
let logId = 'OPTIONAL_LOG_CHANNEL'; //channel id of your log channel goes here (if applicable)
let retrievedEvents = await lib.discord.scheduledevents['@0.0.1'].list({
// gets list of all scheduled events in Discord server and associates it to allEvents
guild_id: guildId,
});
let retrievedMessages = await lib.discord.channels['@0.3.0'].messages.list({
// returns array with list of most recent messages
channel_id: channelId,
limit: 50,
});
let messagesToDelete = [];
let returnedEvent = null;
for (var i = 0; i < retrievedMessages.length; i++) {
if (retrievedMessages[i].content.startsWith('https://discord.gg') && retrievedMessages[i].content.includes('?event=')) {
split_message = retrievedMessages[i].content.split('='); // splits invite link from eventId at the end of it
message_eventId = split_message[1]; // gets invite link from the array returned in the previous line
try {
returnedEvent = await lib.discord.scheduledevents['@0.0.1'].retrieve({
scheduled_event_id: message_eventId,
guild_id: guildId,
});
} catch (e) {
returnedEvent = -1;
messagesToDelete.push(retrievedMessages[i].id); // returnedEvent found an invalid event, so this pushes the event link to be deleted.
}
if (messagesToDelete.length == 0 || (returnedEvent != -1 && returnedEvent != null)) {
// Basically, if nothing came from the above code, then this will run.
eventId_2 = returnedEvent.event_id;
eventDate_2 = returnedEvent.event_date; // compare with today
var date2 = new Date(eventDate_2);
var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
var diffDays = (date1.getTime() - date2.getTime()) / oneDay;
var diffDays_abs = Math.abs(diffDays);
if (Math.sign(diffDays) == 1 && diffDays_abs > 0.01) {
// if the sign of diffDays is positive (a.k.a. the event date is past current date) and the diffDays abs value is greater than 0.03, then...
messagesToDelete.push(retrievedMessages[i].id); // message id goes to the deletion array.
}
}
}
}
let result = null; // initalizes result for next line of code
for (var i = 0; i < messagesToDelete.length; i++) {
result = await lib.discord.channels['@0.3.0'].messages.destroy({
message_id: messagesToDelete[i],
channel_id: channelId,
});
}
// the following is optional code if you want the bot to log the deletion of events in your specified log channel
if (messagesToDelete.length > 0) {
console.log(`\Past event(s) found. Deleted ${messagesToDelete.length} message(s).`);
result = await lib.discord.channels['@0.3.0'].messages.create({
channel_id: logId,
content: '',
tts: false,
embeds: [
{
type: 'rich',
title: `Daily Deletion of Events`,
description: '',
color: 0x5d1725,
fields: [
{
name: `Channel:`,
value: `<#${channelId}>`,
},
{
name: `Number Deleted:`,
value: `${messagesToDelete.length}`,
},
],
},
],
});
} else {
console.log('No past events found. No messages deleted.');
result = await lib.discord.channels['@0.3.0'].messages.create({
channel_id: logId,
content: '',
tts: false,
embeds: [
{
type: 'rich',
title: `Daily Deletion of Events`,
description: 'No events to delete today.',
color: 0x5d1725,
},
],
});
}