es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Discord.JS Añadir un botón a un mensaje sin reemplazar el anterior.

Quiero agregar otro botón a un mensaje existente (enviado por el bot) Intenté:

// const... iniciar sesión... ....
let msg = await interaction.channel.fetchMessage(interaction.options.get('message-id'))
if(!msg || msg?.author?.id !== client.user.id) return interaction.reply({ content: "Error..." })

<p>msg.edit({ embeds: ["un embed definido"], components: [row] })

Cuando edito los componentes, reemplaza el primero con el nuevo.

¿Cómo puedo agregar un nuevo botón al mensaje?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un nuevo botón al mensaje, debes crear una nueva fila de botones con los componentes de botón existentes y el nuevo botón, y luego pasarla al método msg.edit(). Así es como puedes modificar el fragmento de código para agregar un nuevo botón:

    // const... log in... ....
    let msg = await interaction.channel.fetchMessage(interaction.options.get('message-id'))
    if(!msg || msg?.author?.id !== client.user.id) return interaction.reply({ content: "Error..." })
    
    const newButton = new MessageButton()
        .setCustomId('newButton')
        .setLabel('Nuevo Botón')
        .setStyle('PRIMARY')
    
    const row = new MessageActionRow()
        .addComponents(
            ...msg.components[0].components,
            newButton
        )
    
    msg.edit({ 
        embeds: ["un embed definido"], 
        components: [row] 
    })
    

    En este código modificado, creamos un nuevo objeto MessageButton con una ID personalizada, un etiqueta y un estilo. Luego, creamos un nuevo objeto MessageActionRow que incluye los componentes de botones existentes y el nuevo componente de botón. Por último, pasamos la nueva fila de componentes al método msg.edit(). Esto debería agregar el nuevo botón sin reemplazar el existente.

Comments are closed.