NodeJS 一个ActionRow中有多个按钮

aurhwmvo  于 2022-12-12  发布在  Node.js
关注(0)|答案(2)|浏览(114)

我使用discord.js库和node.js创建一个Discord bot,它可以向用户发送包含按钮的DM。
我想发送一个包含多个按钮的Discord消息,每个按钮都有一个唯一的customId和标签。我当前的方法是使用一个按钮列表。我使用for循环将按钮对象添加到列表中,并将其作为列表传递给.send方法的组件。

x = 5
buttons = []

for (let i = 0; i < x; i++) {
    buttons.push(new MessageActionRow().addComponents(
        new MessageButton()
            .setCustomId(i.toString())
            .setLabel(messageSplit[i])
            .setStyle('PRIMARY')
        )
    )
}

msg.reply({ embeds: [embedRecipient], components: buttons })

这是可行的,但每个按钮都是一个新的ActionRow,因此导致按钮在不同的行上。我的意思是:image of buttons each on a different line
如何使按钮的相同功能(如customId和Label)保留在同一行上?将它们全部放在同一个ActionRow中应该可以解决这个问题。我不知道实现该功能的代码。

4dbbbstv

4dbbbstv1#

要将所有按钮放在一个MessageActionRow中,只需在for循环外部声明行,然后在循环内部声明行,只需使用.addComponents()将按钮添加到MessageActionRow中。示例如下:

x = 5
const buttons = new MessageActionRow()

for (let i = 0; i < x; i++) {
    buttons.addComponents(
        new MessageButton()
            .setCustomId(i.toString())
            .setLabel(messageSplit[i])
            .setStyle('PRIMARY')
        )
    )
}

msg.reply({ embeds: [embedRecipient], components: [buttons] })
tpxzln5u

tpxzln5u2#

我用另一种方式做了一些事情,但我试图为你简化它,就像这样

let Buttons = [[],[],[]];
Buttons.foreach(Array => {
for (i = 0; i <= 5; i++)
{
Array.push(new ButtonBuilder()
            .setCustomId("CustomID")
            .setLabel("LABEL")
            .setStyle(ButtonStyle.Primary))
}
});

let row = [];
Buttons.forEach(ButtonArray => {
row.push(new ActionRowBuilder().addComponents(ButtonArray))
});

let ListRows = row.map(rows => {return rows});
message.channel.send({content: "Solved", components: ListRows});

如果你解决了你想解决的问题,请投我一票

相关问题