如何将JDA的setComponents()方法与自定义按钮一起使用?

问题描述 投票:0回答:1

我正在使用 JDA(Java Discord API)库开发 Discord 机器人,并且我正在尝试使用自定义按钮创建交互式消息。但是,当我有超过 5 个按钮时,我很难理解如何在按钮上正确使用

setComponents()
方法。

这是我的代码的简化版本:

List<Button> buttons = new ArrayList<>();
// Code to create and populate buttons...

Collection<LayoutComponent> buttonCollection = buttons.stream()
    .map(button -> {
        // How to properly convert Button objects to LayoutComponent objects?
    })
    .collect(Collectors.toList());

event.getHook().editOriginalEmbeds(eb.build()).setComponents(buttonCollection).queue();

我使用此代码的目标是从

LayoutComponent
对象列表中创建
Button
对象的集合,并将其传递给
setComponents()
方法以使用新按钮更新消息。

但是,我不确定如何正确地将

Button
对象转换为
LayoutComponent
对象。 JDA 文档似乎没有对此提供明确的指导。

此外,我知道

setActionRow(buttons)
理论上是可行的,但这对我来说不是一个选择,因为我有超过 5 个按钮。

有人可以提供一个例子或解释如何实现这一目标吗?任何帮助将不胜感激!

其他详细信息:

  • JDA版本:
    5.0.0-beta.23
  • Java版本:
    OpenJDK 22.0.1
java discord-jda
1个回答
0
投票

您不能在单个操作行中放置超过 5 个按钮,但您可以创建多个操作行,每个操作行最多包含 5 个按钮。

您可以使用

ActionRow
 从按钮创建 
ActionRow.of
,然后将其传递给
setComponents

event.getHook().editOriginalEmbeds(eb.build()).setComponents(
                ActionRow.of(
                        Button.of(ButtonStyle.SECONDARY, "b00", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b01", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b02", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b03", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b04", "text here")
                ),
                ActionRow.of(
                        Button.of(ButtonStyle.SECONDARY, "b10", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b11", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b12", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b13", "text here"),
                        Button.of(ButtonStyle.SECONDARY, "b14", "text here")
                )
        ).queue();
© www.soinside.com 2019 - 2024. All rights reserved.