From d18ffd4c11bb3c042e0b9b07ce63a86263ada6f0 Mon Sep 17 00:00:00 2001 From: Logan Cusano Date: Sun, 11 Aug 2024 18:41:42 -0400 Subject: [PATCH] Update Presence Manager #15 - Added convert functions to convert strings to activities and statuses - Updated status and activity to use the discord.js consts from convert functions - Reset default will get and use the default presence from the DB - Reset default will set default presence in DB if not set - Reset default will now use the same `this.setPresence()` function to limit variation --- discordBot/modules/presenceManager.mjs | 77 ++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/discordBot/modules/presenceManager.mjs b/discordBot/modules/presenceManager.mjs index 9171c85..183f550 100644 --- a/discordBot/modules/presenceManager.mjs +++ b/discordBot/modules/presenceManager.mjs @@ -1,4 +1,5 @@ -import { getConfig } from "./configHandler.mjs"; +import { getConfig, setConfig } from "../../modules/mongo-wrappers/mongoConfigWrappers.mjs"; +import { ActivityType, PresenceUpdateStatus } from 'discord.js'; class PresenceManager { /** @@ -7,10 +8,6 @@ class PresenceManager { */ constructor(client) { this.client = client; - this.defaultStatus = "online"; - this.defaultActivityType = "LISTENING"; - this.defaultActivityName = "for your commands"; - this.defaultUrl = null; } /** @@ -20,9 +17,9 @@ class PresenceManager { * @param {string} activityName - The name of the activity. * @param {string} [url=null] - The URL for STREAMING activity type (optional). */ - setPresence(status, activityType, activityName, url = null) { + async setPresence(status, activityType, activityName, url = null) { const activityOptions = { - type: activityType.toUpperCase(), + type: this.convertActivityType(activityType), name: activityName, }; @@ -30,8 +27,8 @@ class PresenceManager { activityOptions.url = url; } - this.client.user.setPresence({ - status: status, + await this.client.user.setPresence({ + status: this.convertStatus(status), activities: [activityOptions], }); } @@ -39,13 +36,69 @@ class PresenceManager { /** * Reset the bot's presence to the default state. */ - resetToDefault() { - const defaultPresence = getConfig("presence"); + async resetToDefault() { + let defaultPresence = await getConfig("presence"); + + if (!defaultPresence) { + defaultPresence = { + status: 'idle', + activities: [{ + name: 'your commands', + type: 'LISTENING' + }] + }; + + await setConfig('presence', defaultPresence); + } + console.log("Default Presence:", defaultPresence); // Update your bot's presence using this configuration - this.client.user.setPresence(defaultPresence); + await this.setPresence(defaultPresence.status, defaultPresence.activities[0].type, defaultPresence.activities[0].name); + } + + /** + * Convert a string activity type to the corresponding ActivityType enum. + * @param {string} activityType - The activity type string. + * @returns {ActivityType} - The corresponding ActivityType enum. + */ + convertActivityType(activityType) { + switch (activityType.toUpperCase()) { + case 'PLAYING': + return ActivityType.Playing; + case 'STREAMING': + return ActivityType.Streaming; + case 'LISTENING': + return ActivityType.Listening; + case 'WATCHING': + return ActivityType.Watching; + case 'COMPETING': + return ActivityType.Competing; + default: + throw new Error('Invalid activity type'); + } + } + + /** + * Convert a string status to the corresponding PresenceUpdateStatus enum. + * @param {string} status - The status string. + * @returns {PresenceUpdateStatus} - The corresponding PresenceUpdateStatus enum. + */ + convertStatus(status) { + switch (status.toLowerCase()) { + case 'online': + return PresenceUpdateStatus.Online; + case 'idle': + return PresenceUpdateStatus.Idle; + case 'dnd': + return PresenceUpdateStatus.DoNotDisturb; + case 'invisible': + return PresenceUpdateStatus.Invisible; + default: + throw new Error('Invalid status'); + } } } + export default PresenceManager;