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('lien') .setDescription('Lien du message à traduire') .setRequired(false) ), async execute(interaction, translator) { let messageToTranslate = null; const messageLien = interaction.options.getString('lien'); if (messageLien) { // Extraire les IDs du lien Discord const linkPattern = /https:\/\/discord\.com\/channels\/(\d+)\/(\d+)\/(\d+)/; const match = messageLien.match(linkPattern); if (!match) { await interaction.reply({ content: '❌ Lien de message invalide. Utilisez un lien Discord valide.', ephemeral: true }); return; } const [, guildId, channelId, messageId] = match; try { const channel = await interaction.client.channels.fetch(channelId); messageToTranslate = await channel.messages.fetch(messageId); } catch (error) { await interaction.reply({ content: '❌ Impossible de récupérer le message depuis ce lien.', ephemeral: true }); return; } } else { // Si pas de message en réponse, chercher le message référencé if (interaction.channel && interaction.channel.lastMessage) { // Récupérer le dernier message avant cette interaction const messages = await interaction.channel.messages.fetch({ limit: 2 }); const messagesArray = Array.from(messages.values()); messageToTranslate = messagesArray[1]; // Le message avant l'interaction } } if (!messageToTranslate || !messageToTranslate.content || messageToTranslate.content.trim() === '') { await interaction.reply({ content: '❌ Aucun message à traduire trouvé. Utilisez cette commande en répondant à un message ou après un message contenant du texte.', ephemeral: true }); return; } try { await interaction.deferReply(); // Traduire le message en français const result = await translator.translateText(messageToTranslate.content, null, 'fr'); // Créer la réponse avec la traduction 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; const chunks = []; // Diviser le texte en chunks for (let i = 0; i < translatedText.length; i += maxContentLength) { chunks.push(translatedText.substring(i, i + maxContentLength)); } // Envoyer le premier chunk avec editReply await interaction.editReply(chunks[0] + (chunks.length > 1 ? ' *(suite...)*' : footer)); // Envoyer les chunks suivants avec followUp for (let i = 1; i < chunks.length; i++) { const isLast = i === chunks.length - 1; const chunkMessage = chunks[i] + (isLast ? footer : ' *(suite...)*'); await interaction.followUp(chunkMessage); } } else { await interaction.editReply(translatedText + footer); } } catch (error) { console.error('Erreur lors de la traduction:', error); await interaction.editReply('❌ Erreur lors de la traduction du message.'); } }, };