From e126826fa4c7461c0791a6a5e9a6bb149a970477 Mon Sep 17 00:00:00 2001 From: Johan Date: Wed, 7 Sep 2022 21:56:48 +0200 Subject: [PATCH] Module page d'aide --- modules/bachero.module.help/help.js | 58 ++++++++++++++++------ modules/bachero.module.help/manifest.jsonc | 1 - 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/modules/bachero.module.help/help.js b/modules/bachero.module.help/help.js index cfa2aba..050ecc4 100644 --- a/modules/bachero.module.help/help.js +++ b/modules/bachero.module.help/help.js @@ -1,12 +1,8 @@ -const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType } = require('discord.js') +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js') const bacheroFunctions = require('../../functions') -var botName = bacheroFunctions.config.getValue('bachero', 'botName') -var listCommand = new Map() +var listCommand = [] module.exports = { - // Propriétés additionnelles à la commande - disableSlashToText: true, - // Définir les infos de la commande slash slashInfo: new SlashCommandBuilder() .setName('help') @@ -20,18 +16,52 @@ module.exports = { // Si on a pas encore la liste des modules, le définir if(!listCommand?.size){ var allModulesDetails = bacheroFunctions.modules.allModulesDetails() - allModulesDetails.forEach((mod,i) => { - (mod?.commands || []).forEach((cmd,j) => { - listCommand.set(cmd.name, { module: mod, command: cmd }) + allModulesDetails.forEach((mod) => { + (mod?.commands || []).forEach((cmd) => { + listCommand.push({ name: cmd.name, module: mod, command: cmd }) }) }) } - console.log(listCommand) -// https://www.npmjs.com/package/discordjs-button-embed-pagination + // Obtenir le nom de la commande - var commandname = interaction.options.getString('commandname') + var commandName = interaction.options.getString('commandname') + + // Si aucun nom de commande n'est donné, obtenir la liste complète + if(!commandName){ + // TODO: trouver un moyen pour afficher l'embed même quand on a trop de trucs à afficher + var embed = new EmbedBuilder() + .setTitle('Liste des commandes') + .setDescription(`${listCommand.length} commandes ont été trouvés :\n\n• ${listCommand.map(m => m.name + ' : ' + m.command.description.replace(/`/g, "`" + String.fromCharCode(8203))).join('\n• ')}`.substring(0, 4000)) + .setColor(bacheroFunctions.config.getValue('bachero', 'embedColor')) + interaction.reply({ embeds: [embed] }).catch(err => {}) + } + // Sinon, obtenir les infos sur la commande + else { + // Obtenir la commande + var command = listCommand.find(m => m.name == commandName) - // Obtenir la liste des modules - var modules = Object.values(Object.fromEntries(allModulesDetails)) + // Si la commande n'existe pas, répondre avec un message d'erreur + if(!command){ + var embed = new EmbedBuilder() + .setTitle('Commande introuvable') + .setDescription(`Aucune commande avec le nom \`${commandName.replace(/`/g, "`" + String.fromCharCode(8203))}\` n'a été trouvé. Utiliser la commande d'aide sans arguments pour obtenir la liste complète.`) + .setColor(bacheroFunctions.config.getValue('bachero', 'embedColor')) + return interaction.reply({ embeds: [embed] }).catch(err => {}) + } + + // Faire une variable qui contiendra les indications sur les arguments + if(command?.command?.options?.length && interaction.sourceType == 'textCommand') var argumentsText = command?.command?.options?.map(o => (o.required ? '<' : '[') + o.name + ':' + o.type?.toString()?.replace('3', 'contenu').replace('4', 'nombre entier').replace('5', 'true/false').replace('6', 'utilisateur').replace('7', 'salon').replace('8', 'rôle').replace('9', 'utilisateur ou rôle').replace('10', 'nombre').replace('11', 'attachement') + (o.required ? '>' : ']')).join('; ') + else if(command?.command?.options?.length) var argumentsText = `\nㅤ • ${command?.command?.options?.map(o => o.name).join('\nㅤ • ')}` + if(argumentsText) argumentsText = `\n**Arguments** : ${argumentsText}` + + // Sinon, créer un embed pour afficher les infos de la commande + var embed = new EmbedBuilder() + .setTitle(command.name) + .setDescription(`${command?.module?.whitelistedGuildIds?.length && !command?.module?.whitelistedGuildIds?.includes(interaction.guildId) ? '⚠️ Non autorisé sur ce serveur\n' : ''}${command?.command?.slashToText == false ? '⚠️ Uniquement disponible pour les commandes slash\n' : ''}\n> ${command.command.description.replace(/\n/g, ' ').replace(/`/g, "`" + String.fromCharCode(8203))}\n\n**Provient du module :** ${command.module.packageName}${argumentsText}`) + .setColor(bacheroFunctions.config.getValue('bachero', 'embedColor')) + + // Répondre avec l'embed + interaction.reply({ embeds: [embed] }).catch(err => {}) + } } } \ No newline at end of file diff --git a/modules/bachero.module.help/manifest.jsonc b/modules/bachero.module.help/manifest.jsonc index fd4e261..947f8f6 100644 --- a/modules/bachero.module.help/manifest.jsonc +++ b/modules/bachero.module.help/manifest.jsonc @@ -1,5 +1,4 @@ { - "disabled": true, // Nom unique, plusieurs modules ne peuvent pas avoir le même nom "packageName": "bachero.module.help",