const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js'); const db = require('../../functions/database/db.js'); module.exports = { category: 'moderation', data: new SlashCommandBuilder() .setName('casier') .setDescription('Voir toutes les sanctions d’un membre.') .addUserOption(option => option.setName('membre') .setDescription('Le membre dont tu veux voir le casier') .setRequired(true)), async execute(interaction) { await interaction.deferReply(); const member = interaction.options.getUser('membre'); try { const [rows] = await db.query( 'SELECT * FROM logs WHERE userId = ? ORDER BY timestamp DESC', [member.id] ); if (!rows.length) return interaction.editReply(`❌ ${member.tag} n’a aucune sanction.`); // Découpe les sanctions en pages de 25 const pages = []; for (let i = 0; i < rows.length; i += 10) { pages.push(rows.slice(i, i + 10)); } const embeds = pages.map((page, pageIndex) => { const embed = new EmbedBuilder() .setTitle(`Casier de ${member.tag} - Page ${pageIndex + 1}/${pages.length}`) .setColor('Orange') .setTimestamp(); page.forEach((row, index) => { const date = new Date(row.timestamp).toLocaleString(); const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1); const action = row.action || 'N/A'; const guildName = row.guildId ? interaction.client.guilds.cache.get(row.guildId)?.name || 'Unknown Server' : 'Unknown Server'; embed.addFields({ name: `#${index + 1 + pageIndex * 10} - ${actionCapitalized}`, value: `**Modérateur:** <@${row.modId}> (${row.modTag || 'N/A'})\n` + `**Raison:** ${row.reason || 'N/A'}\n` + `**Serveur:** ${guildName}\n` + `**Date:** ${date}\n` + `**Type:** ${action}`, inline: false }); }); return embed; }); // Composants pour naviguer const row = new ActionRowBuilder().addComponents( new ButtonBuilder().setCustomId('prev').setLabel('⬅️').setStyle(ButtonStyle.Primary), new ButtonBuilder().setCustomId('next').setLabel('➡️').setStyle(ButtonStyle.Primary) ); let currentPage = 0; const message = await interaction.editReply({ embeds: [embeds[currentPage]], components: [row] }); // Collecteur de boutons const collector = message.createMessageComponentCollector({ time: 60_000 }); collector.on('collect', i => { if (i.user.id !== interaction.user.id) return i.reply({ content: 'Ce n’est pas ton menu !', embeds: [embed] }); if (i.customId === 'next') currentPage = (currentPage + 1) % embeds.length; if (i.customId === 'prev') currentPage = (currentPage - 1 + embeds.length) % embeds.length; i.update({ embeds: [embeds[currentPage]] }); }); } catch (err) { console.error(err); await interaction.editReply('❌ Une erreur est survenue lors de la récupération du casier.'); } }, };