UNPKG

commandbot

Version:

A framework that helps you create your own Discord bot easier.

132 lines (131 loc) 6.97 kB
import { MessageEmbed } from "discord.js"; import { ChatCommand } from "./ChatCommand.js"; import { SubCommand } from "./SubCommand.js"; import { SubCommandGroup } from "./SubCommandGroup.js"; /** * @class Chat command containing a list of all command in the given manager (help message) */ export class HelpMessage extends ChatCommand { /** * Help message appearance options * @type {HelpMessageParams} * @private * @readonly */ _appearance; /** * Help message constructor * @constructor * @param {CommandManager} cmdManager - command manager related to this command * @param {HelpMessageParams} options - appearance properties */ constructor(cmdManager, options) { super(cmdManager, { name: "help", usage: options.usage, permissions: undefined, description: options.description, visible: options.visible, ephemeral: options.ephemeral, parameters: [ { name: "command_name", description: "Name of the command that you want to get details about", optional: true, type: "string", }, ], function: (input) => this.generateMessage(input.interaction, input.get("command_name", "string") ?? undefined), }); this._appearance = options; } /** * * @param {Interaction | Message} i - Discord interaction * @param {?string} [cmdName] - command name (if any) * @returns {MessageEmbed} A computed help message in form of {@link MessageEmbed} * @public */ generateMessage(i, cmdName) { const helpMsg = new MessageEmbed(); helpMsg.setColor(this._appearance.color ?? "BLUE"); helpMsg.setTimestamp(); helpMsg.setFooter(this.manager.client.name || ""); if (helpMsg != null) { if (cmdName) { const cmd = this.manager.get(cmdName?.toString() || "", "CHAT"); if (cmd instanceof ChatCommand) { if (Array.isArray(cmd.guilds) && cmd.guilds.length > 0 && !cmd.guilds.find((g) => i?.guild?.id === g)) { throw new ReferenceError(`Command "${cmd.name}" is not available`); } helpMsg.setTitle(`${cmd.name} ${cmd.visible ? "" : "[HIDDEN]"}`); helpMsg.setDescription(cmd.description); if (cmd.usage) helpMsg.addField("Usage:", `${this.manager.prefix.get(i.guild || undefined) || "/"}${cmd.name} ${cmd.usage}`, false); if (cmd.permissions.isCustom) { helpMsg.addField("Permissions:", "Custom", false); } else { let permList = ""; cmd.permissions.permissions.toArray(false).map((p) => { permList += p + "\n"; }); permList && helpMsg.addField("Permissions:", permList, false); } if (cmd.aliases && cmd.aliases.length > 0) { let aList = ""; cmd.aliases.map((a) => { aList += a + "\n"; }); aList && helpMsg.addField("Aliases:", aList, false); } helpMsg.addField("Slash command:", cmd.slash ? "ENABLED" : "DISABLED", false); helpMsg.addField("Command scope:", Array.isArray(cmd.guilds) && cmd.guilds.length > 0 ? "CUSTOM" : "GLOBAL", false); if (cmd.hasSubCommands) { cmd.children.map((sc) => { if (sc instanceof SubCommand) { helpMsg.addField(`${this.manager.prefix.get(i.guild || undefined) ?? "/"}${cmd.name}${this.manager.commandSeparator}${sc.parent instanceof SubCommandGroup ? `${sc.parent.name}${this.manager.commandSeparator}${sc.name}` : `${sc.name}`} ${sc.usage}`, sc.description, false); } else { sc.children.map((scgch) => { helpMsg.addField(`${this.manager.prefix.get(i.guild || undefined) ?? "/"}${cmd.name}${this.manager.commandSeparator}${sc.name}${this.manager.commandSeparator}${scgch.name} ${scgch.usage}`, scgch.description, false); }); } }); } } else { throw new ReferenceError(`Command "${cmdName}" does not exist`); } } else { helpMsg.setTitle(this._appearance.title); this._appearance.bottomText && helpMsg.setDescription(this._appearance.bottomText); this.manager.list("CHAT").map((c) => { if (c.visible && ((Array.isArray(c.guilds) && c.guilds.length > 0 && c.guilds.find((g) => i?.guild?.id === g)) || !Array.isArray(c.guilds) || c.guilds.length === 0)) { if (c.hasSubCommands) { const prefix = this.manager.prefix.get(i.guild || undefined); let contents = `${c.description}`; c.children.map((sc) => { if (sc instanceof SubCommand) { contents += `\n**${this.manager.prefix.get(i.guild || undefined) ?? "/"}${c.name}${this.manager.commandSeparator}${sc.parent instanceof SubCommandGroup ? `${sc.parent.name}${this.manager.commandSeparator}${sc.name}` : `${sc.name}`} ${sc.usage}**\n${sc.description}`; } else { sc.children.map((scgch) => { contents += `\n**${this.manager.prefix.get(i.guild || undefined) ?? "/"}${c.name}${this.manager.commandSeparator}${sc.name}${this.manager.commandSeparator}${scgch.name} ${scgch.usage}**\n${scgch.description}`; }); } }); helpMsg.addField(`${prefix ?? ""}${c.name} ${prefix ? c.usage : ""}`, contents, false); } else { helpMsg.addField(`${this.manager.prefix.get(i.guild || undefined) ?? "/"}${c.name} ${c.usage}`, c.description, false); } } }); } } return helpMsg; } }