From 09fb9f48c82d74be33066e7734b2236b0022f2d7 Mon Sep 17 00:00:00 2001 From: ChrisChrome Date: Tue, 7 Feb 2023 01:00:59 -0700 Subject: [PATCH] Add the ability for a user to delete their own extension --- commands.json | 19 +++++++++++++++++ funcs.js | 7 +++++++ index.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) diff --git a/commands.json b/commands.json index c58edc1..0b58ba2 100644 --- a/commands.json +++ b/commands.json @@ -9,6 +9,25 @@ "description": "Get an extension on the Telefreunde Community Phone System", "type": 1 }, + { + "name": "delete", + "description": "Remove your extension from the Telefreunde Community Phone System", + "type": 1, + "options": [ + { + "name": "confirm", + "description": "Confirm that you want to delete your extension. THIS CANNOT BE UNDONE!", + "type": 5, + "required": true, + "choices": [ + { + "name": "yes", + "value": "yes" + } + ] + } + ] + }, { "name": "list", "description": "List all extensions on the Telefreunde Community Phone System", diff --git a/funcs.js b/funcs.js index c52ad46..4c7d386 100644 --- a/funcs.js +++ b/funcs.js @@ -61,6 +61,13 @@ module.exports = { } }`; break; + case 'delete': + return `mutation { + deleteExtension(input: {extensionId: ${args.ext}}) { + status + } + }`; + break; case 'reload': return `mutation { doreload(input: {clientMutationId: "${args.id}"}) { diff --git a/index.js b/index.js index 17e7aac..a522a7a 100644 --- a/index.js +++ b/index.js @@ -58,6 +58,29 @@ const createExtension = (ext, name, uid) => { }); } +// deleteExtension, takes an extension number +const deleteExtension = (ext) => { + return new Promise((resolve, reject) => { + pbxClient.request(funcs.generateQuery('delete', { + ext: ext + })).then((result) => { + pbxClient.request(funcs.generateQuery('reload', { + id: "DeleteExt" + })).then((result) => { + res = { + "status": "deleted", + "result": result + } + resolve(res); + }).catch((error) => { + reject(error); + }); + }).catch((error) => { + reject(error); + }); + }); +} + const lookupExtension = (ident, type) => { // type is either "ext" or "uid" return new Promise((resolve, reject) => { switch (type) { @@ -292,6 +315,40 @@ dcClient.on('interactionCreate', async interaction => { ephemeral: true }) break; + case "delete": + if (interaction.options.get("confirm").value == false) { + interaction.reply({ + content: "Please confirm you want to delete your extension by running `/delete confirm:true`", + ephemeral: true + }) + break; + } + interaction.reply({ content: "Please Wait...", ephemeral: true }) + lookupExtension(interaction.user.id, "uid").then((result) => { + if (result.status == "exists") { + // The user has an extension, delete it + deleteExtension(result.result.fetchExtension.user.extension).then((result) => { + if (result.status == "deleted") { + interaction.editReply({ + content: "Extension Deleted!", + ephemeral: true + }) + // Remove the role from the user on Discord based on the ID in the config file + let role = interaction.guild.roles.cache.find(role => role.id === config.discord.roleId); + interaction.member.roles.remove(role); + } + }).catch((error) => { + interaction.reply(`Error deleting extension: ${error}`); + }); + } + }).catch((error) => { + // The user doesn't have an extension, return an ephemeral message saying so + interaction.editReply({ + content: "You don't have an extension!", + ephemeral: true + }); + }); + break; default: break; }