Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

283
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda