当我尝试阅读添加到已发送消息中的反应时,我总是得到一个空列表。
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.");
});
这总是输出超时警告,无论添加了什么反应。
答案 0 :(得分:1)
这不是JDA的工作方式。 这些反应不会得到神奇的更新,您可以通过fetching the message或通过听reaction add event来获得反应。
要正确使用事件服务程序,必须使用JDABuilder#addEventListeners
确保在JDA上也注册了相同的实例。
因此,要么手动侦听事件,要么确保在代码中仅使用一次EventWaiter
类的实例,该实例也已在JDA构建器上注册。