From 6a4021d5ae7b4c2ee7cf5a392f04744a939369bb Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Sat, 16 Dec 2023 01:06:19 -0500 Subject: [PATCH] Hot reload code (not finished) --- config/prefixes.yml | 6 +++-- config/services.yml | 2 +- src/commands/CommandHandler.ts | 4 +-- src/commands/index.ts | 2 ++ src/index.ts | 45 ++++++++++++++++++++++++++++++---- src/services/console/index.ts | 2 +- src/services/index.ts | 4 +++ 7 files changed, 54 insertions(+), 11 deletions(-) diff --git a/config/prefixes.yml b/config/prefixes.yml index 7ef975a..f5a4b56 100644 --- a/config/prefixes.yml +++ b/config/prefixes.yml @@ -1,5 +1,7 @@ prefixes: - - id: "**" + - id: "*" spaced: false - - id: cdebug + - id: cosmic spaced: true + - id: c + spaced: false diff --git a/config/services.yml b/config/services.yml index df146af..9331147 100644 --- a/config/services.yml +++ b/config/services.yml @@ -1,5 +1,5 @@ debug: true enableConsole: true -enableMPP: true +enableMPP: false enableDiscord: false enableSwitchChat: false diff --git a/src/commands/CommandHandler.ts b/src/commands/CommandHandler.ts index 0412235..ca760f8 100644 --- a/src/commands/CommandHandler.ts +++ b/src/commands/CommandHandler.ts @@ -46,7 +46,7 @@ export type BaseCommandMessage = Omit< export class CommandHandler { public static commandGroups = new Array(); - public static prefixes = new Array(); + public static prefixes = new Set(); public static logger = new Logger("Command Handler"); @@ -172,5 +172,5 @@ export class CommandHandler { // Add prefixes for (const prefix of prefixConfig.prefixes) { - CommandHandler.prefixes.push(prefix); + CommandHandler.prefixes.add(prefix); } diff --git a/src/commands/index.ts b/src/commands/index.ts index c6ae3f2..e0389ef 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -50,3 +50,5 @@ export function loadCommands() { ]); CommandHandler.addCommandGroup(utility); } + +export { CommandHandler, CommandGroup }; diff --git a/src/index.ts b/src/index.ts index 0b53c51..7602751 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,47 @@ -import { loadCommands } from "./commands"; +import { loadCommands, CommandHandler, type CommandGroup } from "./commands"; import { loadRoleConfig } from "./permissions"; import { ServiceLoader } from "./services"; +import { ConsoleAgent } from "./services/console"; import { printStartupASCII } from "./util/ascii"; -printStartupASCII(); -loadRoleConfig(); -loadCommands(); -ServiceLoader.loadServices(); +declare global { + var loaded: boolean; + var serviceLoader: any; + var commandHandler: any; +} + +// Set on first run +globalThis.loaded ??= false; +globalThis.serviceLoader ??= ServiceLoader; +globalThis.commandHandler ??= CommandHandler; + +function load() { + printStartupASCII(); + loadRoleConfig(); + loadCommands(); + globalThis.serviceLoader.loadServices(); + + globalThis.loaded = true; +} + +// Check for hot reload +if (!globalThis.loaded) { + load(); + console.log("Command list:", globalThis.commandHandler.commandGroups); +} else { + console.log("Hot reload triggered..."); + // Set console prompt + globalThis.serviceLoader.agents.forEach(agent => { + if (agent.platform === "console") + (agent as ConsoleAgent).client.prompt(); + }); + + // Reload commands + globalThis.commandHandler.commandGroups = new Array(); + loadCommands(); + + console.log("Command list:", globalThis.commandHandler.commandGroups); +} export function scopedEval(code: string) { return eval(code); diff --git a/src/services/console/index.ts b/src/services/console/index.ts index d7492f5..dc136ed 100644 --- a/src/services/console/index.ts +++ b/src/services/console/index.ts @@ -37,7 +37,7 @@ export class ConsoleAgent extends ServiceAgent { public stop() { if (!this.started) return; this.started = false; - this.client.setPrompt(""); + this.client.close(); } protected bindEventListeners(): void { diff --git a/src/services/index.ts b/src/services/index.ts index 21ebd45..e490cb8 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -50,6 +50,10 @@ export class ServiceLoader { this.agents.push(agent); } + public static getAgent(index: number) { + return this.agents[index]; + } + public static loadServices() { if (config.enableMPP) { for (const uri of Object.keys(mppConfig.agents)) {