diff --git a/src/Bot.ts b/src/Bot.ts index fcd6565..be937a1 100644 --- a/src/Bot.ts +++ b/src/Bot.ts @@ -132,7 +132,7 @@ export class Bot extends EventEmitter { const helpMsg: Command = new HelpMessage(this.commands, this.messages.help, this.name); this.commands.add(helpMsg); } - Object.freeze(this.commands.list); + this.commands.freezeList(); process.stdout.write("Connecting to Discord... "); this.client.login(this.token); this.client.on("ready", async () => { @@ -248,11 +248,15 @@ export class Bot extends EventEmitter { process.stdout.write("Registering commands... "); await axios.put( `https://discord.com/api/v8/applications/${this.applicationId}/commands`, - this.commands.list.filter((c) => !Array.isArray(c.guilds) && c.slash).map((c) => c.toCommandObject()), + this.commands + .getList() + .filter((c) => !Array.isArray(c.guilds) && c.slash) + .map((c) => c.toCommandObject()), { headers: { Authorization: `Bot ${this.token}` } } ); const guilds: any = {}; - await this.commands.list + await this.commands + .getList() .filter((c) => Array.isArray(c.guilds) && c.guilds.length > 0) .map((c) => { c.guilds?.map(async (g) => { diff --git a/src/CommandManager.ts b/src/CommandManager.ts index 685e6ec..4728e9d 100644 --- a/src/CommandManager.ts +++ b/src/CommandManager.ts @@ -12,7 +12,7 @@ export class CommandManager { * List of commands registered in the manager * @type {Array} {@link Command} */ - public readonly list: Command[]; + private readonly list: Command[]; /** * Prefix used as a way to trigger the bot using messages * @type {string} @@ -56,6 +56,15 @@ export class CommandManager { return command; } + /** + * Get list (array) of all {@link Command}s registered in a manager + * @returns {Command[]} Array of {@link Command}s registered in a manager + */ + getList(): Command[] { + const list = [...this.list]; + return list; + } + /** * Adds the given {@link Command} to the instance manager with initial processing * @param {Command} command - {@link Command} instance object @@ -203,6 +212,13 @@ export class CommandManager { return null; } + freezeList(): void { + if (!Object.isFrozen(this.list)) { + Object.freeze(this.list); + } + return; + } + private findPhraseOccurrence(phrase?: string): PhraseOccurrenceData | null { let returnValue: PhraseOccurrenceData | null = null; this.list.map((c) => { diff --git a/src/Help.ts b/src/Help.ts index b3c666f..47faaf6 100644 --- a/src/Help.ts +++ b/src/Help.ts @@ -61,7 +61,7 @@ export class HelpMessage extends Command { helpMsg.setTitle(params.title); helpMsg.setDescription(params.bottomText); - cmdManager.list.map((c) => { + cmdManager.getList().map((c) => { if ( c.visible && ((Array.isArray(c.guilds) && c.guilds.length > 0 && c.guilds.find((g) => i?.guild?.id === g)) || !Array.isArray(c.guilds) || c.guilds.length === 0)