Add the ability for a user to delete their own extension

This commit is contained in:
Christopher Cookman 2023-02-07 01:00:59 -07:00
parent b191299b2e
commit 09fb9f48c8
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42
3 changed files with 83 additions and 0 deletions

View file

@ -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",

View file

@ -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}"}) {

View file

@ -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;
}