feat: add remove plugin on disable
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
@ -52,9 +52,11 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
}
|
||||
|
||||
enable(...args: any[]): void {
|
||||
this.checkAndGet(args[0]).forEach(pl => {
|
||||
this.runCatch(pl, 'enable')
|
||||
this.runCatch(pl, `${this.serverType}enable`);
|
||||
this.checkAndGet(args[0]).forEach(plugin => {
|
||||
this.runCatch(plugin, 'enable')
|
||||
this.runCatch(plugin, `${this.serverType}enable`);
|
||||
this.registryCommand(plugin);
|
||||
this.registryListener(plugin);
|
||||
});
|
||||
}
|
||||
|
||||
@ -62,7 +64,8 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
this.checkAndGet(args[0]).forEach(pl => {
|
||||
this.runCatch(pl, 'disable');
|
||||
this.runCatch(pl, `${this.serverType}disable`);
|
||||
this.EventManager.disable(pl);
|
||||
this.unregistryCommand(pl);
|
||||
this.unregistryListener(pl);
|
||||
});
|
||||
}
|
||||
|
||||
@ -76,6 +79,10 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
})
|
||||
}
|
||||
|
||||
getPlugins() {
|
||||
return this.pluginMap;
|
||||
}
|
||||
|
||||
private runCatch(pl: any, func: string) {
|
||||
try {
|
||||
if (pl[func]) pl[func].call(pl);
|
||||
@ -172,9 +179,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
this.pluginMap.set(metadata.name, pluginInstance);
|
||||
pluginInstance.description = metadata;
|
||||
// @ts-ignore
|
||||
pluginInstance.logger = new this.Console(metadata.name);
|
||||
this.registryCommand(pluginInstance);
|
||||
this.registryListener(pluginInstance);
|
||||
pluginInstance.logger = new this.Console(metadata.prefix || metadata.name);
|
||||
return pluginInstance;
|
||||
}
|
||||
|
||||
@ -199,4 +204,15 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
this.EventManager.listen(pluginInstance, event.name, pluginInstance[event.executor].bind(pluginInstance));
|
||||
}
|
||||
}
|
||||
|
||||
private unregistryCommand(pluginInstance: interfaces.Plugin) {
|
||||
let cmds = getPluginCommandMetadata(pluginInstance);
|
||||
cmds.forEach(cmd => {
|
||||
this.CommandManager.off(pluginInstance, cmd.name);
|
||||
})
|
||||
}
|
||||
|
||||
private unregistryListener(pluginInstance: interfaces.Plugin) {
|
||||
this.EventManager.disable(pluginInstance);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user