【问题标题】:JDA Embed multiple PagesJDA 嵌入多个页面
【发布时间】:2022-01-14 05:10:55
【问题描述】:

所以我目前正在用 Java 开发一个 Discord Bot,但不知道如何创建一个包含多个页面的嵌入。在 Python 中,这相当简单,但对于 Java JDA,我没有找到任何有关如何创建指定嵌入的视频或信息。

它应该看起来像图像中的那样,您可以通过箭头转到下一页并返回。

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java discord discord-jda


【解决方案1】:

您需要手动创建分页系统。这是我的方法:

例如创建一个 SlashCommand 并使用包含按钮的 Embed 进行响应,并且这些按钮具有特定的 ID,例如 page_1page_2。该数字会告诉您此按钮切换到的页码。然后,您需要拆分 ButtonClickEvent 中的字符串以获取您要切换到的页码。然后只需运行某种开关盒并使用嵌入的正确页面编辑消息。下面是一些示例代码:

PageCommand.java

public void onSlashCommand(SlashCommandEvent e) {

    e.deferReply().queue();

    EmbedBuilder msg = new EmbedBuilder();
    msg.setTitle("Pagination");
    msg.setDescription("Hello World! This is the first page");
    msg.setFooter("Page 1/4");
    msg.setColor(0x33cc33);
    List<Button> buttons = new ArrayList<Button>();
    buttons.add(Button.primary("page_1", Emoji.fromUnicode("⏪")));
    buttons.add(Button.primary("page_1", Emoji.fromUnicode("◀")));
    buttons.add(Button.danger("page_cancel", Emoji.fromUnicode("❌")));
    buttons.add(Button.primary("page_2", Emoji.fromUnicode("▶")));
    buttons.add(Button.primary("page_4", Emoji.fromUnicode("⏩")));

    e.replyEmbeds(msg.build()).addActionRow(buttons).queue();

}

ButtonClickEvent.java

public void onButtonClick(ButtonClickEvent e) {

    // Split the ID to 2 Strings
    // page_1 = page | 1
    String[] args = e.getButton().getId().split("_");

    // Check if button is a page button
    if (args[0].equalsIgnoreCase("page")) {

        // Check if user pressed the cancel button and delete the message
        if (args[1].equalsIgnoreCase("cancel")) {

            e.getMessage().delete().queue();
            return;

        }

        // Convert Pagenumber String to Integer
        int pageNum = Integer.valueOf(args[1]);

        EmbedBuilder msg = new EmbedBuilder();
        List<Button> buttons = new ArrayList<Button>();

        //Check which page number is used
        switch (pageNum) {

        case 1:
            msg.setTitle("Pagination");
            msg.setDescription("Hello World! This is the first page");
            msg.setFooter("Page 1/4");
            msg.setColor(0x33cc33);
            buttons.add(Button.primary("page_1", Emoji.fromUnicode("⏪")));
            buttons.add(Button.primary("page_1", Emoji.fromUnicode("◀")));
            buttons.add(Button.danger("page_cancel", Emoji.fromUnicode("❌")));
            buttons.add(Button.primary("page_2", Emoji.fromUnicode("▶")));
            buttons.add(Button.primary("page_4", Emoji.fromUnicode("⏩")));
            break;

        case 2:
            msg.setTitle("Pagination");
            msg.setDescription("Hello World! This is the second page");
            msg.setFooter("Page 2/4");
            msg.setColor(0x33cc33);
            buttons.add(Button.primary("page_1", Emoji.fromUnicode("⏪")));
            buttons.add(Button.primary("page_1", Emoji.fromUnicode("◀")));
            buttons.add(Button.danger("page_cancel", Emoji.fromUnicode("❌")));
            buttons.add(Button.primary("page_3", Emoji.fromUnicode("▶")));
            buttons.add(Button.primary("page_4", Emoji.fromUnicode("⏩")));
            break;

        case 3:
            msg.setTitle("Pagination");
            msg.setDescription("Hello World! This is the third page");
            msg.setFooter("Page 3/4");
            msg.setColor(0x33cc33);
            buttons.add(Button.primary("page_1", Emoji.fromUnicode("⏪")));
            buttons.add(Button.primary("page_2", Emoji.fromUnicode("◀")));
            buttons.add(Button.danger("page_cancel", Emoji.fromUnicode("❌")));
            buttons.add(Button.primary("page_4", Emoji.fromUnicode("▶")));
            buttons.add(Button.primary("page_4", Emoji.fromUnicode("⏩")));
            break;

        case 4:
            msg.setTitle("Pagination");
            msg.setDescription("Hello World! This is the last page");
            msg.setFooter("Page 4/4");
            msg.setColor(0x33cc33);
            buttons.add(Button.primary("page_1", Emoji.fromUnicode("⏪")));
            buttons.add(Button.primary("page_3", Emoji.fromUnicode("◀")));
            buttons.add(Button.danger("page_cancel", Emoji.fromUnicode("❌")));
            buttons.add(Button.primary("page_4", Emoji.fromUnicode("▶")));
            buttons.add(Button.primary("page_4", Emoji.fromUnicode("⏩")));
            break;

        }

        // Edit the Message
        e.getMessage().editMessageEmbeds(msg.build()).setActionRow(buttons).queue();

    }
}

这绝对不是最有效的,它可以通过在 ButtonClickListener 的 switch-case 中使用动态 pagenumber 变量来优化。对于这样的分页系统,这应该只是一个简单的例子。希望对你有帮助:D

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 2021-01-01
    • 1970-01-01
    • 2020-04-12
    • 2021-09-10
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多