const sqlite3 = require('sqlite3').verbose(); const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js'); const paginationEmbed = require('discordjs-button-pagination'); module.exports = { name: 'version', description: 'Affiche la version du bot', emote: '📝', utilisation: 'version', category: 'gestion', async execute(message, args, client) { const db = new sqlite3.Database('myDatabase.db'); const botId = message.client.user.id; let versionData = await new Promise((resolve, reject) => { db.get('SELECT value FROM master WHERE id = ?', ['botVersion'], (err, row) => { if (err) { console.error(err.message); reject(err); } resolve(row ? row.value : 'Version non trouvĂ©e'); }); }); const button = new ButtonBuilder() .setCustomId('changelog') .setLabel('Changelog') .setStyle(ButtonStyle.Primary) .setEmoji('📌'); const row = new ActionRowBuilder() .addComponents(button); const embed = new EmbedBuilder() .setTitle('Version du bot') .setDescription(`La version actuelle du bot est : ${versionData}`) .setColor('#0099ff'); message.channel.send({ embeds: [embed], components: [row] }); const filter = i => i.customId === 'changelog' && i.user.id === message.author.id; const collector = message.channel.createMessageComponentCollector({ filter, time: 15000 }); collector.on('collect', async i => { if (i.customId === 'changelog') { let changelogs = await new Promise((resolve, reject) => { db.get('SELECT value FROM master WHERE id = ?', ["changelogGestion"], (err, row) => { if (err) { console.error(err.message); reject(err); } resolve(row ? JSON.parse(row.value) : []); }); }); if (changelogs.length === 0) { const noChangeLogEmbed = new EmbedBuilder() .setTitle('Aucun changement rĂ©cent') .setDescription('Il n\'y a aucun changement rĂ©cent Ă  afficher.') .setColor('#0099ff'); return i.reply({ embeds: [noChangeLogEmbed], ephemeral: true }); } else { const embeds = changelogs.map((log, index) => { const embed = new EmbedBuilder() .setTitle(new Date(log.timestamp).toLocaleDateString()) .setDescription(log.text) .setColor('#0099ff'); return embed; }); sendPaginatedEmbeds(i, embeds); } } }); }, }; async function sendPaginatedEmbeds(interaction, embeds, timeout = 15000) { let currentPage = 0; const row = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId('previousbtn') .setLabel('PrĂ©cĂ©dent') .setStyle(ButtonStyle.Danger) .setDisabled(currentPage === 0), new ButtonBuilder() .setCustomId('nextbtn') .setLabel('Suivant') .setStyle(ButtonStyle.Success) .setDisabled(currentPage === embeds.length - 1) ); const embedMessage = await interaction.reply({ embeds: [embeds[currentPage]], components: [row], fetchReply: true }); const filter = i => i.customId === 'previousbtn' || i.customId === 'nextbtn' && i.user.id === interaction.user.id; const collector = embedMessage.createMessageComponentCollector({ filter, time: timeout }); collector.on('collect', async i => { if (i.customId === 'previousbtn') { currentPage = Math.max(currentPage - 1, 0); } else if (i.customId === 'nextbtn') { currentPage = Math.min(currentPage + 1, embeds.length - 1); } row.components[0].setDisabled(currentPage === 0); row.components[1].setDisabled(currentPage === embeds.length - 1); await i.update({ embeds: [embeds[currentPage]], components: [row] }); }); collector.on('end', collected => { row.components.forEach(button => button.setDisabled(true)); interaction.editReply({ components: [row] }); }); }