const Command = require("../../src/structures/Command"); const { MessageEmbed } = require("discord.js"); module.exports = class Help extends Command { constructor() { super({ name: "help", description: "View a list of available commands, or view information on a specific command.", aliases: ["h"], module: "General", cooldown: 0, guildOnly: false, developerOnly: false }); } async command(ctx) { if (!ctx.args.length) { const commands = [ [ "General", ctx.client.commands .filter(command => command.module == "General") .map(command => `**${command.name}** - ${command.description}`) .join("\n") ] ]; if (ctx.isDeveloper) commands.push([ "Developers", ctx.client.commands .filter(command => command.module == "Developers") .map(command => command.name) .join(", ") ]); return ctx.send({ embed: { fields: commands.map(group => { return new Object({ name: group[0], value: group[1] }); }), color: 0xff873f } }); } else { const command = ctx.client.commands.find( c => c.name == ctx.args[0].toLowerCase() || (c.aliases && c.aliases.includes(ctx.args[0].toLowerCase())) ); let fields = [ { name: "Module", value: command.module, inline: true }, { name: "Aliases", value: command.aliases.length == 0 ? "No aliases" : command.aliases.join(", "), inline: true }, { name: "Cooldown", value: command.cooldown == 0 ? "No cooldown" : `${command.cooldown}s`, inline: true }, { name: "Server only?", value: command.guildOnly ? "Yes" : "No", inline: true }, { name: "Developers only?", value: command.developerOnly ? "Yes" : "No", inline: true } ]; if (!command) return ctx.send( `That command couldn't be found. See the \`help\` command for valid commands.` ); let embed = new MessageEmbed() .setTitle(command.name) .setDescription(command.description) .setColor(0xff873f); fields.forEach(i => { embed.addField(i.name, i.value, i.inline); }); return ctx.send(embed); } } };