const filter = (interaction) => { if (interaction.user.id === message.author.id) return true; return interaction.reply({ content: "An error has occurred", ephemeral: true }) } const collectorValue1 = message.channel.createMessageComponentCollector({ filter, max: 1 }) collectorValue1.on("end", (ButtonInteraction) => { const id = ButtonInteraction.first().customId; if (id == '1') { ButtonInteraction.first().reply({ content: "CONTENT", ephemeral: true }) } else if (id == '2') { ButtonInteraction.first().reply({ content: "CONTENT", ephemeral: true }) } else if (id == '3') { ButtonInteraction.first().reply({ content: "CONTENT.", ephemeral: true }) } })Me gustaría que cuando se crean los botones sean ejecutables múltiples, sin embargo, solo puedo usar el botón una vez, después de eso siempre recibo el mensaje "Esta interacción falló". ¿Cómo puedo hacer que los botones sean ejecutables múltiples?
Por favor intenta lo siguiente:
collectorValue1.on("end", (ButtonInteraction) => { ButtonInteraction.deferUpdate(); const id = ButtonInteraction.first().customId; if (id == '1') { ButtonInteraction.first().editReply({ content: "CONTENT", ephemeral: true })Use deferUpdate() de la misma manera en cada una de las sentencias if. Sin embargo, tenga en cuenta que cuando use deferUpdate(), deberá cambiar el método .reply() a .editReply().
Puede intentar poner deferUpdate() en la definición del filtro.
No hay mucha orientación en el sitio web de Discord.js ni documentación sobre el uso de deferUpdate(). Sin embargo, obtenga lo que pueda de la documentación. Aquí hay un ejemplo de los documentos:
// Defer updating and reset the component's loading state interaction.deferUpdate() .then(console.log) .catch(console.error);En particular, el comentario menciona que "restablece el estado de carga del componente". Creo que esto está relacionado con la forma en que permite usar un botón varias veces.
Espero que esto haya sido útil:]