mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
prototyping linking static handler
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import type { Interaction } from 'discord.js';
|
||||
import { mergeMap, merge, concatMap } from 'rxjs';
|
||||
import { PayloadType } from './core/structures/enums';
|
||||
import { shouldHandle } from './core/module-loading'
|
||||
import {
|
||||
isAutocomplete,
|
||||
isCommand,
|
||||
@@ -14,9 +15,8 @@ import {
|
||||
} from './core/_internal';
|
||||
import { createInteractionHandler, executeModule, makeModuleExecutor } from './handlers/event-utils';
|
||||
import type { Emitter, ErrorHandling, Logging } from './core/interfaces'
|
||||
import { Services } from './core/ioc/dependency-injection';
|
||||
|
||||
export function interactionHandler(client: Emitter,
|
||||
function interactionHandler(client: Emitter,
|
||||
emitter: Emitter,
|
||||
log: Logging,
|
||||
err: ErrorHandling,
|
||||
@@ -35,8 +35,6 @@ export function interactionHandler(client: Emitter,
|
||||
mergeMap(payload => executeModule(emitter, log, err, payload)));
|
||||
}
|
||||
|
||||
export const __dependencies = () =>
|
||||
Services('@sern/emitter',
|
||||
'@sern/errors',
|
||||
'@sern/logger',
|
||||
'@sern/client');
|
||||
export const __start = (entryPoint: string, wrapper: { defaultPrefix?: string }) => {
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ export function commandModule(mod: InputCommand): _Module {
|
||||
|
||||
const { name, absPath } = Files.parseCallsite(initCallsite);
|
||||
mod.name ??= name;
|
||||
mod.description ??= '...'
|
||||
//@ts-ignore
|
||||
return {
|
||||
...mod,
|
||||
@@ -44,6 +45,7 @@ export function eventModule(mod: InputEvent): _Module {
|
||||
if(!initCallsite) throw Error("initCallsite is null");
|
||||
const { name, absPath } = Files.parseCallsite(initCallsite);
|
||||
mod.name ??= name;
|
||||
mod.description ??= '...'
|
||||
//@ts-ignore
|
||||
return {
|
||||
...mod,
|
||||
|
||||
@@ -36,11 +36,7 @@ export type {
|
||||
AnyCommandPlugin,
|
||||
} from './types/core-plugin';
|
||||
|
||||
export interface Wrapper {
|
||||
commands: string;
|
||||
defaultPrefix?: string;
|
||||
events?: string;
|
||||
}
|
||||
|
||||
export type { Args, SlashOptions, Payload, SernEventsMapping } from './types/utility';
|
||||
export type { Singleton, Transient, CoreDependencies } from './types/ioc';
|
||||
|
||||
|
||||
52
src/sern.ts
52
src/sern.ts
@@ -2,52 +2,36 @@ import callsites from 'callsites';
|
||||
import * as Files from './core/module-loading';
|
||||
import { Services } from './core/ioc';
|
||||
|
||||
|
||||
|
||||
interface Wrapper {
|
||||
commands?: string;
|
||||
defaultPrefix?: string;
|
||||
events?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.0.0
|
||||
* @param wrapper Options to pass into sern.
|
||||
* Function to start the handler up
|
||||
* @example
|
||||
* ```ts title="src/index.ts"
|
||||
* Sern.init({
|
||||
* commands: 'dist/commands',
|
||||
* events: 'dist/events',
|
||||
* })
|
||||
* Sern.init()
|
||||
* ```
|
||||
*/
|
||||
export function init() {
|
||||
export function init(wrapper: Wrapper) {
|
||||
const startTime = performance.now();
|
||||
const dependencies = Services('@sern/emitter',
|
||||
'@sern/errors',
|
||||
'@sern/logger',
|
||||
'@sern/client');
|
||||
const logger = dependencies[2],
|
||||
errorHandler = dependencies[1];
|
||||
|
||||
//const wrapper = Files.loadConfig(maybeWrapper, logger);
|
||||
//if (wrapper.events !== undefined) {
|
||||
//eventsHandler(dependencies, Files.getFullPathTree(wrapper.events));
|
||||
// }
|
||||
//import(path.resolve("commands.js"))
|
||||
//.then(({ commands }) => { })
|
||||
//.catch(message => logger?.error({ message }))
|
||||
|
||||
const initCallsite = callsites()[1].getFileName();
|
||||
const presencePath = Files.shouldHandle(initCallsite!, "presence");
|
||||
//Ready event: load all modules and when finished, time should be taken and logged
|
||||
// readyHandler(dependencies, Files.getFullPathTree(wrapper.commands))
|
||||
// .add(() => {
|
||||
// logger?.info({ message: "Client signaled ready, registering modules" });
|
||||
// const time = ((performance.now() - startTime) / 1000).toFixed(2);
|
||||
// dependencies[0].emit('modulesLoaded');
|
||||
// logger?.info({ message: `sern: registered in ${time} s`, });
|
||||
// if(presencePath.exists) {
|
||||
// const setPresence = async (p: any) => {
|
||||
// return (dependencies[4] as Client).user?.setPresence(p);
|
||||
// }
|
||||
// presenceHandler(presencePath.path, setPresence).subscribe();
|
||||
// }
|
||||
// });
|
||||
//const messages$ = messageHandler(dependencies, wrapper.defaultPrefix);
|
||||
//const interactions$ = interactionHandler(dependencies);
|
||||
// listening to the message stream and interaction stream
|
||||
//merge(messages$, interactions$).pipe(handleCrash(errorHandler, dependencies[0], logger)).subscribe();
|
||||
const handlerModule = Files.shouldHandle(initCallsite!, "handler");
|
||||
if(!handlerModule.exists) {
|
||||
throw Error("Cannot locate handler file. Did you run sern build?");
|
||||
}
|
||||
import(handlerModule.path)
|
||||
.then(({ start }) => start(initCallsite, wrapper))
|
||||
.catch(err => dependencies[2].error({ message: err }))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user