Working on #9
- Can join and leave from voice channels - Will check to make sure that the bot is in a given system or no system before joining - Cleaned up the socket client with wrappers - Added a new module to handle subprocesses for the client - Beginning workings on OP25 handler - Added OP25 config object generator with config exporter
This commit is contained in:
114
client/discordAudioBot/dabWrappers.mjs
Normal file
114
client/discordAudioBot/dabWrappers.mjs
Normal file
@@ -0,0 +1,114 @@
|
||||
import { connectToChannel, checkIfConnectedToVC, initDiscordBotClient, getVoiceChannelFromID, getVoiceConnectionFromGuild } from './dab.mjs';
|
||||
import { openOP25, closeOP25 } from '../op25Handler/op25Handler.mjs';
|
||||
|
||||
let activeDiscordClient = undefined;
|
||||
const activeDiscordVoiceConnections = {};
|
||||
|
||||
/**
|
||||
* Join the requested server VC and listen to the requested system
|
||||
* @param {object} joinData The object containing all the information to join the server
|
||||
*/
|
||||
export const joinDiscordVC = async (joinData) => {
|
||||
console.log("Join requested: ", joinData)
|
||||
const connection = await new Promise((res) => {
|
||||
// Check if a client already exists
|
||||
if (!activeDiscordClient) {
|
||||
// Open a new client and join the requested channel with the requested ID
|
||||
initDiscordBotClient(joinData.clientID, joinData.system, client => {
|
||||
// Open an instance of OP25
|
||||
openOP25(joinData.system);
|
||||
|
||||
getVoiceChannelFromID(client, joinData.channelID).then(vc => {
|
||||
// Add the client object to the IO instance
|
||||
activeDiscordClient = client;
|
||||
const connection = connectToChannel(vc);
|
||||
activeDiscordVoiceConnections[vc.guild.id] = connection;
|
||||
console.log("Bot Connected to VC");
|
||||
res(connection);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// Join the requested channel with the requested ID
|
||||
getVoiceChannelFromID(activeDiscordClient, joinData.channelID).then(vc => {
|
||||
// Add the client object to the IO instance
|
||||
const connection = connectToChannel(vc);
|
||||
activeDiscordVoiceConnections[vc.guild.id] = connection;
|
||||
console.log("Bot Connected to VC");
|
||||
res(connection);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return connection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Leave VC on the requested server
|
||||
* @param {string} guildId The guild ID to disconnect from VC
|
||||
*/
|
||||
export const leaveDiscordVC = async (guildId) => {
|
||||
console.log("Leave requested");
|
||||
if (await checkIfConnectedToVC(guildId)) {
|
||||
const connection = await getVoiceConnectionFromGuild(guildId);
|
||||
if (connection) {
|
||||
console.log("There is an open VC connection, closing it now");
|
||||
// Destroy the open VC connection
|
||||
connection.destroy();
|
||||
|
||||
// Remove the connection from the object
|
||||
delete activeDiscordVoiceConnections[guildId];
|
||||
|
||||
// Check if this was the last open VC connection
|
||||
if (Object.keys(activeDiscordVoiceConnections).length == 0) {
|
||||
console.log("No more open VC connections, closing the client-side discord client and OP25")
|
||||
// Close the active client if there are no open VCs after this one
|
||||
activeDiscordClient.destroy();
|
||||
activeDiscordClient = undefined;
|
||||
|
||||
// Close OP25
|
||||
await closeOP25();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the bot is connected to a discord VC in the given server
|
||||
* @param {string} guildId The guild id to check the connection status in
|
||||
* @returns {boolean} If the node is connected to VC in the given guild
|
||||
*/
|
||||
export const checkIfDiscordVCConnected = async (guildId) => {
|
||||
console.log("Requested status check");
|
||||
if (await checkIfConnectedToVC(guildId)) {
|
||||
console.log("There is an open VC connection");
|
||||
return (true);
|
||||
} else {
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the username of the bot in a given guild
|
||||
* (there may be a server nickname given to the bot in a certain guild)
|
||||
* @param {string} guildId The guild id to check the connection status in
|
||||
* @returns {string} The username of the bot in the given guild's CV
|
||||
*/
|
||||
export const getDiscordUsername = async (guildId) => {
|
||||
console.log("Requested username");
|
||||
if (activeDiscordClient) return (activeDiscordClient.user.username);
|
||||
else return (undefined);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if there is an open discord client
|
||||
* @returns {boolean} If the client is open or not
|
||||
*/
|
||||
export const checkIfClientIsOpen = async () => {
|
||||
if (activeDiscordClient) {
|
||||
return (true);
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
Reference in New Issue
Block a user