diff options
Diffstat (limited to 'src/plugins/index.ts')
-rw-r--r-- | src/plugins/index.ts | 83 |
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; } |