mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
fix+regres+errorhandling
This commit is contained in:
@@ -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
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
@@ -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) });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user