test
This commit is contained in:
parent
ab51aabba4
commit
c9a8614531
@ -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 {
|
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);
|
||||||
} catch (error) {
|
messagesToTranslate.push(message);
|
||||||
await interaction.reply({ content: '❌ Impossible de récupérer le message depuis ce lien.', ephemeral: true });
|
} catch (error) {
|
||||||
return;
|
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;
|
|
||||||
|
|
||||||
// Vérifier la longueur et diviser si nécessaire
|
|
||||||
if ((translatedText + footer).length > 2000) {
|
|
||||||
const maxContentLength = 2000 - footer.length;
|
|
||||||
const chunks = [];
|
|
||||||
|
|
||||||
// Diviser le texte en chunks
|
|
||||||
for (let i = 0; i < translatedText.length; i += maxContentLength) {
|
|
||||||
chunks.push(translatedText.substring(i, i + maxContentLength));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Envoyer le premier chunk avec editReply
|
|
||||||
await interaction.editReply(chunks[0] + (chunks.length > 1 ? ' *(suite...)*' : footer));
|
|
||||||
|
|
||||||
// Envoyer les chunks suivants avec followUp
|
|
||||||
for (let i = 1; i < chunks.length; i++) {
|
|
||||||
const isLast = i === chunks.length - 1;
|
|
||||||
const chunkMessage = chunks[i] + (isLast ? footer : ' *(suite...)*');
|
|
||||||
await interaction.followUp(chunkMessage);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
await interaction.editReply(translatedText + footer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
try {
|
||||||
console.error('Erreur lors de la traduction:', error);
|
// Traduire le message en français
|
||||||
await interaction.editReply('❌ Erreur lors de la traduction du message.');
|
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.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user