const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require("discord.js") const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database('myDatabase.db'); module.exports = { name: 'help', aliases: ['aide'], 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; if (args[0] === 'msg' ) { const embed = new EmbedBuilder() .setTitle("Arguments de messages") .addFields( { name: '{MemberMention}', value: `Mentionne le membre concerné (\`exemple\`: **<@${message.author.id}>**)`, inline: true }, { name: '{MemberName}', value: `Le nom du membre concerné (\`exemple\`: **${message.author.username}**)`, inline: true }, { name: '{MemberDisplayName}', value: `Le pseudo de serveur du membre concerné (\`exemple\`: **${message.member.displayName}**)`, inline: true }, { name: '{MemberJoinedAt}', value: `La date à laquelle le membre concerné a rejoint le serveur (\`exemple\`: **${new Date(message.member.joinedAt).toLocaleDateString('fr-FR')}**)`, inline: true }, { name: '{MemberID}', value: `L\'ID du membre concerné (\`exemple\`: **${message.author.id}**)`, inline: true }, { name: '{MemberPic}', value: `La photo de profil du membre concerné (\`exemple\`: **${message.author.displayAvatarURL({dynamic: true})}**)`, inline: true }, { name: '{MemberCreatedAt}', value: `La date de création du compte du membre concerné (\`exemple\`: **${new Date(message.author.createdAt).toLocaleDateString('fr-FR')}**)`, inline: true }, { name: '{ServerName}', value: `Le nom du serveur concerné (\`exemple\`: **${message.guild.name}**)`, inline: true }, { name: '{ServerMembersCount}', value: `Le nombre total de membres sur le serveur (\`exemple\`: **${message.guild.memberCount}**)`, inline: true } ) return message.reply({ embeds: [embed] }); } else if (args[0] === 'antiraid' ) { const embed = new EmbedBuilder() .setTitle("Help AntiRaid") .setDescription(` **AntiRaid Configuration** La commande \`antiraid\` permet de configurer la protection anti-raid pour votre serveur. Voici comment vous pouvez la configurer : **Syntaxe :** \`\`\` +antiraid [type] [action] \`\`\` **Types disponibles :** - \`whitelist\` : Permet de limiter l'accès aux actions anti-raid uniquement au whitelist du serveur et aux owners et buyer du bot. - \`owner\` : Permet de limiter l'accès aux actions anti-raid uniquement au owners et buyer du bot. - \`buyer\` : Permet de limiter l'accès aux actions anti-raid uniquement aux buyer du bot. - \`off\` : Désactive la protection anti-raid. **Actions disponibles :** - \`derank\` : Retire les rôles dangereux des utilisateurs qui tentent de déclencher un raid. - \`kick\` : Expulse les utilisateurs qui tentent de déclencher un raid. - \`ban\` : Bannit les utilisateurs qui tentent de déclencher un raid. - \`nothing\` : Ne fait rien en réponse à un raid. **Exemples d'utilisation :** - Pour activer la protection anti-raid avec une liste blanche : \`+antiraid whitelist derank\` - Pour désactiver la protection anti-raid : \`+antiraid off\` Note : Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande. `) return message.reply({ embeds: [embed] }); } else if (args[0] === 'backup') { const embed = new EmbedBuilder() .setTitle("Aide pour la commande Backup") .setDescription(` **Gestion des sauvegardes** La commande \`backup\` permet de créer, lister, charger ou supprimer des sauvegardes du serveur. Voici comment vous pouvez l'utiliser : **Syntaxe :** \`\`\` +backup \`\`\` **Paramètres disponibles :** - \`create\` : Crée une sauvegarde du serveur actuel. - \`list\` : Affiche la liste de toutes les sauvegardes disponibles. - \`load\` : Charge une sauvegarde sur le serveur. Vous devez spécifier l'ID de la sauvegarde à charger. - \`delete\` : Supprime une sauvegarde. Vous devez spécifier l'ID de la sauvegarde à supprimer. **Exemples d'utilisation :** * Pour créer une sauvegarde : \`+backup create\` * Pour afficher la liste des sauvegardes : \`+backup list\` * Pour charger une sauvegarde (remplacez \`\` par l'ID de la sauvegarde) : \`+backup load \` * Pour supprimer une sauvegarde (remplacez \`\` par l'ID de la sauvegarde) : \`+backup delete \` Note : Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande. `) return message.reply({ embeds: [embed] }); } else if (args[0] === 'rolelimit') { const embed = new EmbedBuilder() .setTitle("Aide pour la commande RoleLimit") .setDescription(` **Gestion des limites de rôles** La commande \`rolelimit\` permet de gérer les limites de rôles pour les utilisateurs. Voici comment vous pouvez l'utiliser : **Syntaxe :** \`\`\` +rolelimit \`\`\` **Fonctionnalités :** - **Ajouter une limite de rôle :** Utilisez le bouton "Add" pour ajouter une limite à un rôle spécifique. Vous devrez mentionner le rôle ou fournir son ID et spécifier la limite. - **Supprimer une limite de rôle :** Utilisez le bouton "Remove" pour supprimer une limite de rôle. Vous devrez mentionner le rôle ou fournir son ID. **Exemples d'utilisation :** - Pour ajouter une limite de rôle : Sélectionnez le bouton "Add", mentionnez le rôle et spécifiez la limite. - Pour supprimer une limite de rôle : Sélectionnez le bouton "Remove", mentionnez le rôle. Note : Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande. `) return message.reply({ embeds: [embed] }); } else if (args[0] === 'confession') { const embed = new EmbedBuilder() .setTitle("Aide pour le système de confession") .setDescription(` **Configuration du système de confession** Le système de confession permet aux utilisateurs de partager leurs confessions de manière anonyme. Voici comment vous pouvez le configurer : **Syntaxe :** \`\`\` +setconfession [channel|send] [channelID|#channel] \`\`\` **Paramètres disponibles :** - \`channel\` : Définit le salon de confession pour le serveur. Vous devez spécifier l'ID du salon ou mentionner le salon. - \`send\` : Envoie un embed avec un bouton pour ajouter une confession dans le salon spécifié. Vous devez spécifier l'ID du salon ou mentionner le salon. **Exemples d'utilisation :** - Pour définir le salon de confession : \`+setconfession channel \` - Pour envoyer un embed de confession : \`+setconfession send \` **Note : **Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande. `) return message.reply({ embeds: [embed] }); } else { let data = await new Promise((resolve, reject) => { db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { if (err) { console.error(err.message); reject(err); } resolve(row ? JSON.parse(row.value) : {}); }); }); const permissions = data.permissions || {}; const defaultPrefix = "+"; let mainPrefix = data.prefixes && data.prefixes.main ? data.prefixes.main : defaultPrefix; let serverPrefix = data.prefixes && data.prefixes[guildId]; const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix; if (args[0] && client.commands.has(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 commandPerm = await permissions[command.name]; let customAliases = []; if (data.alias && data.alias[command.name]) { customAliases = Object.keys(data.alias[command.name]); } const allAliases = [...(command.aliases || []), ...customAliases]; let aliasesField = { name: 'Alias', value: 'Aucun', inline: true }; if (allAliases.length > 0) { aliasesField.value = allAliases.map(alias => `\`${alias}\``).join(', '); } 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 }, aliasesField, { name: 'Permissions', value: commandPerm === 11 ? 'buyer' : commandPerm === 10 ? 'owner' : `Perm level: ${commandPerm}`, inline: true }, ) .setTimestamp() .setFooter({text: `By Valou336 and tuturp33`, iconURL: client.user.displayAvatarURL({dynamic: true})}) return message.reply({ embeds: [embed_command] }); } const categories = { antiraid: [], botcontrol: [], moderation: [], buyer: [], game: [], gestion: [], utils: [], invitation: [], other: [], }; const categoryEmojis = { antiraid: '🛡️', botcontrol: '🛠️', moderation: '⚖️', buyer: '💰', game: '🎮', gestion: '📝', utils: '⚙️', invitation: '📩', other: '❓', }; let liste = []; for (const command of client.commands.values()) { const existingCommand = liste.find(cmd => cmd.name === command.name); if (!existingCommand) { liste.push(command); } } for (const command of liste) { if (command.category && categories[command.category]) { categories[command.category].push({ name: command.name, description: command.description, emote: command.emote, utilisation: command.utilisation}); } else { categories['other'].push({ name: command.name, description: command.description, emote: command.emote, utilisation: command.utilisation}); } } let totalCommands = liste.length 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}** (${commands.length})\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: `${categoryEmojis[category]} ${category}`, value: category })), ]); const row = new ActionRowBuilder() .addComponents(menu); const sentMessage = await message.reply({ embeds: [embeds[args[0]] || 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: [] }); }); } }, };