const { SlashCommandBuilder, RoleFlags } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('trad') .setDescription('Traduit le message indiqué en français') .addStringOption(option => option.setName('liens') .setDescription('Lien(s) du/des message(s) à traduire (séparés par des espaces)') .setRequired(false) ), async execute(interaction, translator) { let messagesToTranslate = []; const messageLiens = interaction.options.getString('liens'); if (messageLiens) { // Extraire les IDs des liens Discord multiples const linkPattern = /https:\/\/discord\.com\/channels\/(\d+)\/(\d+)\/(\d+)/g; const matches = [...messageLiens.matchAll(linkPattern)]; if (matches.length === 0) { await interaction.reply({ content: '❌ Aucun lien de message valide trouvé. Utilisez des liens Discord valides.', ephemeral: true }); return; } for (const match of matches) { const [, guildId, channelId, messageId] = match; try { const channel = await interaction.client.channels.fetch(channelId); const message = await channel.messages.fetch(messageId); messagesToTranslate.push(message); } catch (error) { console.error(`Impossible de récupérer le message ${messageId}:`, error); } } } else { // Si pas de lien, chercher le message précédent if (interaction.channel && interaction.channel.lastMessage) { const messages = await interaction.channel.messages.fetch({ limit: 2 }); const messagesArray = Array.from(messages.values()); const messageToTranslate = messagesArray[1]; if (messageToTranslate) { messagesToTranslate.push(messageToTranslate); } } } if (messagesToTranslate.length === 0) { await interaction.reply({ content: '❌ Aucun message à traduire trouvé.', ephemeral: true }); return; } // Supprimer le message de commande await interaction.deferReply({ ephemeral: true }); await interaction.deleteReply(); // Traiter chaque message for (const messageToTranslate of messagesToTranslate) { if (!messageToTranslate.content || messageToTranslate.content.trim() === '') { continue; } try { // Traduire le message en français const result = await translator.translateText(messageToTranslate.content, null, 'fr'); const footer = `\n\n*Message original de ${messageToTranslate.author.username} dans ${messageToTranslate.channel.name}*`; const translatedText = result.text; // Vérifier la longueur et diviser si nécessaire if ((translatedText + footer).length > 2000) { const maxContentLength = 2000 - footer.length - 15; // -15 pour " *(suite...)*" const chunks = []; // Diviser le texte en chunks for (let i = 0; i < translatedText.length; i += maxContentLength) { chunks.push(translatedText.substring(i, i + maxContentLength)); } // Envoyer tous les chunks for (let i = 0; i < chunks.length; i++) { const isLast = i === chunks.length - 1; const chunkMessage = chunks[i] + (isLast ? footer : ' *(suite...)*'); await interaction.channel.send(chunkMessage); } } else { await interaction.channel.send(translatedText + footer); } } catch (error) { console.error('Erreur lors de la traduction:', error); await interaction.channel.send('❌ Erreur lors de la traduction du message.'); } } }, };