@sern/handler
Version:
A complete, customizable, typesafe, & reactive framework for discord bots.
119 lines • 3.93 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.pipe = exports.resultPayload = exports.isModal = exports.isAutocomplete = exports.isContextCommand = exports.isCommand = exports.isMessageComponent = exports.createLookupTable = exports.partitionPlugins = exports.fmt = exports.createSDT = void 0;
const discord_js_1 = require("discord.js");
const enums_1 = require("./structures/enums");
const node_path_1 = __importDefault(require("node:path"));
const createSDT = (module, deps, params) => {
return {
state: {},
deps,
params,
type: module.type,
module: {
name: module.name,
description: module.description,
locals: module.locals,
meta: module.meta
}
};
};
exports.createSDT = createSDT;
/**
* Removes the first character(s) _[depending on prefix length]_ of the message
* @param msg
* @param prefix The prefix to remove
* @returns The message without the prefix
* @example
* message.content = '!ping';
* console.log(fmt(message.content, '!'));
* // [ 'ping' ]
*/
function fmt(msg, prefix) {
if (!prefix)
throw Error("Unable to parse message without prefix");
return msg.slice(prefix.length).trim().split(/\s+/g);
}
exports.fmt = fmt;
function partitionPlugins(arr = []) {
const controlPlugins = [];
const initPlugins = [];
for (const el of arr) {
switch (el.type) {
case enums_1.PluginType.Control:
controlPlugins.push(el);
break;
case enums_1.PluginType.Init:
initPlugins.push(el);
break;
}
}
return [controlPlugins, initPlugins];
}
exports.partitionPlugins = partitionPlugins;
const createLookupTable = (options) => {
const table = new Map();
_createLookupTable(table, options, "<parent>");
return table;
};
exports.createLookupTable = createLookupTable;
const _createLookupTable = (table, options, parent) => {
for (const opt of options) {
const name = node_path_1.default.posix.join(parent, opt.name);
switch (opt.type) {
case discord_js_1.ApplicationCommandOptionType.Subcommand:
{
_createLookupTable(table, opt.options ?? [], name);
}
break;
case discord_js_1.ApplicationCommandOptionType.SubcommandGroup:
{
_createLookupTable(table, opt.options ?? [], name);
}
break;
default:
{
if (Reflect.get(opt, 'autocomplete') === true) {
table.set(name, opt);
}
}
break;
}
}
};
function isMessageComponent(i) {
return i.type === discord_js_1.InteractionType.MessageComponent;
}
exports.isMessageComponent = isMessageComponent;
function isCommand(i) {
return i.type === discord_js_1.InteractionType.ApplicationCommand;
}
exports.isCommand = isCommand;
function isContextCommand(i) {
return i.isContextMenuCommand();
}
exports.isContextCommand = isContextCommand;
function isAutocomplete(i) {
return i.type === discord_js_1.InteractionType.ApplicationCommandAutocomplete;
}
exports.isAutocomplete = isAutocomplete;
function isModal(i) {
return i.type === discord_js_1.InteractionType.ModalSubmit;
}
exports.isModal = isModal;
function resultPayload(type, module, reason) {
return { type, module, reason };
}
exports.resultPayload = resultPayload;
function pipe(arg, firstFn, ...fns) {
let result = firstFn(arg);
for (let fn of fns) {
result = fn(result);
}
return result;
}
exports.pipe = pipe;
//# sourceMappingURL=functions.js.map