getReactions()返回空列表,无论反应量如何

时间:2020-05-26 16:20:08

标签: java discord discord-jda

当我尝试阅读添加到已发送消息中的反应时,我总是得到一个空列表。

        MessageBuilder mb = new MessageBuilder();

        channel.sendMessage(mb.build()).queue((t);

添加响应后,我执行以下代码:

        System.out.println(t.getReactions().size());

        for (MessageReaction r : t.getReactions()) {
            System.out.println(r.getReactionEmote().getName());
        }

(这尚未实现,我只是想了解如何使用它)

我期望输出是我添加的反应量,但是System.out.println(t.getReactions().size());将始终打印0,无论添加到发送的消息中的反应量如何。

此外,当迭代包含反应的列表时,由于列表似乎为空,因此它始终不会在控制台上打印任何内容。

我需要添加一些可以使用.getReactions()的东西吗?

我还尝试了使用eventWaiter:

eventWaiter.waitForEvent(GuildMessageReactionAddEvent.class, (event) -> {

        return "?".equals(event.getReactionEmote().getName()) && !event.getUser().isBot()
                    && event.getMessageIdLong() == messageId;

        }, (event) -> {

            System.out.println("Reacting to reaction");

        }, (long) 30, TimeUnit.SECONDS, () -> {

            System.out.println("Timeout. No event was registered.");

        });

这总是输出超时警告,无论添加了什么反应。

1 个答案:

答案 0 :(得分:1)

这不是JDA的工作方式。 这些反应不会得到神奇的更新,您可以通过fetching the message或通过听reaction add event来获得反应。

要正确使用事件服务程序,必须使用JDABuilder#addEventListeners确保在JDA上也注册了相同的实例。

因此,要么手动侦听事件,要么确保在代码中仅使用一次EventWaiter类的实例,该实例也已在JDA构建器上注册。