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

82
Visualizações
Caché de roles de bot de Discord.js fuera de sincronización

Acabo de empezar a tener un problema con mi bot de gestión de roles discord.js. El bot agregará con éxito un rol en el evento de reacción. Si un usuario elimina la reacción, el rol debería desaparecer.

Tengo un método auxiliar que regresa temprano si el usuario no tiene el rol (para evitar trabajo innecesario y mantener limpio el registro). Este método evita que el rol se elimine en el primer evento de eliminación de reacción. La secuencia es la siguiente:

  1. El usuario agrega una reacción, el bot le da al usuario un nuevo rol
  2. El usuario elimina la reacción, el bot regresa temprano porque guild.members.cache.get(user.id).roles.cache.has(role.id) devuelve false.
  3. El usuario agrega la reacción nuevamente, el bot regresa temprano, pero ahora el rol aparece en el caché de roles del usuario.
  4. El usuario elimina la reacción nuevamente, el bot elimina el rol del usuario.

El rol aparece correctamente en Discord correctamente la primera vez, sin embargo, hice algunas investigaciones y agregué el siguiente código al bot:

 guild.members.cache.get(member.id).roles.add(role.id) .then(() => guild.members.cache.get(author.id)) .then(user => console.log(user._roles));

El resultado no incluye el nuevo rol, a pesar de que el usuario está promocionado en el cliente, por lo que parece que la memoria caché no se actualiza de inmediato. ¿Cómo puedo asegurarme de obtener la información más actualizada?

Editar: terminé solucionando esto creando mi propio caché para almacenar roles, pero para la posteridad, aquí hay un código adicional para tratar de aislar la causa:

 let guild; const messageId = //some value const roleId = //some value const channelId = //some value const emojiName = //some value client.on('messageReactionAdd', async (reaction, user) => { handleReactionAdded(reaction, user) }); client.on('messageReactionRemove', async (reaction, user) => { handleReactionRemoval(reaction, user) }); const handleReactionAdded = async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (reaction.partial) await reaction.fetch(); if (user.bot || !reaction.message.guild) return; if (reaction.message.id == messageId && reaction.message.channel.id == channelId && reaction.emoji.name === emojiName) { guild = reaction.message.guild if (_hasRole(user)) return; guild.members.cache .get(user.id) .roles .add(roleId) } const handleReactionAdded = async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (reaction.partial) await reaction.fetch(); if (user.bot || !reaction.message.guild) return; if (reaction.message.id == messageId && reaction.message.channel.id == channelId && reaction.emoji.name === emojiName) { guild = reaction.message.guild if (!_hasRole(user)) return; guild.members.cache .get(user.id) .roles .remove(roleId) } const _hasRole = user => { return guild.members.cache.get(user.id).roles.has(roleId); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Si se trata de un problema con el caché desactualizado, forzar la recuperación del miembro de la API después de agregar el rol podría resolverlo, ya que el administrador de roles no parece tener su propio método de recuperación, pero no estoy seguro.

 await guild.members.fetch({user, force: true})
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