@beni69/cmd
Version:
The command handler from my discord bot
124 lines • 4.74 kB
JavaScript
;
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