Files
gestion/commands/utils/help.js
T
2024-02-17 00:58:16 +01:00

110 lines
4.4 KiB
JavaScript

const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require("discord.js")
const db = require('quick.db');
const GestionDb = new db.table("gestion");
module.exports = {
name: 'help',
description: 'Affiche la liste des commandes',
category: 'utils',
emote: '📚',
utilisation: 'help [commande]',
async execute(message, args, client) {
const botId = client.user.id;
const guildId = message.guild.id;
const defaultprefix = "+";
let mainPrefix = await GestionDb.get(`${botId}.prefix`);
let serverPrefix = await GestionDb.get(`${botId}.${guildId}.prefix`);
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix !== undefined ? mainPrefix : defaultprefix;
if (args[0]) {
const command = client.commands.get(args[0]);
if (!command) {
return message.reply(`Je n'ai pas trouvé de commande nommée "${args[0]}".`);
}
const embed_command = new EmbedBuilder()
.setColor('#0099ff')
.setTitle(`Aide pour la commande ${command.emote ? ` ${command.emote}` : '🔧'} ${command.name}`)
.setDescription(command.description)
.addFields(
{ name: 'Utilisation', value: `\`${prefix}${command.utilisation ? `${command.utilisation}` : ''}\``, inline: true },
{ name: 'Catégorie', value: command.category || 'Non spécifiée', inline: true }
)
.setTimestamp()
.setFooter({text: `${client.user.tag} © 2024`, iconURL: client.user.displayAvatarURL({dynamic: true})})
return message.reply({ embeds: [embed_command] });
}
const categories = {
antiraid: [],
botcontrol: [],
moderation: [],
buyer: [],
game: [],
gestion: [],
utils: [],
};
for (const command of client.commands.values()) {
if (command.category) {
categories[command.category].push({ name: command.name, description: command.description, emote: command.emote, utilisation: command.utilisation});
}
}
let totalCommands = client.commands.size;
let description = `Sélectionnez une catégorie parmi les options ci-dessous pour obtenir de l'aide sur les commandes correspondantes.\n Il y a ${totalCommands} commandes disponibles\n\n`;
for (const [category, commands] of Object.entries(categories)) {
description += `**Catégorie ${category}**\n`;
description += commands.length > 0 ? '> ' + commands.map(command => `\`${command.name}\``).join(', ') : '> Aucune commande dans cette catégorie';
description += '\n\n';
}
const embeds = {
home: new EmbedBuilder()
.setColor('#0099ff')
.setTitle('📚 Information')
.setDescription(description)
.setThumbnail(message.guild.iconURL())
.setTimestamp()
.setFooter({text: `${client.user.tag} © 2024`, iconURL: client.user.displayAvatarURL({dynamic: true})})
};
for (const [category, commands] of Object.entries(categories)) {
let description;
if (commands.length > 0) {
description = commands.map(command => `${command.emote ? ` ${command.emote}` : '🔧'} **${prefix}${command.utilisation ? ` ${command.utilisation}` : ''}**\n \`${command.description}\``).join('\n');
} else {
description = 'Aucune commande dans cette catégorie.';
}
embeds[category] = new EmbedBuilder()
.setColor('#0099ff')
.setTitle(`Catégorie ${category}`)
.setDescription(description)
.setTimestamp()
.setFooter({text: `${client.user.tag} © 2024`, iconURL: client.user.displayAvatarURL({dynamic: true})})
}
const menu = new StringSelectMenuBuilder()
.setCustomId('help_menu')
.setPlaceholder('Sélectionnez une catégorie')
.addOptions([
{ label: 'Accueil', value: 'home' },
...Object.keys(categories).map(category => ({ label: `Catégorie ${category}`, value: category })),
]);
const row = new ActionRowBuilder()
.addComponents(menu);
const sentMessage = await message.reply({ embeds: [embeds.home], components: [row] });
const filter = i => i.customId === 'help_menu' && i.user.id === message.author.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 60000 });
collector.on('collect', async (interaction) => {
await interaction.update({ embeds: [embeds[interaction.values[0]]] });
});
collector.on('end', () => {
sentMessage.edit({ components: [] });
});
},
};