const { ButtonBuilder, ButtonStyle, SlashCommandBuilder, ActionRowBuilder } = require('discord.js'); const config = require('../../config.json'); if (!config.proxmoxUser || !config.proxmoxPass || !config.proxmoxHostname) { console.error('Proxmox credentials not found in config.json. Exiting.'); process.exit(1); } // eslint-disable-next-line no-undef proxmox = require('proxmox')(config.proxmoxUser, config.proxmoxPass, config.proxmoxHostname); module.exports = { cooldowns: 60, data: new SlashCommandBuilder() .setName('start-mc') .setDescription('Starts the minecraft server machine.'), async execute(interaction) { const confirm = new ButtonBuilder() .setCustomId('confirm') .setLabel('Confirm') .setStyle(ButtonStyle.Primary); const cancel = new ButtonBuilder() .setCustomId('cancel') .setLabel('Cancel') .setStyle(ButtonStyle.Danger); const row = new ActionRowBuilder() .addComponents(cancel, confirm); const response = await interaction.reply({ content: 'Are you sure you want to start the Minecraft server?', components: [row], }); const collectorFilter = i => i.user.id === interaction.user.id; try { const confirmation = await response.awaitMessageComponent({ filter: collectorFilter, time: 30_000 }); if (confirmation.customId === 'confirm') { // eslint-disable-next-line no-undef proxmox.qemu.start('pve', '102', function(err) { if (err) { confirmation.update('Error starting the Minecraft server: ' + err); } else { const linkButton = new ButtonBuilder() .setStyle(ButtonStyle.Link) .setLabel('Web Interface') .setURL('https://mc.louisgallet.fr'); const linkRow = new ActionRowBuilder() .addComponents(linkButton); confirmation.update({ content: 'Minecraft server started successfully. Please wait a few minutes for it to boot.', components: [linkRow] }); } }); } else if (confirmation.customId === 'cancel') { await confirmation.update({ content: 'Minecraft server start cancelled.', components: [] }); } } catch (e) { // eslint-disable-next-line no-undef await confirmation.update({ content: 'You took too long to respond.', components: [] }); } }, };