diff --git a/src/handlers/event-utils.ts b/src/handlers/event-utils.ts index ba7ddb4..2c7c42c 100644 --- a/src/handlers/event-utils.ts +++ b/src/handlers/event-utils.ts @@ -1,4 +1,4 @@ -import type { Emitter } from '../core/interfaces'; +import type { Emitter, Logging } from '../core/interfaces'; import { SernError } from '../core/structures/enums' import { Ok, wrapAsync} from '../core/structures/result'; import type { Module } from '../types/core-modules'; @@ -37,20 +37,25 @@ export async function callInitPlugins(_module: Module, deps: Dependencies, emit? return module } -export function executeModule(emitter: Emitter, { module, args } : ExecutePayload) { +export function executeModule(emitter: Emitter, logger: Logging|undefined, { module, args } : ExecutePayload) { const moduleCalled = wrapAsync(async () => { return module.execute(...args); }) moduleCalled - .then(() => { - emitter.emit('module.activate', resultPayload('success', module)) - }) - .catch(err => { - if(!emitter.emit('error', resultPayload('failure', module, err))) { - console.error(err) + .then((res) => { + if(res.ok) { + emitter.emit('module.activate', resultPayload('success', module)) + } else { + if(!emitter.emit('error', resultPayload('failure', module, res.error))) { + // node crashes here. + logger?.error({ 'message': res.error }) + } } }) + .catch(err => { + throw err + }) }; diff --git a/src/handlers/interaction.ts b/src/handlers/interaction.ts index a1f38f4..2fba5ce 100644 --- a/src/handlers/interaction.ts +++ b/src/handlers/interaction.ts @@ -12,6 +12,7 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s //i wish javascript had clojure destructuring const { '@sern/client': client, '@sern/modules': moduleManager, + '@sern/logger': log, '@sern/emitter': reporter } = deps client.on('interactionCreate', async (event) => { @@ -52,6 +53,6 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s payload.args[1].state = result.value // note: do not await this. will be blocking if long task (ie waiting for modal input) - executeModule(reporter, payload); + executeModule(reporter, log, payload); }); } diff --git a/src/handlers/message.ts b/src/handlers/message.ts index bb86207..306c427 100644 --- a/src/handlers/message.ts +++ b/src/handlers/message.ts @@ -48,7 +48,7 @@ export function messageHandler (deps: UnpackedDependencies, defaultPrefix?: stri //@ts-ignore payload.args[1].state = result.value - executeModule(emitter, { module, args: payload.args }) + executeModule(emitter, log, payload) }) } diff --git a/src/handlers/user-defined-events.ts b/src/handlers/user-defined-events.ts index 41a4cff..00b72cc 100644 --- a/src/handlers/user-defined-events.ts +++ b/src/handlers/user-defined-events.ts @@ -46,8 +46,6 @@ export default async function(deps: UnpackedDependencies, wrapper: Wrapper) { } } catch(e) { const err = e instanceof Error ? e : Error(inspect(e, { colors: true })); - - //@ts-ignore if(!report.emit('error', resultPayload('failure', module, err))) { logger?.error({ message: inspect(err) }); }