This commit is contained in:
Louis Mazin 2025-07-30 13:05:46 +02:00
parent ab51aabba4
commit c9a8614531

View File

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