import { DebugBuilder } from "../../modules/debugger.mjs"; import { SlashCommandBuilder } from "discord.js"; import { requestBotLeaveServer, getSocketIdByNuid, } from "../../modules/socketServerWrappers.mjs"; import { checkOnlineBotsInGuild } from "../modules/wrappers.mjs"; const log = new DebugBuilder("server", "discordBot.command.leave"); // 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) => ({ name: choice.name, value: choice.nuid })); log.DEBUG(focusedValue, choices, filtered); try { await interaction.respond(filtered); } catch (e) { log.WARN("Autocomplete interaction failure", e); } } /** * 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 { const selectedNode = interaction.options.getString("bot"); const socket = await getSocketIdByNuid(nodeIo, selectedNode); if (!socket) { await interaction.editReply({ content: `Bot '${selectedNode}' not found or not connected.`, ephemeral: true, }); return; } await requestBotLeaveServer(socket, interaction.guild.id); await interaction.editReply( `Ok <@${interaction.member.id}>, the bot is leaving shortly.`, ); } catch (err) { log.ERROR("Failed to disconnect bot:", err); await interaction.editReply({ content: `An error occurred: ${err.message}`, ephemeral: true, }); } }