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

View File

@ -5,85 +5,94 @@ 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;
} }
const [, guildId, channelId, messageId] = match; for (const match of matches) {
const [, guildId, channelId, messageId] = match;
try {
const channel = await interaction.client.channels.fetch(channelId); try {
messageToTranslate = await channel.messages.fetch(messageId); const channel = await interaction.client.channels.fetch(channelId);
} catch (error) { const message = await channel.messages.fetch(messageId);
await interaction.reply({ content: '❌ Impossible de récupérer le message depuis ce lien.', ephemeral: true }); messagesToTranslate.push(message);
return; } catch (error) {
console.error(`Impossible de récupérer le message ${messageId}:`, error);
}
} }
} 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;
} }
try { // Supprimer le message de commande
await interaction.deferReply(); await interaction.deferReply({ ephemeral: true });
await interaction.deleteReply();
// Traduire le message en français // Traiter chaque message
const result = await translator.translateText(messageToTranslate.content, null, 'fr'); for (const messageToTranslate of messagesToTranslate) {
if (!messageToTranslate.content || messageToTranslate.content.trim() === '') {
// Créer la réponse avec la traduction continue;
const footer = `\n\n*Message original de ${messageToTranslate.author.username} dans ${messageToTranslate.channel.name}*`; }
const translatedText = result.text;
try {
// Vérifier la longueur et diviser si nécessaire // Traduire le message en français
if ((translatedText + footer).length > 2000) { const result = await translator.translateText(messageToTranslate.content, null, 'fr');
const maxContentLength = 2000 - footer.length;
const chunks = []; const footer = `\n\n*Message original de ${messageToTranslate.author.username} dans ${messageToTranslate.channel.name}*`;
const translatedText = result.text;
// Diviser le texte en chunks
for (let i = 0; i < translatedText.length; i += maxContentLength) { // Vérifier la longueur et diviser si nécessaire
chunks.push(translatedText.substring(i, i + maxContentLength)); if ((translatedText + footer).length > 2000) {
} const maxContentLength = 2000 - footer.length - 15; // -15 pour " *(suite...)*"
const chunks = [];
// Envoyer le premier chunk avec editReply
await interaction.editReply(chunks[0] + (chunks.length > 1 ? ' *(suite...)*' : footer)); // Diviser le texte en chunks
for (let i = 0; i < translatedText.length; i += maxContentLength) {
// Envoyer les chunks suivants avec followUp chunks.push(translatedText.substring(i, i + maxContentLength));
for (let i = 1; i < chunks.length; i++) { }
const isLast = i === chunks.length - 1;
const chunkMessage = chunks[i] + (isLast ? footer : ' *(suite...)*'); // Envoyer tous les chunks
await interaction.followUp(chunkMessage); for (let i = 0; i < chunks.length; i++) {
} const isLast = i === chunks.length - 1;
} else { const chunkMessage = chunks[i] + (isLast ? footer : ' *(suite...)*');
await interaction.editReply(translatedText + footer); 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.');
} }
} catch (error) {
console.error('Erreur lors de la traduction:', error);
await interaction.editReply('❌ Erreur lors de la traduction du message.');
} }
}, },
}; };