159 lines
3.8 KiB
JavaScript
Executable file
159 lines
3.8 KiB
JavaScript
Executable file
const Command = require("../../src/structures/Command");
|
|
const {
|
|
MessageEmbed
|
|
} = require("discord.js");
|
|
|
|
function CapFirstLetter(string) {
|
|
if (typeof string == undefined) return;
|
|
var firstLetter = string[0] || string.charAt(0);
|
|
return firstLetter ? firstLetter.toUpperCase() + string.slice(1) : "";
|
|
}
|
|
|
|
module.exports = class nHelp extends Command {
|
|
constructor() {
|
|
super({
|
|
name: "help",
|
|
description: "View a list of available commands or information on a specific command.",
|
|
aliases: ['h', '?'],
|
|
module: "General",
|
|
cooldown: 0,
|
|
guildOnly: false,
|
|
developerOnly: false
|
|
});
|
|
}
|
|
|
|
async command(ctx) {
|
|
let Help = new MessageEmbed();
|
|
const commands = {
|
|
General: {
|
|
cs: ctx.client.commands
|
|
.filter(command => command.module == "General")
|
|
.map(c => c),
|
|
name: "General"
|
|
},
|
|
Settings: {
|
|
cs: ctx.client.commands
|
|
.filter(command => command.module == "Settings")
|
|
.map(c => c),
|
|
name: "Settings"
|
|
},
|
|
Images: {
|
|
cs: ctx.client.commands
|
|
.filter(command => command.module == "Images")
|
|
.map(c => c),
|
|
name: "Images"
|
|
},
|
|
Roleplay: {
|
|
cs: ctx.client.commands
|
|
.filter(command => command.module == "Roleplay")
|
|
.map(c => c),
|
|
name: "Roleplay"
|
|
}
|
|
};
|
|
let lengths = [];
|
|
let names = ["General", "Settings", "Images", "Roleplay"];
|
|
|
|
for (const i in commands) {
|
|
if (commands.hasOwnProperty(i)) {
|
|
const c = commands[i];
|
|
lengths.push(c.cs.length);
|
|
}
|
|
}
|
|
let start = 0;
|
|
|
|
Help.setAuthor(ctx.author.tag, ctx.author.avatarURL())
|
|
.setTitle("Command Help")
|
|
.setTimestamp(new Date())
|
|
.setColor(ctx.vars.color)
|
|
.setFooter(`${ctx.client.user.username}`, ctx.client.user.avatarURL());
|
|
|
|
if (ctx.args.length === 0) {
|
|
lengths.forEach(c => {
|
|
Help.addField(
|
|
`${names[start]} (${c})`,
|
|
`${ctx.utils.format.code(`'help --${names[start].toLowerCase()}`)}`,
|
|
true
|
|
);
|
|
start++;
|
|
});
|
|
return ctx.send(Help);
|
|
}
|
|
|
|
let category, cmd;
|
|
if (ctx.args.length > 0) {
|
|
category = ctx.args[0].slice(2);
|
|
cmd = ctx.args[1];
|
|
}
|
|
|
|
if (commands.hasOwnProperty(CapFirstLetter(category))) {
|
|
let short = [];
|
|
let long = [];
|
|
commands[`${CapFirstLetter(category)}`].cs.forEach(c => {
|
|
short.push(`${ctx.utils.format.code(c.name)} - ${c.description}`);
|
|
long.push(c);
|
|
});
|
|
|
|
if (ctx.args.length === 2) {
|
|
let c = long.filter(
|
|
c =>
|
|
c.name === cmd.toLowerCase() ||
|
|
(c.aliases && c.aliases.includes(cmd.toLowerCase()))
|
|
);
|
|
let Text;
|
|
if (c.length === 0) {
|
|
Text = "There is no command with that name in this category.";
|
|
Help.setDescription(Text);
|
|
return ctx.send(Help);
|
|
} else {
|
|
let fields = [{
|
|
name: "Module",
|
|
value: c[0].module,
|
|
inline: true
|
|
},
|
|
{
|
|
name: "Aliases",
|
|
value: c[0].aliases.length == 0 ?
|
|
"No aliases" : c[0].aliases.join(", "),
|
|
inline: true
|
|
},
|
|
{
|
|
name: "Cooldown",
|
|
value: c[0].cooldown == 0 ? "No cooldown" : `${c[0].cooldown}s`,
|
|
inline: true
|
|
},
|
|
{
|
|
name: "Server only?",
|
|
value: c[0].guildOnly ? "Yes" : "No",
|
|
inline: true
|
|
},
|
|
{
|
|
name: "Permissions needed",
|
|
value: c[0].AuthorPermissions ? c[0].AuthorPermissions : "None",
|
|
inline: true
|
|
},
|
|
{
|
|
name: "Developers only?",
|
|
value: c[0].developerOnly ? "Yes" : "No",
|
|
inline: true
|
|
}
|
|
];
|
|
fields.forEach(i => {
|
|
Help.addField(i.name, i.value, i.inline);
|
|
});
|
|
|
|
return ctx.send(Help);
|
|
}
|
|
} else {
|
|
Help.setDescription(
|
|
`Use ${ctx.utils.format.code(
|
|
`'help --<cagegory> <command> to get help on a specific command`
|
|
)}\n\n${short.join("\n")}`
|
|
);
|
|
return ctx.send(Help);
|
|
}
|
|
} else {
|
|
Help.setDescription("This Category does not exist");
|
|
return ctx.send(Help);
|
|
}
|
|
}
|
|
}; |