Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

181
Visualizações
Problemas con la declaración asíncrona si calcula el valor final usando promesas de la API de la biblioteca Discord.JS

Tengo problemas, creo que se debe a async. Aquí está el código:

 const calculateMessageKarma = async (reaction) => { if (reaction.partial) {await reaction.fetch();} // Get The Member That Gave Karma & Verify Author = Karma Giver let mK = 0; let tMK = 0; //Upvotes if(await reaction.message.reactions.resolve(config.reactions.UPVOTE)){ let uvotes = await reaction.message.reactions.resolve(config.reactions.UPVOTE).users.fetch() await uvotes.forEach(async vote => { let member = await reaction.client.guilds.cache.find((guild) => guild.id === config.guilds.zentrading).members.fetch(vote.id).then((value) => { return value; }); if(vote.id === reaction.message.author.id) return; // Dont count reactions to own messages if (member.roles.highest.id == config.roles.guildlead.id) { mK += 5} else if (member.roles.highest.id == config.roles.guildmod.id) { mK += 4;} else if (member.roles.highest.id == config.roles.arahant.id) {mK += 3} else if (member.roles.highest.id == config.roles.non_returner.id) {mK += 2} else if (member.roles.highest.id == config.roles.once_returner.id) { mK += 1} else if (member.roles.highest.id == config.roles.non_returner.id) {mK += 1} else {mK += 0} }) } //Downvotes if(await reaction.message.reactions.resolve(config.reactions.DOWNVOTE)){ let dvotes = await reaction.message.reactions.resolve(config.reactions.DOWNVOTE).users.fetch() await dvotes.forEach(async vote => { let member = await reaction.client.guilds.cache.find((guild) => guild.id === config.guilds.zentrading).members.fetch(vote.id).then((value) => { return value; }); if(vote.id === reaction.message.author.id) return; // Dont count reactions to own messages if (member.roles.highest.id == config.roles.guildlead.id) { mK += -5} else if (member.roles.highest.id == config.roles.guildmod.id) { mK += -4;} else if (member.roles.highest.id == config.roles.arahant.id) {mK += -3} else if (member.roles.highest.id == config.roles.non_returner.id) {mK += -2} else if (member.roles.highest.id == config.roles.once_returner.id) { mK += -1} else if (member.roles.highest.id == config.roles.non_returner.id) {mK += -1} else {mK += 0} }) } if (mK > 0) { tMK = 2 + Math.floor(mK / 10) * 1;} else if (mK < 0){ tMK = -1 + Math.floor(mK / 5) * -1;} else { tMK = 0;} return tMK; }

Esto está destinado a contar el número de dos reacciones diferentes y asignar el peso de estas reacciones en función del rol de los miembros y luego tomar el valor mK y calcular una puntuación para el mensaje en función de una fórmula. El código funciona bien para config.reactions.UPVOTE pero la declaración config.reactions.DOWNVOTE if casi se ignora. He depurado y determinado que las declaraciones if se están evaluando pero no devuelven el cálculo adecuado.

También sé que las ID son correctas, ya que cuando se llama a messageReactionAdded y messageReactionRemove, está verificando la reacción antes de llamar a esta función.

Versión del nodo: 16.4.0

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Pude encontrar una solución usando lo siguiente:

Como parte de la documentación: await reaction.message.reactions.resolve(config.reactions.DOWNVOTE).users.fetch()

Se resuelve con una colección de usuarios, mapeados por sus ID.

ingrese la descripción de la imagen aquí

Por lo tanto, necesitamos usar .values() para devolver un mapa que podamos iterar usando algo como esto:

 let votes = await reaction.message.reactions.resolve(config.reactions.DOWNVOTE).users.fetch().then(users => {return users.values()}) for(vote of votes){

Este bucle for ahora devuelve correctamente los valores necesarios para calcular mK.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda