36 lines
979 B
JavaScript
36 lines
979 B
JavaScript
/**
|
|
* pluginGuard.js
|
|
*
|
|
* Executa um plugin com segurança.
|
|
* Se o plugin lançar um erro:
|
|
* - Loga o erro com contexto
|
|
* - Marca o plugin como "error" no registry
|
|
* - Nunca derruba o bot
|
|
*
|
|
* Plugins desativados ou com erro são ignorados silenciosamente.
|
|
*/
|
|
|
|
import { logger } from "../logger/logger.js";
|
|
import { pluginRegistry } from "./pluginLoader.js";
|
|
|
|
/**
|
|
* @param {object} plugin — entrada do pluginRegistry
|
|
* @param {object} context — { msg, chat, api }
|
|
*/
|
|
export async function runPlugin(plugin, context) {
|
|
if (plugin.status !== "active") return;
|
|
|
|
try {
|
|
await plugin.run(context);
|
|
} catch (err) {
|
|
// Desativa o plugin para não continuar quebrando
|
|
plugin.status = "error";
|
|
plugin.error = err;
|
|
pluginRegistry.set(plugin.name, plugin);
|
|
|
|
logger.error(
|
|
`Plugin "${plugin.name}" desativado após erro: ${err.message}`,
|
|
`\n Stack: ${err.stack?.split("\n")[1]?.trim() ?? ""}`
|
|
);
|
|
}
|
|
} |