import { DebugBuilder } from "../../modules/debugger.mjs"; const log = new DebugBuilder("server", "discordBot.command.leave"); import { SlashCommandBuilder } from 'discord.js'; import { requestBotLeaveServer, getSocketIdByNuid } from '../../modules/socketServerWrappers.mjs'; import { checkOnlineBotsInGuild } from '../modules/wrappers.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 = (await checkOnlineBotsInGuild(nodeIo, interaction.guild.id)); log.DEBUG(choices); const filtered = choices.filter(choice => choice.name.startsWith(focusedValue)).map(choice => choice = {name: choice.name, value: choice.nuid}); log.DEBUG(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); log.DEBUG("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()); } }