Remove config.json (not secure) and replace with .env.
Update deploy-commands.js:
- const { token, clientId } = require('./config.json');
+ const { token, clientId } = process.env;
Update index.js:
- const { token, clientId } = require('./config.json');
+ const token = process.env.TOKEN;
86 lines
3.6 KiB
JavaScript
86 lines
3.6 KiB
JavaScript
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.');
|
||
}
|
||
},
|
||
};
|