discord-freepbx-manager/deletions.js
Christopher Cookman 68d6402ffd - Disable unfinished CDR commands
- Impliment delayed auto-delete of orphaned extensions, with auto cancel.
2025-02-11 08:28:41 -07:00

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]);
}
}
};