import { SlashCommandBuilder } from 'discord.js'; import { checkIfNodeIsConnectedToVC, requestBotLeaveServer, getNodeDiscordUsername, getSocketIdByNuid } from '../../modules/socketServerWrappers.mjs'; // Exporting data property export const data = new SlashCommandBuilder() .setName('leave') .setDescription('Disconnect a bot from the server') .addStringOption(system => system.setName('bot') .setDescription('The bot you would like to disconnect') .setRequired(true) .setAutocomplete(true));; // Exporting other properties export const example = "/leave *{Bot Name}*"; export const deferInitialReply = true; /** * Function to give the user auto-reply suggestions * @param {any} nodeIo The nodeIO server for manipulation of sockets * @param {any} interaction The interaction object */ export async function autocomplete(nodeIo, interaction) { const focusedValue = interaction.options.getFocused(); const choices = []; const openSockets = [...await nodeIo.allSockets()]; await Promise.all(openSockets.map(async openSocket => { openSocket = await nodeIo.sockets.sockets.get(openSocket); const connected = await checkIfNodeIsConnectedToVC(nodeIo, interaction.guild.id, openSocket.node.nuid); console.log("Connected:", connected); if (connected) { const username = await getNodeDiscordUsername(openSocket, interaction.guild.id); choices.push({ name: username, value: openSocket.node.nuid }); } })); const filtered = choices.filter(choice => choice.name.startsWith(focusedValue)); console.log(focusedValue, choices, filtered); await interaction.respond(filtered); } /** * The function to run when the command is called by a discord user * @param {any} nodeIo The nodeIO server for manipulation of sockets * @param {any} interaction The interaction object */ export async function execute(nodeIo, interaction) { try { // Get the requested bot const selectedNode = interaction.options.getString('bot'); const socket = await getSocketIdByNuid(nodeIo, selectedNode); console.log("All open sockets:", socket, selectedNode); await requestBotLeaveServer(socket, interaction.guild.id); //await interaction.reply(`**Online Sockets: '${sockets}'**`); await interaction.editReply(`Ok <@${interaction.member.id}>, the bot is leaving shortly`); //await interaction.channel.send('**Pong.**'); } catch (err) { console.error(err); // await interaction.reply(err.toString()); } }