thaldrin/DiscordModules/General/help.js

105 lines
2.6 KiB
JavaScript
Executable File

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);
}
}
};