67 lines
2.5 KiB
JavaScript
67 lines
2.5 KiB
JavaScript
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());
|
|
}
|
|
} |