2025-07-30 13:08:19 +02:00

99 lines
3.4 KiB
JavaScript

const { SlashCommandBuilder, MessageFlags } = 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.', flags: MessageFlags.Ephemeral});
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é.', flags: MessageFlags.Ephemeral });
return;
}
// Supprimer le message de commande
await interaction.deferReply({ flags: MessageFlags.Ephemeral });
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.');
}
}
},
};