Add the ability for a user to delete their own extension
This commit is contained in:
parent
b191299b2e
commit
09fb9f48c8
|
@ -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",
|
||||
|
|
7
funcs.js
7
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}"}) {
|
||||
|
|
57
index.js
57
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue