forked from Supositware/Haha-Yes
95 lines
2.6 KiB
JavaScript
95 lines
2.6 KiB
JavaScript
|
const { Command } = require('discord-akairo');
|
||
|
const { prefix } = require('../../config.json');
|
||
|
|
||
|
class HelpCommand extends Command {
|
||
|
constructor() {
|
||
|
super('help', {
|
||
|
aliases: ['help', 'halp', 'h'],
|
||
|
category: 'utility',
|
||
|
clientPermissions: ['EMBED_LINKS'],
|
||
|
quoted: false,
|
||
|
args: [
|
||
|
{
|
||
|
id: 'command',
|
||
|
type: 'commandAlias',
|
||
|
prompt: {
|
||
|
start: 'Which command do you need help with?',
|
||
|
retry: 'Please provide a valid command.',
|
||
|
optional: true
|
||
|
}
|
||
|
}
|
||
|
],
|
||
|
description: {
|
||
|
content: 'Displays a list of commands or information about a command.',
|
||
|
usage: '[command]',
|
||
|
examples: ['', 'star', 'remove-rep']
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
exec(message, { command }) {
|
||
|
if (!command) return this.execCommandList(message);
|
||
|
|
||
|
const prefix = this.handler.prefix(message);
|
||
|
const description = Object.assign({
|
||
|
content: 'No description available.',
|
||
|
usage: '',
|
||
|
examples: [],
|
||
|
fields: []
|
||
|
}, command.description);
|
||
|
|
||
|
const embed = this.client.util.embed()
|
||
|
.setColor(0xFFAC33)
|
||
|
.setTitle(`\`${prefix}${command.aliases[0]} ${description.usage}\``)
|
||
|
.addField('Description', description.content);
|
||
|
|
||
|
for (const field of description.fields) embed.addField(field.name, field.value);
|
||
|
|
||
|
if (description.examples.length) {
|
||
|
const text = `${prefix}${command.aliases[0]}`;
|
||
|
embed.addField('Examples', `\`${text} ${description.examples.join(`\`\n\`${text} `)}\``, true);
|
||
|
}
|
||
|
|
||
|
if (command.aliases.length > 1) {
|
||
|
embed.addField('Aliases', `\`${command.aliases.join('` `')}\``, true);
|
||
|
}
|
||
|
|
||
|
return message.util.send({ embed });
|
||
|
}
|
||
|
|
||
|
async execCommandList(message) {
|
||
|
const embed = this.client.util.embed()
|
||
|
.setColor(0xFFAC33)
|
||
|
.addField('Command List',
|
||
|
[
|
||
|
'This is a list of commands.',
|
||
|
`To view details for a command, do \`${prefix}help <command>\`.`
|
||
|
]);
|
||
|
|
||
|
for (const category of this.handler.categories.values()) {
|
||
|
const title = {
|
||
|
general: '📝\u2000General',
|
||
|
images: '💕\u2000Images',
|
||
|
utility: '⭐\u2000Utility',
|
||
|
admin: '😎\u2000Admin',
|
||
|
owner: '⚡\u2000Owner'
|
||
|
}[category.id];
|
||
|
|
||
|
if (title) embed.addField(title, `\`${category.map(cmd => cmd.aliases[0]).join('` `')}\``);
|
||
|
}
|
||
|
|
||
|
const shouldReply = message.guild && message.channel.permissionsFor(this.client.user).has('SEND_MESSAGES');
|
||
|
|
||
|
try {
|
||
|
await message.author.send({ embed });
|
||
|
if (shouldReply) return message.util.reply('I\'ve sent you a DM with the command list.');
|
||
|
} catch (err) {
|
||
|
if (shouldReply) return message.util.reply('I could not send you the command list in DMs.');
|
||
|
}
|
||
|
|
||
|
return undefined;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = HelpCommand;
|