From 31c2695cf8824ed7d7efb8c9407a8a0201d0a9cc Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Sun, 12 Jan 2025 21:47:36 -0600 Subject: [PATCH] fix+regres+errorhandling --- src/handlers/event-utils.ts | 21 +++++++++++++-------- src/handlers/interaction.ts | 3 ++- src/handlers/message.ts | 2 +- src/handlers/user-defined-events.ts | 2 -- 4 files changed, 16 insertions(+), 12 deletions(-) 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) }); }