Este es el comando del botón de roles de reacción que funciona, pero después de reiniciar el bot dice Esta interacción falló , ¿cómo puedo solucionarlo? es imposible? estaba usando simplemente djs, pero no puedo cambiar el mensaje, cuando el usuario obtuvo sus roles, el bot enviará un mensaje y quiero cambiarlo, pero no puedo, así que uso recopilar y no funciona después de reiniciar el bot para que por que hago esta pregunta.
const Command = require("../Structures/Command.js"); const Discord = require('discord.js'); const { MessageButton } = require('discord.js'); module.exports = new Command({ name: "reactionrolebuttons", description: "reaction role but button", async run(message, args, client, interaction, collect) { let embed = new Discord.MessageEmbed() .setTitle("Ping Roles:") .setColor("#0099ff") .setDescription("`Click some button bellow if you want get notified!`") const row = new Discord.MessageActionRow() .addComponents( new MessageButton() .setCustomId('Acm') .setLabel('Announcement') .setStyle('SECONDARY') .setEmoji("📰"), new MessageButton() .setCustomId('Gv') .setLabel('Giveaways') .setStyle('SECONDARY') .setEmoji("🎉") ) const m = await message.channel.send({ embeds: [embed], components: [row] }); const iFilter = i => i.user.id === message.author.id; const collector = m.createMessageComponentCollector({ filter: iFilter, time: 60000 }) collector.on('collect', async i => { if (i.customId === 'Acm') { const role = message.guild.roles.cache.get("901353036759310386"); if (i.member.roles.cache?.has('901353036759310386')) { i.member.roles.remove('901353036759310386') i.reply({ content: `${role} was removed from you`, ephemeral: true }); } else { i.member.roles.add('901353036759310386') i.reply({ content: `${role} was added to you`, ephemeral: true }); } } else if (i.customId === 'Gv') { const role = message.guild.roles.cache.get("901370872827346975"); if (i.member.roles.cache?.has('901370872827346975')) { i.member.roles.remove('901370872827346975') i.reply({ content: `${role} was removed from you`, ephemeral: true }); } else { i.member.roles.add('901370872827346975') i.reply({ content: `${role} was added to you`, ephemeral: true }); } } }) } });en su filtro no olvide agregar await i.deferUpdate()
Además, su colector ya no parece usar await, si quiere usar async, simplemente agregue await también.
en el coleccionista
await i.reply("......")en tu filtro
const filter = async i => { await i.deferUpdate() return i.customId && i.user.id === message.author.id; }[Editar] También debe finalizar el recopilador después de que el usuario haga clic en el botón
await i.reply.......... await collector.stop("complete")Si desea continuar usando ese botón para la próxima interacción, no necesita colector por cierto,
Simplemente envuelva la condición en el evento interacciónCrear
client.on("interactionCreate", async (interaction) => { if (!interaction.isButton()) return; if(interaction.customId === "Acm") { \\Your code here } })