diff --git a/commands/trad/trad.js b/commands/trad/trad.js new file mode 100644 index 0000000..6262505 --- /dev/null +++ b/commands/trad/trad.js @@ -0,0 +1,49 @@ +const { SlashCommandBuilder } = require('discord.js'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('trad') + .setDescription('Traduit le message auquel vous répondez en français'), + async execute(interaction, translator) { + if (!translator) { + await interaction.reply({ content: '❌ Le service de traduction n\'est pas disponible (token DeepL manquant).', ephemeral: true }); + return; + } + + // Vérifier si la commande est en réponse à un message + const repliedMessage = interaction.options.getMessage('message') || + (interaction.channel.messages.cache.get(interaction.targetId)) || + null; + + // Si pas de message en réponse, chercher le message référencé + let messageToTranslate = null; + + 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 translationMessage = `🇫🇷 **Traduction :**\n${result.text}\n\n*Message original de ${messageToTranslate.author.username}*`; + + await interaction.editReply(translationMessage); + + } catch (error) { + console.error('Erreur lors de la traduction:', error); + await interaction.editReply('❌ Erreur lors de la traduction du message.'); + } + }, +}; diff --git a/index.js b/index.js index 6a050e1..46532e5 100644 --- a/index.js +++ b/index.js @@ -55,48 +55,6 @@ client.once('ready', () => { deploy(token); }); -client.on('messageReactionAdd', async (reaction, user) => { - console.log('reaction received', reaction.emoji.name, user.username); - - if (user.bot) return; - - if (reaction.emoji.name !== '❓') return; - - if (!translator) { - console.log('DeepL token not provided, translation feature disabled'); - return; - } - try { - // Récupérer le message complet si nécessaire - if (reaction.partial) { - await reaction.fetch(); - } - if (reaction.message.partial) { - await reaction.message.fetch(); - } - const message = reaction.message; - console.log(message); - // Vérifier qu'il y a du contenu à traduire - if (!message.content || message.content.trim() === '') { - return; - } - - // Traduire le message en français - const result = await translator.translateText(message.content, null, 'fr'); - - // Créer la réponse avec la traduction - const translationMessage = `🇫🇷 **Traduction :**\n${result.text}\n\n*Message original de ${message.author.username}*`; - - // Envoyer la traduction dans le même canal - await message.reply(translationMessage); - - } catch (error) { - console.error('Erreur lors de la traduction:', error); - // Optionnel : notifier l'utilisateur de l'erreur - await reaction.message.reply('❌ Erreur lors de la traduction du message.'); - } -}); - client.on(Events.InteractionCreate, async interaction => { if (!interaction.isChatInputCommand()) return; @@ -110,7 +68,9 @@ client.on(Events.InteractionCreate, async interaction => { try { if (interaction.commandName === 'server-stats') { await command.execute(interaction, palworldToken); - }else{ + } else if (interaction.commandName === 'trad') { + await command.execute(interaction, translator); + } else { await command.execute(interaction); } } catch (error) {