Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

282
Views
Forma de filtro de reacción del colector Discord para establecer un límite máximo

Estoy haciendo un comando para traducir todos los mensajes que tienen una determinada reacción al idioma del emoji de la bandera (con el que reaccionó el usuario).

Pero quiero que el bot solo traduzca una vez para un idioma (si hay dos usuarios que reaccionan con la bandera de EE. UU., traducirá el mensaje al inglés solo una vez).

Puedo usar el filtro de reacción, pero en mi caso, para un mejor código, estoy usando una declaración de cambio, por lo que si uso la propiedad max en el filtro de reacción, no podría traducir varias veces un mensaje (solo una vez).

Aquí está mi código:

 bot.on('message', async (msg) => { const reactionFilter = (reaction, user) => { return msg.author.id !== '724682218454253588'; }; collector = msg.createReactionCollector(reactionFilter); collector.on('collect', async (reaction, user) => { switch (reaction.emoji.name) { case '🇫🇷': TranslateMessage(msg, 'fr'); break; case '🇺🇸': TranslateMessage(msg, 'en'); break; case '🇩🇪': TranslateMessage(msg, 'de'); break; case '🇪🇸': TranslateMessage(msg, 'es'); break; case '🇯🇵': TranslateMessage(msg, 'ja'); break; } }); });

(Tengo muchos más idiomas que eso en esta declaración de cambio, pero para la pregunta es más fácil de leer)

Y aquí está la función TranslateMessage:

 async function TranslateMessage(msg, lang) { try { const traduction = await traduire(msg.content, lang); const MessEmbed = new MessageEmbed() .setAuthor(msg.author.username, msg.author.avatarURL) .setDescription(traduction); return msg.channel.send(MessEmbed); } catch (error) { return msg.channel.send("There's an error, try again !"); } }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puedes comprobar el recuento de reaction.count que devuelve el número de personas que han dado la misma reacción. Si es mayor que 1 , no necesita traducir el mensaje a ese idioma.

 collector.on('collect', async (reaction, user) => { if (reaction.count > 1) return; // there is already a translation for this reaction switch (reaction.emoji.name) { case '🇫🇷': TranslateMessage(msg, 'fr'); break; case '🇺🇸': TranslateMessage(msg, 'en'); break; case '🇩🇪': TranslateMessage(msg, 'de'); break; case '🇪🇸': TranslateMessage(msg, 'es'); break; case '🇯🇵': TranslateMessage(msg, 'ja'); break; } });

Si desea evitar enviar una nueva traducción cuando un usuario elimine la última reacción (lo que significa que el recuento de reaction.count volverá a ser cero) y luego la agrega nuevamente, puede usar el evento messageReactionRemove . Se emite cada vez que se elimina una reacción, por lo que puede verificar si el recuento de reaction.count se redujo a cero y reaccionar como un bot con el mismo emoji. Por supuesto, también desencadenaría una traducción, por lo que deberá filtrar la reacción del bot:

 bot.on('message', async (msg) => { const reactionFilter = () => { return msg.author.id !== '724682218454253588'; }; const collector = msg.createReactionCollector(reactionFilter); collector.on('collect', (reaction, user) => { if (reaction.count > 1 || user.bot) return; switch (reaction.emoji.name) { case '🇫🇷': TranslateMessage(msg, 'fr'); break; case '🇺🇸': TranslateMessage(msg, 'en'); break; case '🇩🇪': TranslateMessage(msg, 'de'); break; case '🇪🇸': TranslateMessage(msg, 'es'); break; case '🇯🇵': TranslateMessage(msg, 'ja'); break; } }); }); bot.on('messageReactionRemove', (reaction) => { if (reaction.count === 0) reaction.message.react(reaction.emoji); });
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!