mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
* step 1 * Refactorings * command modules do not depend on anything but itself * tearing it up * Remove module store, manager, and Intializable type * consolidate interfaces in single file * consolidate default services in single file * TEAR IT UP * fix text compile * the end of sern init?? * Presence namespaced types removed * internal namespace * clean up dependencies * fix test * fix circular dependency * still broken but progress * remove barrel for core/structs * reffactor * refactor allat * more refactoring * prototyping linking static handler * cleanup tests, codegen, and importing handler * some refactor * generify partition * for now copy paste new ioc system * removeiti * fdsfD * ensure container is init'd * fix absPath gen * working on bun compat * refactor and clean up and reenter v3 module loading * dsfsd * refactor, add cron types, reinstante module loader * ready handler revamped so much cleaner * fdssdf * refactor deps list * add more tests, polish up ioc * up to speed with event modules * i think cron works * cron works now, poc * ksdjkldsfld * updating ioc api, experimenting with cron * save b4 thunder and lightning * plugin data reduction & args changes * freeze module after plugins, updateModule, and more * simplify plugin args and prepare for reduction among plugins * add deps to plugin calls and execute * plugin system loking better, tbd type * porg * initplugins inject deps, inconspicuos * fix faiklling test * fix initPlugins not reassigning * parsingParams kinda * proper mapping * dynamic customIds * handling customId params working * testing n shi * inlineinignsd * consolidate fmt * once on eventModules * refact,simplf * readd vitest and Asset fn * fix typings * assets fn complete * more intuitive context.options and Asset typings * add init hooks not firing * -file,-updateModule,publish? * fix: ioc deps not created correctly * documentation, add json for Asset * remove asset * ss * finish ioc transition * nvm, now i did * s * update locals api, docs, tests * fix tests * fix up tests and cleanup * fix * Update src/core/functions.ts Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com> * better documentation * temp fix * namespace presence types again * revising cron modules and better error messages * scheduler ids * more descriptive errors * refactor to not type leak and job cancellation * refactor n better signatures for task scheduler * documentation * fix swap not accepting functions * change task signature --------- Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com>
72 lines
2.6 KiB
TypeScript
72 lines
2.6 KiB
TypeScript
//side effect: global container
|
|
import { useContainerRaw } from '@sern/ioc/global';
|
|
|
|
import callsites from 'callsites';
|
|
import * as Files from './core/module-loading';
|
|
import { merge } from 'rxjs';
|
|
import eventsHandler from './handlers/user-defined-events';
|
|
import ready from './handlers/ready';
|
|
import messageHandler from './handlers/message';
|
|
import interactionHandler from './handlers/interaction';
|
|
import { presenceHandler } from './handlers/presence';
|
|
import { UnpackedDependencies } from './types/utility';
|
|
import type { Presence} from './core/presences';
|
|
import { registerTasks } from './handlers/tasks';
|
|
|
|
interface Wrapper {
|
|
commands: string;
|
|
defaultPrefix?: string;
|
|
events?: string;
|
|
tasks?: string;
|
|
}
|
|
/**
|
|
* @since 1.0.0
|
|
* @param maybeWrapper 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',
|
|
* })
|
|
* ```
|
|
*/
|
|
|
|
export function init(maybeWrapper: Wrapper = { commands: "./dist/commands" }) {
|
|
const startTime = performance.now();
|
|
const deps = useContainerRaw().deps<UnpackedDependencies>();
|
|
|
|
if (maybeWrapper.events !== undefined) {
|
|
eventsHandler(deps, maybeWrapper.events)
|
|
.then(() => {
|
|
deps['@sern/logger']?.info({ message: "Events registered" });
|
|
});
|
|
} else {
|
|
deps['@sern/logger']?.info({ message: "No events registered" });
|
|
}
|
|
|
|
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
|
|
ready(maybeWrapper.commands, deps)
|
|
.then(() => {
|
|
const time = ((performance.now() - startTime) / 1000).toFixed(2);
|
|
deps['@sern/logger']?.info({ message: `sern: registered in ${time} s` });
|
|
if(presencePath.exists) {
|
|
const setPresence = async (p: Presence.Result) => {
|
|
return deps['@sern/client'].user?.setPresence(p);
|
|
}
|
|
presenceHandler(presencePath.path, setPresence).subscribe();
|
|
}
|
|
if(maybeWrapper.tasks) {
|
|
registerTasks(maybeWrapper.tasks, deps);
|
|
}
|
|
})
|
|
.catch(err => { throw err });
|
|
|
|
const messages$ = messageHandler(deps, maybeWrapper.defaultPrefix);
|
|
const interactions$ = interactionHandler(deps, maybeWrapper.defaultPrefix);
|
|
// listening to the message stream and interaction stream
|
|
merge(messages$, interactions$).subscribe();
|
|
}
|