Add some user context menu options, thats neat
This commit is contained in:
parent
79213d37d3
commit
e27dab223b
169
index.js
169
index.js
|
@ -308,7 +308,7 @@ dcClient.on('ready', async () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
sendLog(`${colors.cyan("[INFO]")} Logged in as ${dcClient.user.displayName}!`);
|
sendLog(`${colors.cyan("[INFO]")} Logged in as ${dcClient.user.displayName}!`);
|
||||||
|
|
||||||
const pageGroups = require('./pageGroups.json');
|
const pageGroups = require('./pageGroups.json');
|
||||||
var commands = [
|
var commands = [
|
||||||
{
|
{
|
||||||
|
@ -393,23 +393,37 @@ dcClient.on('ready', async () => {
|
||||||
"choices": pageGroups
|
"choices": pageGroups
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lookup Extension",
|
||||||
|
"type": 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Create Extension",
|
||||||
|
"type": 2,
|
||||||
|
"default_member_permissions": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Delete Extension",
|
||||||
|
"type": 2,
|
||||||
|
"default_member_permissions": 0
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
(async () => {
|
|
||||||
try {
|
(async () => {
|
||||||
sendLog(`${colors.cyan("[INFO]")} Started refreshing application (/) commands.`);
|
try {
|
||||||
await rest.put(
|
sendLog(`${colors.cyan("[INFO]")} Started refreshing application (/) commands.`);
|
||||||
Routes.applicationGuildCommands(dcClient.user.id, config.discord.guildId), {
|
await rest.put(
|
||||||
body: commands
|
Routes.applicationGuildCommands(dcClient.user.id, config.discord.guildId), {
|
||||||
}
|
body: commands
|
||||||
);
|
|
||||||
sendLog(`${colors.cyan("[INFO]")} Successfully reloaded application (/) commands.`);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`${colors.red("[ERROR]")} ${error}`);
|
|
||||||
}
|
}
|
||||||
})();
|
);
|
||||||
|
sendLog(`${colors.cyan("[INFO]")} Successfully reloaded application (/) commands.`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`${colors.red("[ERROR]")} ${error}`);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
// Presence Stuff
|
// Presence Stuff
|
||||||
getExtCount().then((result) => {
|
getExtCount().then((result) => {
|
||||||
|
@ -928,7 +942,7 @@ dcClient.on('interactionCreate', async interaction => {
|
||||||
interaction.editReply(`Error removing you from the paging group: ${error}`);
|
interaction.editReply(`Error removing you from the paging group: ${error}`);
|
||||||
sendLog(`${colors.red("[ERROR]")} ${error}`);
|
sendLog(`${colors.red("[ERROR]")} ${error}`);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
|
@ -1095,6 +1109,131 @@ dcClient.on('interactionCreate', async interaction => {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (interaction.isUserContextMenuCommand()) {
|
||||||
|
switch (interaction.commandName) {
|
||||||
|
case "Lookup Extension":
|
||||||
|
// Get the extension for the user if they have one
|
||||||
|
await interaction.deferReply({
|
||||||
|
ephemeral: true
|
||||||
|
});
|
||||||
|
lookupExtension(interaction.targetId, "uid").then((result) => {
|
||||||
|
if (result.status == "exists") {
|
||||||
|
// The user already has an extension, return an ephemeral message saying so
|
||||||
|
interaction.editReply({
|
||||||
|
content: `${interaction.targetUser} has extension \`${result.result.fetchExtension.user.extension}\``,
|
||||||
|
ephemeral: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
// The user doesn't have an extension, create one
|
||||||
|
sendLog(`${colors.red("[ERROR]")} ${error}`)
|
||||||
|
interaction.editReply({
|
||||||
|
content: "That user doesn't have an extension!",
|
||||||
|
ephemeral: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case "Create Extension": // Create an extension for the user, if they have one, return the extension info
|
||||||
|
await interaction.deferReply({
|
||||||
|
ephemeral: true
|
||||||
|
});
|
||||||
|
lookupExtension(interaction.targetId, "uid").then((result) => {
|
||||||
|
if (result.status == "exists") {
|
||||||
|
// The user already has an extension, return an ephemeral message saying so
|
||||||
|
interaction.editReply({
|
||||||
|
content: "",
|
||||||
|
embeds: [{
|
||||||
|
"title": "Extension Info",
|
||||||
|
"color": 0x00ff00,
|
||||||
|
"description": `The SIP server is \`${config.freepbx.server}\``,
|
||||||
|
"fields": [{
|
||||||
|
"name": "Extension/Username",
|
||||||
|
"value": result.result.fetchExtension.user.extension
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Password",
|
||||||
|
"value": `||${result.result.fetchExtension.user.extPassword}||`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
// The user doesn't have an extension, create one
|
||||||
|
findNextExtension().then((result) => {
|
||||||
|
if (result.status == "success") {
|
||||||
|
let uid = interaction.targetId;
|
||||||
|
let ext = result.result;
|
||||||
|
let name = interaction.targetUser.displayName;
|
||||||
|
interaction.editReply(`Creating extension ${ext}...`)
|
||||||
|
// Create the extension
|
||||||
|
createExtension(ext, name, uid).then((result) => {
|
||||||
|
if (result.status == "created") {
|
||||||
|
interaction.editReply({
|
||||||
|
content: "",
|
||||||
|
embeds: [{
|
||||||
|
"title": "Extension Created!",
|
||||||
|
"color": 0x00ff00,
|
||||||
|
"description": `The SIP server is \`${config.freepbx.server}\``,
|
||||||
|
"fields": [{
|
||||||
|
"name": "Extension/Username",
|
||||||
|
"value": ext
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Password",
|
||||||
|
"value": `||${result.result.fetchExtension.user.extPassword}||`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
sendLog(`${colors.cyan("[INFO]")} Admin ${interaction.user.displayName} Created extension ${ext} for user ${interaction.targetUser.displayName} (${interaction.targetId})`);
|
||||||
|
// Add the role to 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.targetMember.roles.add(role);
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
interaction.editReply(`Error creating extension: ${error}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
interaction.editReply(`Error finding next available extension: ${error}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case "Delete Extension": // Delete the users extension, if they have one
|
||||||
|
await interaction.deferReply({
|
||||||
|
ephemeral: true
|
||||||
|
});
|
||||||
|
lookupExtension(interaction.targetId, "uid").then((result) => {
|
||||||
|
if (result.status == "exists") {
|
||||||
|
// The user has an extension, delete it
|
||||||
|
deleteExtension(result.result.fetchExtension.user.extension).then((delResult) => {
|
||||||
|
if (delResult.status == "deleted") {
|
||||||
|
interaction.editReply({
|
||||||
|
content: "Extension Deleted!",
|
||||||
|
ephemeral: true
|
||||||
|
});
|
||||||
|
sendLog(`${colors.green("[INFO]")} ${interaction.user.displayName} deleted ${interaction.targetUser.username}'s extension ${result.result.fetchExtension.user.extension}`)
|
||||||
|
// 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.targetMember.roles.remove(role);
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
// sendLog full error with line number
|
||||||
|
|
||||||
|
interaction.editReply(`Error deleting extension: ${error}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
// The user doesn't have an extension, return an ephemeral message saying so
|
||||||
|
interaction.editReply({
|
||||||
|
content: "That user doesn't have an extension!",
|
||||||
|
ephemeral: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue