2025-07-30 13:00:23 +02:00

76 lines
2.8 KiB
JavaScript

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}*`;
let translationMessage = `${result.text}${footer}`;
// Vérifier la longueur et tronquer si nécessaire
if (translationMessage.length > 2000) {
const maxContentLength = 2000 - footer.length - 3; // -3 pour "..."
const truncatedText = result.text.substring(0, maxContentLength) + "...";
translationMessage = `${truncatedText}${footer}`;
}
await interaction.editReply(translationMessage);
} catch (error) {
console.error('Erreur lors de la traduction:', error);
await interaction.editReply('❌ Erreur lors de la traduction du message.');
}
},
};