UNPKG

@beni69/cmd

Version:

The command handler from my discord bot

124 lines 4.74 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.slashCommandsChanged = exports.resolveMention = exports.resolveUser = exports.newEmbed = exports.cleanDB = void 0; const discord_js_1 = require("discord.js"); const models = __importStar(require("./Models")); // remove expired cooldowns from the database async function cleanDB() { await models.guild.find((err, found) => { if (err) return console.error(err); found.forEach(async (g) => { // per-user cooldowns let toDelete = []; g.cooldowns.forEach((cd, i) => { if (cd.expires < Date.now()) toDelete.push(i); }); toDelete.forEach(n => g.cooldowns.splice(n, 1)); // global cooldowns toDelete = []; g.globalCooldowns.forEach((cd, i) => { if (cd.expires < Date.now()) toDelete.push(i); }); toDelete.forEach(n => g.globalCooldowns.splice(n, 1)); await g.updateOne({ cooldowns: g.cooldowns, globalCooldowns: g.globalCooldowns, }); }); }); } exports.cleanDB = cleanDB; function newEmbed(title, msg) { return new discord_js_1.MessageEmbed({ title, description: msg }).setTimestamp(); } exports.newEmbed = newEmbed; const resolveUser = (str) => str.replace(/\<|\>|@|!/gi, ""); exports.resolveUser = resolveUser; /** * get the type and resolved data (if possible) from a string * @example user: <@123...> or <@!123...> * @example role: <@&123...> * @example channel: <#123...> * @param guild the discordjs client to use for resolving * @param x the option to resolve */ const resolveMention = (guild, x) => { var _a, _b, _c; // get built in types out of the way if (x === !!x) return { type: "BOOLEAN", value: x }; if (!isNaN(parseInt(x) || parseFloat(x))) return { type: "NUMBER", value: x }; let value = null; let res = null; value = (_a = /^<@!?(\d{18,20})>$/.exec(x)) === null || _a === void 0 ? void 0 : _a[1]; if (value) res = guild.client.users.resolve(value); let member; if (res && "members" in guild) member = guild.members.resolve(res); if (res) return { type: "USER", value, user: res, member: member !== null && member !== void 0 ? member : undefined }; value = (_b = /^<@&(\d{18,20})>$/.exec(x)) === null || _b === void 0 ? void 0 : _b[1]; if (value && "roles" in guild) res = guild.roles.resolve(value); if (res) return { type: "ROLE", value, role: res }; value = (_c = /^<#(\d{18,20})>$/.exec(x)) === null || _c === void 0 ? void 0 : _c[1]; if (value && "channels" in guild) res = guild.channels.resolve(value); if (res) return { type: "CHANNEL", value, channel: res }; // fallback return { type: "STRING", value: x }; }; exports.resolveMention = resolveMention; const slashCommandsChanged = (_o, _n) => { // convert the collection to an array let o = [..._o.values()] .map(c => ({ name: c.name, description: c.description, options: c.options ? c.options.map(o => { var _a; return ({ name: o.name, description: o.description, type: o.type, required: (_a = o.required) !== null && _a !== void 0 ? _a : false, }); }) : [], })) .sort(sortFN), n = _n.sort(sortFN); // dedupe o = [...new Set(o)]; n = [...new Set(n)]; return JSON.stringify(o) !== JSON.stringify(n); }; exports.slashCommandsChanged = slashCommandsChanged; const sortFN = (a, b) => a.name.localeCompare(b.name); //# sourceMappingURL=Utils.js.map