aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/index.ts')
-rw-r--r--src/plugins/index.ts83
1 files changed, 55 insertions, 28 deletions
diff --git a/src/plugins/index.ts b/src/plugins/index.ts
index e03c588..44f1e83 100644
--- a/src/plugins/index.ts
+++ b/src/plugins/index.ts
@@ -1,4 +1,5 @@
import Plugins from "plugins";
+import { registerCommand, unregisterCommand } from "../api/Commands";
import { Settings } from "../api/settings";
import Logger from "../utils/logger";
import { Patch, Plugin } from "../utils/types";
@@ -17,44 +18,70 @@ for (const plugin of Object.values(Plugins)) if (plugin.patches && Settings.plug
}
export function startAllPlugins() {
- for (const plugin in Plugins) if (Settings.plugins[plugin].enabled) {
- startPlugin(Plugins[plugin]);
+ for (const name in Plugins) if (Settings.plugins[name].enabled) {
+ startPlugin(Plugins[name]);
}
}
export function startPlugin(p: Plugin) {
- if (!p.start) return true;
-
- logger.info("Starting plugin", p.name);
- if (p.started) {
- logger.warn(`${p.name} already started`);
- return false;
+ if (p.start) {
+ logger.info("Starting plugin", p.name);
+ if (p.started) {
+ logger.warn(`${p.name} already started`);
+ return false;
+ }
+ try {
+ p.start();
+ p.started = true;
+ } catch (e) {
+ logger.error(`Failed to start ${p.name}\n`, e);
+ return false;
+ }
}
- try {
- p.start();
- p.started = true;
- return true;
- } catch (err: any) {
- logger.error(`Failed to start ${p.name}\n`, err);
- return false;
+ if (p.commands?.length) {
+ logger.info("Registering commands of plugin", p.name);
+ for (const cmd of p.commands) {
+ try {
+ registerCommand(cmd, p.name);
+ } catch (e) {
+ logger.error(`Failed to register command ${cmd.name}\n`, e);
+ return false;
+ }
+ }
+
}
+
+ return true;
}
export function stopPlugin(p: Plugin) {
- if (!p.stop) return true;
-
- logger.info("Stopping plugin", p.name);
- if (!p.started) {
- logger.warn(`${p.name} already stopped / never started`);
- return false;
+ if (p.stop) {
+ logger.info("Stopping plugin", p.name);
+ if (!p.started) {
+ logger.warn(`${p.name} already stopped`);
+ return false;
+ }
+ try {
+ p.stop();
+ p.started = false;
+ } catch (e) {
+ logger.error(`Failed to stop ${p.name}\n`, e);
+ return false;
+ }
}
- try {
- p.stop();
- p.started = false;
- return true;
- } catch (err: any) {
- logger.error(`Failed to stop ${p.name}\n`, err);
- return false;
+
+ if (p.commands?.length) {
+ logger.info("Unregistering commands of plugin", p.name);
+ for (const cmd of p.commands) {
+ try {
+ unregisterCommand(cmd.name);
+ } catch (e) {
+ logger.error(`Failed to unregister command ${cmd.name}\n`, e);
+ return false;
+ }
+ }
}
+
+ return true;
}