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

255
Vistas
Discord.js Bot no puede manejar múltiples botones en el mismo canal (Versión 13)

¿Hay alguna forma de que dos personas utilicen un comando con botones al mismo tiempo en el mismo canal ?

Hice un sistema de aventuras que va bien hasta ahora, pero descubrí que solo una persona puede usarlo en un canal. Si otra persona lo usa en el mismo canal, el error "DiscordAPIError: Interacción desconocida" aparece tan pronto como se usa un botón. Intenté agregar la identificación del autor del mensaje a la identificación personalizada de los botones, pero todavía no funciona por alguna razón y estoy completamente confundido.

Por lo que entiendo, creo que no está relacionado con que haya múltiples instancias de botones, pero no puedo pensar en ninguna otra razón. Aquí está el filtro:

 const filter = async (interaction) => { if (interaction.user.id === message.author.id) return true; await interaction.deferReply() await interaction.editReply({ content: `**${interaction.user.username}**, You can't use this button!`, ephemeral: true}) return false }

Y el detector de clics de botón es algo como esto:

 GameCollect.on('collect', async ButtonInteraction => { ButtonInteraction.deferUpdate() // My code })

Yo he tratado:

  • Eliminando ButtonInteraction.deferUpdate() de todos mis recopiladores de clics.

  • Hacer que las identificaciones personalizadas para los botones tengan la identificación del autor del mensaje al final y hacer que mi código sea compatible con ese cambio.

  • Aplastando mi cabeza en mi teclado por la confusión. Tampoco funcionó... (sátira)

Si es necesario, puedo copiar mi código en una réplica para que pueda identificar el problema más fácilmente, pero no creo que las otras partes tengan ningún efecto en esto. Creo que es solo un código/un pequeño ajuste que debo agregar para que funcione con dos personas en el mismo canal.

EDITAR: Muy bien, aquí hay un contenedor de origen para que pueda identificar mejor el problema. Consulte los comentarios sobre la respuesta reciente para obtener algunas aclaraciones sobre mis pruebas también. Te mantendré informado si encuentro una solución.

DESCARGO DE RESPONSABILIDAD: Todavía no he encontrado una manera de hacer que esto funcione en más de un mes, y básicamente estoy renunciando a los botones. Gracias a todos los que ayudaron sin embargo.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Intentalo:

  • Eliminar await interaction.deferReply() del filtro
  • Cree ID personalizados dinámicos como Math.random()

EDITAR:

  • descripción: tuve el mismo problema recientemente en mi propio bot. El problema es que cuando hay 2 mensajes que tienen recopiladores (básicamente están esperando una interacción), si llamas a await interaction.deferReply() pronto, se complicará , así que aquí está la solución
  • En primer lugar , busquemos la función de filtro para verificar la interacción. Necesitamos 2 cosas:
    • Comprobación de la identificación del botón con la identificación del botón de interacción entrante
    • Verificando que el usuario sea el real
  • Después de todos estos
    • elimine deferReply de la función de filtro, porque cuando no verificó las interacciones, llamar a deferReply llamará a ambos mensajes o a todos los mensajes que están esperando interacción
    • agregue el deferReply a la función que está después del filtro

Y no recuerde usar identificaciones aleatorias para los componentes (botones, menús de selección y...)

about 4 years ago · Juan Pablo Isaza Denunciar

0

En lugar de crear un recopilador en el canal de texto, debe crear el recopilador en el mensaje real

 const GameCollect = message.channel.createMessageComponentCollector({ filter, time: 60000 * 15 })

A

 const GameCollect = <Message>.createMessageComponentCollector({ filter, time: 60000 * 15 })
about 4 years ago · Juan Pablo Isaza 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