@sern/handler
Version:
A complete, customizable, typesafe, & reactive framework for discord bots.
46 lines • 2.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.messageHandler = void 0;
const event_utils_1 = require("./event-utils");
const enums_1 = require("../core/structures/enums");
const functions_1 = require("../core/functions");
const context_1 = require("../core/structures/context");
/**
* Ignores messages from any person / bot except itself
* @param prefix
*/
function isBotOrNoPrefix(msg, prefix) {
return msg.author.bot || !hasPrefix(prefix, msg.content);
}
function hasPrefix(prefix, content) {
const prefixInContent = content.slice(0, prefix.length);
return prefixInContent.localeCompare(prefix, undefined, { sensitivity: 'accent' }) === 0;
}
function messageHandler(deps, defaultPrefix) {
const { "@sern/emitter": emitter, '@sern/logger': log, '@sern/modules': mg, '@sern/client': client } = deps;
if (!defaultPrefix) {
log?.debug({ message: 'No prefix found. message handler shutting down' });
return;
}
client.on('messageCreate', async (message) => {
if (isBotOrNoPrefix(message, defaultPrefix)) {
return;
}
const [prefix] = (0, functions_1.fmt)(message.content, defaultPrefix);
let module = mg.get(`${prefix}_T`) ?? mg.get(`${prefix}_B`);
if (!module) {
throw Error('Possibly undefined behavior: could not find a static id to resolve');
}
const payload = { module, args: [context_1.Context.wrap(message, defaultPrefix), (0, functions_1.createSDT)(module, deps, undefined)] };
const result = await (0, event_utils_1.callPlugins)(payload);
if (!result.ok) {
emitter.emit('module.activate', (0, functions_1.resultPayload)('failure', module, result.error ?? enums_1.SernError.PluginFailure));
return;
}
//@ts-ignore
payload.args[1].state = result.value;
(0, event_utils_1.executeModule)(emitter, log, payload);
});
}
exports.messageHandler = messageHandler;
//# sourceMappingURL=message.js.map