help.ts
1 import { AmethystCommand } from 'amethystjs'; 2 import { ApplicationCommandOptionType, EmbedBuilder } from 'discord.js'; 3 import { boolEmojis, buildLocalizations } from '../utils/functions'; 4 5 const locals = buildLocalizations('help'); 6 export default new AmethystCommand({ 7 name: 'help', 8 description: 'Displays help page', 9 options: [ 10 { 11 name: 'command', 12 description: 'Command to show help', 13 required: false, 14 autocomplete: true, 15 type: ApplicationCommandOptionType.String, 16 nameLocalizations: locals.options.command.name, 17 descriptionLocalizations: locals.options.command.description 18 } 19 ], 20 cooldown: 5, 21 nameLocalizations: locals.name, 22 descriptionLocalizations: locals.description 23 }).setChatInputRun(({ interaction, options }) => { 24 const cmd: AmethystCommand = interaction.client.chatInputCommands.find( 25 (x) => x.options.name === options.getString('command') 26 ); 27 if (cmd) { 28 return interaction.reply({ 29 embeds: [ 30 new EmbedBuilder() 31 .setTitle( 32 interaction.client.langs.getText(interaction, 'help', 'commandEmbedTitle', { 33 commandName: cmd.options.nameLocalizations[interaction.locale] ?? cmd.options.name 34 }) 35 ) 36 .setDescription(cmd.options.descriptionLocalizations[interaction.locale] ?? cmd.options.description) 37 .setFields( 38 { 39 name: interaction.client.langs.getText(interaction, 'help', 'permissionsName'), 40 value: cmd.options.preconditions?.find((x) => x.name === 'adminIfNotAlone') 41 ? interaction.client.langs.getText(interaction, 'help', 'adminIfNotAlone') 42 : interaction.client.langs.getText(interaction, 'help', 'noPermission'), 43 inline: false 44 }, 45 { 46 name: interaction.client.langs.getText(interaction, 'help', 'GuildOnly'), 47 value: boolEmojis( 48 !(cmd.options.preconditions?.find((x) => x.name === 'GuildOnly') ?? false) 49 ), 50 inline: true 51 } 52 ) 53 .setColor('Orange') 54 .setThumbnail(interaction.client.user.displayAvatarURL({ forceStatic: true })) 55 ] 56 }); 57 } 58 const commands = interaction.client.chatInputCommands.map((x) => x.options); 59 60 const embed = new EmbedBuilder() 61 .setTitle(interaction.client.langs.getText(interaction, 'help', 'help')) 62 .setDescription( 63 interaction.client.langs.getText(interaction, 'help', 'description', { 64 list: commands 65 .map( 66 (c) => 67 `\`${c.nameLocalizations[interaction.locale] ?? c.name}\` : ${ 68 c.descriptionLocalizations[interaction.locale] ?? c.description 69 }` 70 ) 71 .join('\n') 72 }) 73 ) 74 .setThumbnail(interaction.client.user.displayAvatarURL()) 75 .setColor(interaction.client.user.hexAccentColor ?? 'Orange') 76 .setTimestamp() 77 .addFields({ 78 name: interaction.client.langs.getText(interaction, 'help', 'more'), 79 value: interaction.client.langs.getText(interaction, 'help', 'moreValue'), 80 inline: false 81 }); 82 83 interaction.reply({ embeds: [embed] }).catch(() => {}); 84 });