sheweny
Version:
The powerful framework for create discord bots
220 lines • 12.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_js_1 = require("../helpers/index.js");
const discord_js_1 = require("discord.js");
const constants_js_1 = require("../constants/constants.js");
async function run(client, message) {
try {
// message.content can be empty with the new message_content intent
if (!message.content || message.author.bot)
return;
let prefix = '';
if (typeof client.managers.commands?.prefix === 'string')
prefix = client.managers.commands.prefix;
if (typeof client.managers.commands?.prefix === 'function')
prefix = await client.managers.commands.prefix(message);
const args = message.content.trim().slice(prefix.length).split(/ +/g);
if (!args[0])
return;
if (!message.content?.startsWith(prefix))
return;
/* -----------------COMMAND----------------- */
const commandName = args.shift()?.toLowerCase();
if (!commandName)
return;
const commands = client.collections.commands?.get(commandName) ||
client.collections.commands?.find(cmds => {
for (const cmd of cmds) {
if (cmd.aliases && cmd.aliases.length && cmd.aliases.includes(commandName))
return true;
else
return false;
}
return false;
});
if (!commands || (commands && !commands.length))
return;
for (const command of commands) {
await (async () => {
if (!command || (command && command.type !== constants_js_1.COMMAND_TYPE.cmdMsg))
return;
if (!command.enabled)
return;
if (command.before)
await command.before(message);
/**
* Handle inhibitors
*/
const inhibitorsCollection = client.collections.inhibitors?.filter((is) => {
for (const i of is) {
return i.type.includes(constants_js_1.INHIBITOR_TYPE.message) || i.type.includes(constants_js_1.INHIBITOR_TYPE.all);
}
return false;
});
const inhibitorsArray = [];
for (const [, inhibitors] of inhibitorsCollection) {
if (inhibitors && inhibitors.length) {
for (const inhibitor of inhibitors) {
inhibitorsArray.push(inhibitor);
}
}
}
if (inhibitorsArray && inhibitorsArray.length) {
const sorted = inhibitorsArray.sort((a, b) => b.priority - a.priority);
for (const i of sorted) {
if (!(await i.execute(command, message)))
return await i.onFailure(command, message);
}
}
/* ---------------PERMISSIONS--------------- */
const userMissingPerms = [];
const clientMissingPerms = [];
if (command.adminsOnly && !client.admins?.includes(message.author.id)) {
userMissingPerms.push(constants_js_1.COMMAND_PERMISSIONS.admin);
}
/* ---------------IN-GUILD--------------- */
if (message.guild) {
if (command.channel === constants_js_1.COMMAND_CHANNEL.dm) {
return client.managers.commands?.emit(constants_js_1.COMMAND_EVENTS.invalidChannel, command, message);
}
let member = message.guild.members.cache.get(message.author.id);
if (!member)
member = await message.guild.members.fetch(message.author.id);
if (command.userPermissions.length > 0) {
for (const permission of command.userPermissions) {
if (!member.permissions.has(permission)) {
userMissingPerms.push(permission.toString());
}
}
}
if (userMissingPerms.length) {
return client.managers.commands?.emit(constants_js_1.COMMAND_EVENTS.userMissingPerm, message, userMissingPerms, command);
}
if (command.clientPermissions.length > 0) {
for (const permission of command.clientPermissions) {
if (!message.guild.members.me?.permissions.has(permission)) {
clientMissingPerms.push(permission.toString());
}
}
}
if (clientMissingPerms.length) {
return client.managers.commands?.emit(constants_js_1.COMMAND_EVENTS.clientMissingPerm, message, clientMissingPerms, command);
}
}
else if (command.channel === constants_js_1.COMMAND_CHANNEL.guild) {
return client.managers.commands?.emit(constants_js_1.COMMAND_EVENTS.invalidChannel, command, message);
}
/* ---------------COOLDOWNS--------------- */
if (!client.disableCooldownsForAdmins ||
(client.disableCooldownsForAdmins && !client.admins?.includes(message.author.id))) {
if (!client.cooldowns.commands.has(command.name)) {
client.cooldowns.commands.set(command.name, new discord_js_1.Collection());
}
const timeNow = Date.now();
const tStamps = client.cooldowns.commands.get(command.name);
if (tStamps) {
const cdAmount = (command.cooldown || 0) * 1000;
if (tStamps.has(message.author.id)) {
const cdExpirationTime = (tStamps.get(message.author.id) || 0) + cdAmount;
if (timeNow < cdExpirationTime) {
// const timeLeft = (cdExpirationTime - timeNow) / 1000;
return client.managers.commands?.emit(constants_js_1.COMMAND_EVENTS.cooldownLimit, message, cdExpirationTime - timeNow);
}
}
tStamps.set(message.author.id, timeNow);
setTimeout(() => tStamps.delete(message.author.id), cdAmount);
}
}
// eslint-disable-next-line
const messageArgs = {};
/* ---------------ARGUMENTS--------------- */
const types = [
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.string,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.number,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.boolean,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.rest,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.guild,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.channel,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.member,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.guild_emoji,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.role,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.user,
constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.command,
];
if (command.args && command.args.length > 0) {
for (let i = 0; i < command.args.length; i++) {
const argCommand = command.args[i];
if (!argCommand)
continue;
if (!types.includes(argCommand.type))
continue;
if (!args[i]) {
// No argument provided
messageArgs[argCommand?.name] = argCommand?.default || null;
continue;
}
switch (argCommand.type) {
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.string:
messageArgs[argCommand?.name] = String(args[i]);
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.number:
messageArgs[argCommand?.name] = Number(args[i]);
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.boolean:
messageArgs[argCommand?.name] = Boolean(args[i]);
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.rest:
messageArgs[argCommand?.name] = String(args.slice(i).join(' '));
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.guild:
messageArgs[argCommand?.name] = client.util.resolveGuild(args[i] || '');
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.channel:
if (!message.guild) {
messageArgs[argCommand?.name] = null;
break;
}
messageArgs[argCommand?.name] = client.util.resolveChannel(message.guild, args[i] || '');
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.member:
if (!message.guild) {
messageArgs[argCommand?.name] = null;
break;
}
messageArgs[argCommand?.name] = await client.util.resolveMember(message.guild, args[i] || '');
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.guild_emoji:
if (!message.guild) {
messageArgs[argCommand?.name] = null;
break;
}
messageArgs[argCommand?.name] = client.util.resolveGuildEmoji(message.guild, args[i] || '');
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.role:
if (!message.guild) {
messageArgs[argCommand?.name] = null;
break;
}
messageArgs[argCommand?.name] = client.util.resolveRole(message.guild, args[i] || '');
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.user:
messageArgs[argCommand?.name] = await client.util.resolveUser(args[i] || '');
break;
case constants_js_1.COMMAND_MESSAGE_ARGS_TYPE.command:
messageArgs[argCommand?.name] = await client.util.resolveCommand(args[i] || '');
break;
}
}
/* ---------------COMMAND--------------- */
}
await command.execute(message, messageArgs);
})();
}
}
catch (err) {
const e = err;
new index_js_1.ShewenyError(client, e);
}
}
exports.default = run;
//# sourceMappingURL=messageCreate.js.map