- Impliment delayed auto-delete of orphaned extensions, with auto cancel.
48 lines
1.9 KiB
JavaScript
48 lines
1.9 KiB
JavaScript
const pool = global.pool
|
|
const fpbx = global.fpbx
|
|
const client = global.client
|
|
const log = global.log
|
|
|
|
module.exports = {};
|
|
|
|
module.exports.handleScheduled = async () => {
|
|
const deletions = await pool.query('SELECT * FROM discord_deletions');
|
|
if (!deletions) return;
|
|
|
|
for (const deletion of deletions) {
|
|
const guild = client.guilds.cache.get(process.env.DISCORD_GUILD);
|
|
const member = guild ? await guild.members.fetch(deletion.discordId).catch(() => null) : null;
|
|
|
|
if (member) {
|
|
log.info(`User ${deletion.discordId} rejoined, removing deletion`);
|
|
await pool.query('DELETE FROM discord_deletions WHERE discordId = ?', [deletion.discordId]);
|
|
return;
|
|
} else if (new Date(deletion.deleteAt) < new Date()) {
|
|
log.info(`Deleting extension for ${deletion.discordId}`);
|
|
await fpbx.deleteExtension(deletion.extension);
|
|
await fpbx.reload();
|
|
await pool.query('DELETE FROM discord_deletions WHERE discordId = ?', [deletion.discordId]);
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports.findOrphans = async () => {
|
|
const users = await pool.query('SELECT * FROM discord_users');
|
|
const deletions = await pool.query('SELECT * FROM discord_deletions');
|
|
const guild = client.guilds.cache.get(process.env.DISCORD_GUILD);
|
|
if (!users) return
|
|
for (const user of users) {
|
|
const member = guild ? await guild.members.fetch(user.discordId).catch(() => null) : null;
|
|
if (!member) {
|
|
log.info(`User ${user.discordId} not found in guild, marking for deletion`);
|
|
const isMarkedForDeletion = deletions.some(deletion => deletion.discordId === user.discordId);
|
|
if (isMarkedForDeletion) {
|
|
log.info(`User ${user.discordId} is already marked for deletion`);
|
|
continue;
|
|
}
|
|
const deleteAt = new Date(Date.now() + 60 * 60 * 1000); // 1 hour in the future
|
|
await pool.query('INSERT INTO discord_deletions (discordId, extension, deleteAt) VALUES (?, ?, ?)', [user.discordId, user.extension, deleteAt]);
|
|
}
|
|
}
|
|
}; |