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 { SernError } from '../core/structures/enums'
|
||||||
import { Ok, wrapAsync} from '../core/structures/result';
|
import { Ok, wrapAsync} from '../core/structures/result';
|
||||||
import type { Module } from '../types/core-modules';
|
import type { Module } from '../types/core-modules';
|
||||||
@@ -37,20 +37,25 @@ export async function callInitPlugins(_module: Module, deps: Dependencies, emit?
|
|||||||
return module
|
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 () => {
|
const moduleCalled = wrapAsync(async () => {
|
||||||
return module.execute(...args);
|
return module.execute(...args);
|
||||||
})
|
})
|
||||||
moduleCalled
|
moduleCalled
|
||||||
.then(() => {
|
.then((res) => {
|
||||||
emitter.emit('module.activate', resultPayload('success', module))
|
if(res.ok) {
|
||||||
})
|
emitter.emit('module.activate', resultPayload('success', module))
|
||||||
.catch(err => {
|
} else {
|
||||||
if(!emitter.emit('error', resultPayload('failure', module, err))) {
|
if(!emitter.emit('error', resultPayload('failure', module, res.error))) {
|
||||||
console.error(err)
|
// 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
|
//i wish javascript had clojure destructuring
|
||||||
const { '@sern/client': client,
|
const { '@sern/client': client,
|
||||||
'@sern/modules': moduleManager,
|
'@sern/modules': moduleManager,
|
||||||
|
'@sern/logger': log,
|
||||||
'@sern/emitter': reporter } = deps
|
'@sern/emitter': reporter } = deps
|
||||||
|
|
||||||
client.on('interactionCreate', async (event) => {
|
client.on('interactionCreate', async (event) => {
|
||||||
@@ -52,6 +53,6 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s
|
|||||||
payload.args[1].state = result.value
|
payload.args[1].state = result.value
|
||||||
|
|
||||||
// note: do not await this. will be blocking if long task (ie waiting for modal input)
|
// 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
|
//@ts-ignore
|
||||||
payload.args[1].state = result.value
|
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) {
|
} catch(e) {
|
||||||
const err = e instanceof Error ? e : Error(inspect(e, { colors: true }));
|
const err = e instanceof Error ? e : Error(inspect(e, { colors: true }));
|
||||||
|
|
||||||
//@ts-ignore
|
|
||||||
if(!report.emit('error', resultPayload('failure', module, err))) {
|
if(!report.emit('error', resultPayload('failure', module, err))) {
|
||||||
logger?.error({ message: inspect(err) });
|
logger?.error({ message: inspect(err) });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user