From 5757c51fa3158fe53b8368f34d74a740ff4d7565 Mon Sep 17 00:00:00 2001 From: Logan Cusano Date: Sat, 3 Jun 2023 15:40:48 -0400 Subject: [PATCH] Added new utils - isJsonString - This can be used to check if a string is valid json before parsing it - getMembersInRole - This can be used to check online/offline/all members in a role - (unused) SanitizePresetName --- Server/utilities/utils.js | 58 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/Server/utilities/utils.js b/Server/utilities/utils.js index 640c3fe..8495261 100644 --- a/Server/utilities/utils.js +++ b/Server/utilities/utils.js @@ -1,3 +1,7 @@ +// Debug +const { DebugBuilder } = require("../utilities/debugBuilder"); +const log = new DebugBuilder("server", "utils"); + // Convert a JSON object to a buffer for the DB exports.JsonToBuffer = (jsonObject) => { return Buffer.from(JSON.stringify(jsonObject)) @@ -8,6 +12,43 @@ exports.BufferToJson = (buffer) => { return JSON.parse(buffer.toString()); } +/** + * **DISUSED** + * + * @param {string} presetName The present name to sanitize + * @returns {string} The sanitized preset name to be used elsewhere + */ +exports.SanitizePresetName = (presetName) => { + return String(presetName).toLowerCase().replace(/[\W_]+/g,"-") +} + +/** + * Get online, offline and total members in a guild. Optionally a group can be specified to get members' statuses. + * + * @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" ) => { + log.DEBUG("Fetching all members"); + await interaction.guild.members.fetch() //cache all members in the server + const role = await interaction.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); + const allMembers = await role.members; + + log.VERBOSE("All members: ", allMembers, onlineMembers, offlineMembers) + + return { + 'online': onlineMembers, + 'offline': offlineMembers, + 'all': allMembers + } +} + /** Find a key in an object by its value * * @param {*} object The object to search @@ -16,4 +57,19 @@ exports.BufferToJson = (buffer) => { */ exports.getKeyByArrayValue = (object, value) => { return Object.keys(object).find(key => object[key].includes(value)); - } \ No newline at end of file + } + +/** + * Check to see if the input is a valid JSON string + * + * @param {*} str The string to check for valud JSON + * @returns {true|false} + */ +exports.isJsonString = (str) => { + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; +} \ No newline at end of file