From 2260deee01a77be7db10a717c073f7b1e530a368 Mon Sep 17 00:00:00 2001 From: Logan Cusano Date: Fri, 4 Aug 2023 22:10:09 -0400 Subject: [PATCH] Added filter presets function to utils and code formatted --- Server/utilities/utils.js | 44 +++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/Server/utilities/utils.js b/Server/utilities/utils.js index 06aa75b..5dc3737 100644 --- a/Server/utilities/utils.js +++ b/Server/utilities/utils.js @@ -23,7 +23,7 @@ exports.BufferToJson = (buffer) => { * @returns {string} The sanitized preset name to be used elsewhere */ exports.SanitizePresetName = (presetName) => { - return String(presetName).toLowerCase().replace(/[\W_]+/g,"-") + return String(presetName).toLowerCase().replace(/[\W_]+/g, "-") } /** @@ -32,16 +32,16 @@ exports.SanitizePresetName = (presetName) => { * @param interaction Discord interaction object * @param param0.roleName {OPTIONAL} The role name to check the members in; Defaults to 'Bots' */ -exports.getMembersInRole = async (interaction, roleName = "Bots" ) => { +exports.getMembersInRole = async (interaction, roleName = "Bots") => { log.DEBUG("Fetching all members"); var guild = await interaction.client.guilds.fetch({ guild: interaction.guild.id, cache: false }); //cache all members in the server - await guild.members.fetch({cache: false}); - await guild.roles.fetch({cache: false}); + await guild.members.fetch({ cache: false }); + await guild.roles.fetch({ cache: false }); log.VERBOSE("Guild: ", guild); const role = await guild.roles.cache.find(role => role.name === roleName); //the role to check log.DEBUG("Role to check members from: ", role); log.DEBUG("Members of role: ", role.members); - + // This is not working, can't get the status of the users, rest of join is untested const onlineMembers = await role.members.filter(member => member.voice.channel !== null); const offlineMembers = await role.members.filter(member => member.voice.channel === null); @@ -50,8 +50,8 @@ exports.getMembersInRole = async (interaction, roleName = "Bots" ) => { log.VERBOSE("All members: ", allMembers, onlineMembers, offlineMembers) return { - 'online': onlineMembers, - 'offline': offlineMembers, + 'online': onlineMembers, + 'offline': offlineMembers, 'all': allMembers } } @@ -64,9 +64,9 @@ exports.getMembersInRole = async (interaction, roleName = "Bots" ) => { */ exports.getKeyByArrayValue = (object, value) => { if (typeof value == "string") return Object.keys(object).find(key => object[key].includes(value)); - const valueKey = Object.keys(value)[0]; + const valueKey = Object.keys(value)[0]; return Object.keys(object).find(key => (object[key][valueKey] == value[valueKey])); - } +} /** * Check to see if the input is a valid JSON string @@ -91,7 +91,7 @@ exports.isJsonString = (str) => { exports.getAllClientIds = () => { const jsonClientIds = JSON.parse(readFileSync(path.resolve(__dirname, '../clientIds.json'))); var clientObjects = []; - for (const jsonClientId of Object.keys(jsonClientIds)){ + for (const jsonClientId of Object.keys(jsonClientIds)) { clientObjects.push(new clientObject({ _discord_id: jsonClientId, _name: jsonClientIds[jsonClientId].name, @@ -110,7 +110,7 @@ exports.getAllClientIds = () => { exports.getClientObjectByClientID = (clientId) => { const clientObjects = this.getAllClientIds(); log.DEBUG("All client IDs: ", clientObjects); - for (const clientObject of clientObjects){ + for (const clientObject of clientObjects) { if (clientObject.clientId == clientId) { log.DEBUG("Found client ID from given ID: ", clientObject); return clientObject @@ -138,4 +138,26 @@ exports.filterAutocompleteValues = async (interaction, options) => { await interaction.respond( filtered.map(option => ({ name: option, value: option })), ); +} + +/** + * Filter an array of nodeObjects to get all unique presets within + * + * @param {Array} nodeObjects An array of nodeObjects to get the presets from + * @returns {Array} Presets available from given nodeObjects + */ +exports.filterPresetsAvailable = async (nodeObjects) => { + log.DEBUG("Node objects: ", nodeObjects); + var presetsAvailable = []; + for (const nodeObject of nodeObjects) { + log.DEBUG("Node object: ", nodeObject); + presetsAvailable.push.apply(presetsAvailable, nodeObject.presets); + } + + log.DEBUG("All Presets available: ", presetsAvailable); + + // Remove duplicates + presetsAvailable = [...new Set(presetsAvailable)]; + log.DEBUG("DeDuped Presets available: ", presetsAvailable); + return presetsAvailable; } \ No newline at end of file