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

492
Visualizações
Discord.js v13 comprueba si el botón ya se ha presionado

¿Hay alguna forma de usar colectores/interacciónCrear para detectar si un usuario ya presionó un botón específico en un mensaje específico? Una forma en que intenté hacerlo fue guardarlo en una matriz como esta

 const alreadyPressed = [] const filter = m => m.customId === "No" && m.messageId === interaction.messageId && m.user.id === interaction.user.id; collector = embedMsg.createMessageComponentCollector({filter: filter, time: 10000});//86400000 collector.on('collect', async i => { client.logger("collector1 collected") client.logger(alreadyPressed.indexOf(i.user.id, i.messageId)) if (alreadyPressed.indexOf(i.user.id, i.messageId)) { return i.reply({ content: `You've already voted ${i.user.username}!`, ephemeral: true }) } else { i.reply({ content: `Thank you for your vote ${i.user.username}!`, ephemeral: true }); alreadyPressed.push(i.user.id, i.messageId) } }); collector.on('end', collected => { client.logger(collected.size) // if (collected.size < 10) { // } delete alreadyPressed[0] delete alreadyPressed[1] });

pero el bot siempre termina respondiendo "Ya has votado", entonces, ¿cuál sería una forma viable de verificar esto?

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

0

Está utilizando Array#indexOf() que devuelve -1 si no lo encuentra (JavaScript lo ve como un valor verdadero). También te recomendaría poner los valores en un objeto o en su propia matriz (al presionar)

 const alreadyPressed = [] // ... collector.on('collect', async i => { // logs if (alreadyPressed.includes({userID: i.user.id, messageID: i.messageId})) { return i.reply({ content: `You've already voted ${i.user.username}!`, ephemeral: true }) } else { i.reply({ content: `Thank you for your vote ${i.user.username}!`, ephemeral: true }); alreadyPressed.push({userID: i.user.id, messageID: i.messageId}) } })
about 4 years ago · Juan Pablo Isaza Relatório

0

como dijo MrMythical, Array#indexOf() simplemente devolverá -1 ya que no puede encontrarlo, probé esto un poco y descubrí que usar y almacenar los valores en una matriz es probablemente lo que está buscando. También los puse juntos, ya que no es necesario separarlos, luego uso .find() para buscar en la matriz si coincide con la identificación de los usuarios y la identificación del mensaje en el que está activado el botón. Esta sería una forma viable de hacerlo.

 const alreadyPressed = [] const filter = m => m.customId === "No" collector = embedMsg.createMessageComponentCollector({filter: filter, time: 10000});//86400000 collector.on('collect', async i => { if (!!alreadyPressed.find(id => { return id.ID === i.user.id+i.message.id })) { i.reply({ content: `You've already voted ${i.user.username}!`, ephemeral: true }) } else { i.reply({ content: `Thank you for your vote ${i.user.username}!`, ephemeral: true }); alreadyPressed.push({ID: i.user.id+i.message.id}) } }); collector.on('end', collected => { client.logger(collected.size) // if (collected.size < 10) { // } delete alreadyPressed });
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