58 lines
2.2 KiB
JavaScript
58 lines
2.2 KiB
JavaScript
// Modules
|
|
const { SlashCommandBuilder } = require('discord.js');
|
|
const { DebugBuilder } = require("../utilities/debugBuilder");
|
|
const { filterAutocompleteValues, filterPresetsAvailable } = require("../utilities/utils");
|
|
const { getOnlineNodes, getAllConnections } = require("../utilities/mysqlHandler");
|
|
const { joinServerWrapper } = require("../controllers/adminController");
|
|
|
|
// Global Vars
|
|
const log = new DebugBuilder("server", "join");
|
|
|
|
module.exports = {
|
|
data: new SlashCommandBuilder()
|
|
.setName('join')
|
|
.setDescription('Join the channel you are in with the preset you choose')
|
|
.addStringOption(option =>
|
|
option.setName("preset")
|
|
.setDescription("The preset you would like to listen to")
|
|
.setAutocomplete(true)
|
|
.setRequired(true)),
|
|
example: "join",
|
|
isPrivileged: false,
|
|
requiresTokens: false,
|
|
defaultTokenUsage: 0,
|
|
deferInitialReply: true,
|
|
async autocomplete(interaction) {
|
|
const nodeObjects = await new Promise((recordResolve, recordReject) => {
|
|
getOnlineNodes((nodeRows) => {
|
|
recordResolve(nodeRows);
|
|
});
|
|
});
|
|
const options = await filterPresetsAvailable(nodeObjects);
|
|
|
|
// Filter the results to what the user is entering
|
|
filterAutocompleteValues(interaction, options);
|
|
|
|
},
|
|
async execute(interaction) {
|
|
try{
|
|
const guildId = interaction.guild.id;
|
|
const presetName = interaction.options.getString('preset');
|
|
const channelId = interaction.member.voice.channel.id;
|
|
if (!channelId) return interaction.editReply(`You need to be in a voice channel, ${interaction.user}`);
|
|
log.DEBUG(`Join requested by: ${interaction.user.username}, to: '${presetName}', in channel: ${channelId} / ${guildId}`);
|
|
|
|
const connections = await getAllConnections();
|
|
|
|
log.DEBUG("Current Connections: ", connections);
|
|
|
|
const selectedClientId = await joinServerWrapper(presetName, channelId, connections);
|
|
|
|
await interaction.editReply(`Ok, ${interaction.member}. **${selectedClientId.name}** is joining your channel.`);
|
|
//await interaction.channel.send('**Pong.**'); // This will send a message to the channel of the interaction outside of the initial reply
|
|
}catch(err){
|
|
log.ERROR(err)
|
|
//await interaction.reply(err.toString());
|
|
}
|
|
}
|
|
} |