diff --git a/commands/global/amp.js b/commands/global/amp.js index 0a8387f..b271996 100644 --- a/commands/global/amp.js +++ b/commands/global/amp.js @@ -1,5 +1,5 @@ const { SlashCommandBuilder, EmbedBuilder, inlineCode } = require('discord.js') -let dotenv = require('dotenv') +const dotenv = require('dotenv') dotenv.config() const appDir = require('path').dirname(require.main.filename) @@ -20,11 +20,55 @@ module.exports = { .addSubcommand(subcommand => subcommand.setName('list').setDescription('Liste toutes les instances disponibles.')) .addSubcommand(subcommand => subcommand.setName('manage').setDescription('Gérer une instance.') - .addStringOption(option => option.setName('name').setDescription("Nom de l'instance").setRequired(true))) + .addStringOption(option => option.setName('instance').setDescription("Nom de l'instance").setRequired(true).setAutocomplete(true))) - .addSubcommand(subcommand => subcommand.setName('restart').setDescription('Redémarre une instance.') - .addStringOption(option => option.setName('name').setDescription("Nom de l'instance").setRequired(true)))), + /*.addSubcommand(subcommand => subcommand.setName('restart').setDescription('Redémarre une instance.') + .addStringOption(option => option.setName('name').setDescription("Nom de l'instance").setRequired(true)))*/), + async autocompleteRun(interaction) { + let query = interaction.options.getString('instance', true) + + // Check if the SessionID is still valid + let sessionID = dotenv.config().parsed.AMP_SESSIONID + let session = await API.CheckSession(sessionID) + if (session.status === 'fail') { + if (process.env.AMP_REMEMBER_TOKEN) { + // Refresh the SessionID if the RememberMeToken is available + let details = { + username: process.env.AMP_USERNAME, + password: '', + token: process.env.AMP_REMEMBER_TOKEN, + rememberMe: true + } + let result = await API.Core.Login(details) + console.log(result) + if (result.status === 'success') sessionID = result.data.sessionID + else if (result.status === 'fail') return interaction.respond([]) + else if (result.status === 'error') return interaction.respond([]) + } + else { + // If no RememberMeToken is available, ask to login + return await interaction.followUp(`Tu dois te connecter avant d'effectuer une autre commande !`) + } + } + else if (session.status === 'error') return interaction.respond([]) + + let choices = [] + let result = await API.ADSModule.GetInstances(sessionID) + if (result.status === 'success') { + let hosts = result.data.result + hosts.forEach(host => { + let instances = host.AvailableInstances + instances.forEach(instance => { + if (instance.FriendlyName.includes(query)) choices.push({ name: `${host.FriendlyName} - ${instance.FriendlyName}`, value: instance.InstanceID }) + }) + }) + } + else if (result.status === 'fail') return interaction.respond([]) + else if (result.status === 'error') return interaction.respond([]) + + return interaction.respond(choices) + }, async execute(interaction) { // Let the user login if (interaction.options.getSubcommand() == 'login') { @@ -47,8 +91,8 @@ module.exports = { // Check if the SessionID is still valid let sessionID = dotenv.config().parsed.AMP_SESSIONID - let session = await API.CheckSession(sessionID) + if (session.status === 'fail') { console.log(session) if (process.env.AMP_REMEMBER_TOKEN) { @@ -83,17 +127,13 @@ module.exports = { host.AvailableInstances.forEach(instance => { fields.push({ name: instance.FriendlyName, - value: `**ID:** ${instance.InstanceID} - **Running:** ${instance.Running} - **IP:** ${instance.IP} - **Port:** ${instance.Port} - **Module:** ${instance.Module}`, + value: `**Running:** ${instance.Running}\n**Port:** ${instance.Port}\n**Module:** ${instance.Module}`, inline: true }) }) let embed = new EmbedBuilder() - .setTitle('Instances') - .setDescription(`Liste des instances de l'hôte **${host.FriendlyName}** :`) + .setTitle(host.FriendlyName) + .setDescription(`Liste des ${host.AvailableInstances.length} instances :`) .setColor(interaction.guild.members.me.displayColor) .setTimestamp() .setFields(fields) @@ -104,10 +144,17 @@ module.exports = { else if (result.status === 'error') return await interaction.followUp(errorMsg(result.data)) } else if (interaction.options.getSubcommand() == 'manage') { - let query = interaction.options.getString('name') - let result = await API.ADSModule.ManageInstance(sessionID, query) + let instanceID = interaction.options.getString('instance', true) + let result = await API.ADSModule.ManageInstance(sessionID, instanceID) - if (result.status === 'success') return await interaction.followUp(`Ok !`) + if (result.status === 'success') { + let server = await API.ADSModule.Servers(sessionID, instanceID) + console.log(server) + + if (server.status === 'success') return await interaction.followUp(`Ok !`) + else if (server.status === 'fail') return await interaction.followUp(failMsg(server.data)) + else if (server.status === 'error') return await interaction.followUp(errorMsg(server.data)) + } else if (result.status === 'fail') return await interaction.followUp(failMsg(result.data)) else if (result.status === 'error') return await interaction.followUp(errorMsg(result.data)) } diff --git a/utilsAMP/ADSModule/GetInstances.js b/utilsAMP/ADSModule/GetInstances.js index 9e50486..1cecc0a 100644 --- a/utilsAMP/ADSModule/GetInstances.js +++ b/utilsAMP/ADSModule/GetInstances.js @@ -4,7 +4,6 @@ module.exports = (async (SESSIONID) => { return await axios.post(`${process.env.AMP_HOST}/API/${__filename.split('utilsAMP/')[1].split('.js')[0]}`, { SESSIONID }).then(response => { - console.log(response.data) if (!response.data.result) return { status: 'fail', data: response.data } return { status: 'success', data: response.data } }).catch(error => { diff --git a/utilsAMP/ADSModule/ManageInstance.js b/utilsAMP/ADSModule/ManageInstance.js index 3937389..65bb5e0 100644 --- a/utilsAMP/ADSModule/ManageInstance.js +++ b/utilsAMP/ADSModule/ManageInstance.js @@ -1,35 +1,16 @@ const axios = require('axios') -module.exports = (async (SESSIONID, FriendlyName) => { - require('dotenv').config() - +module.exports = (async (SESSIONID, InstanceId) => { return await axios.post(`${process.env.AMP_HOST}/API/${__filename.split('utilsAMP/')[1].split('.js')[0]}`, { - SESSIONID - }).then(response => { - console.log(response.data) - - let instance_id = response.data.result[0].AvailableInstances.forEach(element => { - if (element.FriendlyName == FriendlyName) return element.InstanceID - }) - - //if (!response.data.success) return { status: 'fail', data: response.data } - return { status: 'success', data: { instance_id } } - }).catch(error => { - console.error(error) - return { status: 'error', data: error } - }) - - if (result.status === 'success') return await axios.post(`${url}/ADSModule/ManageInstance`, { SESSIONID, - InstanceId: result.data.instance_id + InstanceId }).then(response => { console.log(response.data) - //if (!response.data.success) return { status: 'fail', data: response.data } + if (!response.data.result) return { status: 'fail', data: response.data } return { status: 'success', data: response.data } }).catch(error => { console.error(error) return { status: 'error', data: error } }) - else return result }) \ No newline at end of file diff --git a/utilsAMP/ADSModule/RestartInstance.js b/utilsAMP/ADSModule/RestartInstance.js index 8c525fd..22ddd41 100644 --- a/utilsAMP/ADSModule/RestartInstance.js +++ b/utilsAMP/ADSModule/RestartInstance.js @@ -1,8 +1,6 @@ const axios = require('axios') module.exports = (async (SESSIONID, InstanceName) => { - require('dotenv').config() - return await axios.post(`${process.env.AMP_HOST}/API/${__filename.split('utilsAMP/')[1].split('.js')[0]}`, { SESSIONID, InstanceName diff --git a/utilsAMP/ADSModule/Servers.js b/utilsAMP/ADSModule/Servers.js new file mode 100644 index 0000000..a6cbd72 --- /dev/null +++ b/utilsAMP/ADSModule/Servers.js @@ -0,0 +1,17 @@ +const axios = require('axios') + +module.exports = (async (SESSIONID, InstanceId) => { + return await axios.get(`${process.env.AMP_HOST}/API/${__filename.split('utilsAMP/')[1].split('.js')[0]}`, { + SESSIONID, + InstanceId + }).then(response => { + console.log(response) + console.log(response.data) + + if (!response.data.result) return { status: 'fail', data: response.data } + return { status: 'success', data: response.data } + }).catch(error => { + console.error(error) + return { status: 'error', data: error } + }) +}) \ No newline at end of file diff --git a/utilsAMP/Core/Login.js b/utilsAMP/Core/Login.js index 8fb1a11..e25e201 100644 --- a/utilsAMP/Core/Login.js +++ b/utilsAMP/Core/Login.js @@ -4,8 +4,6 @@ const appDir = require('path').dirname(require.main.filename) const writeEnv = require(appDir + '/utils/writeEnv') module.exports = (async (details) => { - require('dotenv').config() - console.log(details) return await axios.post(`${process.env.AMP_HOST}/API/${__filename.split('utilsAMP/')[1].split('.js')[0]}`, details ).then(response => {