Files
drb-server/discordBot/modules/presenceManager.mjs
Logan Cusano cf9f48dfa7
Some checks failed
Update Wiki from JSDoc / update-wiki (pull_request) Failing after 10s
Lint JavaScript/Node.js / lint-js (pull_request) Failing after 10s
DRB Tests / drb_mocha_tests (pull_request) Successful in 25s
Fix jsdoc bug
- Was importing class within the jsdoc
2024-08-17 17:56:25 -04:00

113 lines
3.1 KiB
JavaScript

import {
getConfig,
setConfig,
} from "../../modules/mongo-wrappers/mongoConfigWrappers.mjs";
import { ActivityType, PresenceUpdateStatus, Client } from "discord.js";
class PresenceManager {
/**
* Creates an instance of PresenceManager.
* @param {Client} client - The Discord client instance.
*/
constructor(client) {
this.client = client;
}
/**
* Set the bot's presence.
* @param {"online"|"idle"|"dnd"} status - The status of the bot (online, idle, dnd).
* @param {"PLAYING"|"STREAMING"|"LISTENING"|"WATCHING"|"COMPETING"} activityType - The type of activity.
* @param {string} activityName - The name of the activity.
* @param {string} [url=null] - The URL for STREAMING activity type (optional).
*/
async setPresence(status, activityType, activityName, url = null) {
const activityOptions = {
type: this.convertActivityType(activityType),
name: activityName,
};
if (activityType.toUpperCase() === "STREAMING" && url) {
activityOptions.url = url;
}
await this.client.user.setPresence({
status: this.convertStatus(status),
activities: [activityOptions],
});
}
/**
* Reset the bot's presence to the default state.
*/
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
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;