UNPKG

@sern/handler

Version:

A complete, customizable, typesafe, & reactive framework for discord bots.

105 lines 4.49 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = void 0; //side effect: global container const global_1 = require("@sern/ioc/global"); // set asynchronous capturing of errors const node_events_1 = __importDefault(require("node:events")); node_events_1.default.captureRejections = true; const callsites_1 = __importDefault(require("callsites")); const Files = __importStar(require("./core/module-loading")); const user_defined_events_1 = __importDefault(require("./handlers/user-defined-events")); const ready_1 = __importDefault(require("./handlers/ready")); const interaction_1 = require("./handlers/interaction"); const message_1 = require("./handlers/message"); const presence_1 = require("./handlers/presence"); const tasks_1 = require("./handlers/tasks"); /** * @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', * }) * ``` */ function init(maybeWrapper = { commands: "./dist/commands" }) { const startTime = performance.now(); const deps = (0, global_1.useContainerRaw)().deps(); if (maybeWrapper.events !== undefined) { (0, user_defined_events_1.default)(deps, maybeWrapper) .then(() => { deps['@sern/logger']?.info({ message: "Events registered" }); }); } else { deps['@sern/logger']?.info({ message: "No events registered" }); } // autohandle errors that occur in modules. // convenient for rapid iteration if (maybeWrapper.handleModuleErrors) { if (!deps['@sern/logger']) { throw Error('A logger is required to handleModuleErrors.\n A default logger is already supplied!'); } deps['@sern/logger']?.info({ 'message': 'handleModuleErrors enabled' }); deps['@sern/emitter'].addListener('error', (payload) => { if (payload.type === 'failure') { deps['@sern/logger']?.error({ message: payload.reason }); } else { deps['@sern/logger']?.warning({ message: "error event should only have payloads of 'failure'" }); } }); } const initCallsite = (0, callsites_1.default)()[1].getFileName(); const presencePath = Files.shouldHandle(initCallsite, "presence"); //Ready event: load all modules and when finished, time should be taken and logged (0, ready_1.default)(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) => { return deps['@sern/client'].user?.setPresence(p); }; (0, presence_1.presenceHandler)(presencePath.path, setPresence); } if (maybeWrapper.tasks) { (0, tasks_1.registerTasks)(maybeWrapper.tasks, deps); } }) .catch(err => { throw err; }); (0, interaction_1.interactionHandler)(deps, maybeWrapper.defaultPrefix); (0, message_1.messageHandler)(deps, maybeWrapper.defaultPrefix); } exports.init = init; //# sourceMappingURL=sern.js.map