getReactions () возвращает пустой список, независимо от количества реакций - PullRequest
0 голосов
/ 26 мая 2020

Когда я пытаюсь прочитать реакции, добавленные в отправленное сообщение, я всегда получаю пустой список.

        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 Ответ

1 голос
/ 27 мая 2020

JDA работает не так. Реакции не обновляются волшебным образом, вы можете получить реакции, получив сообщение или прослушав событие добавления реакции .

Чтобы правильно использовать официант событий вы должны убедиться, что этот же экземпляр также зарегистрирован в JDA, используя JDABuilder#addEventListeners.

Так что либо прослушивайте событие вручную, либо убедитесь, что вы используете только один раз экземпляр класса EventWaiter в своем коде который также зарегистрирован в JDA builder.

...