当有人使用下面的这段代码向特定消息添加响应时,我正在尝试创建EventWaiter,但它似乎不起作用。我已经尝试修复可能出错的每件事, 但是什么也没发生。 控制台上没有显示任何错误,似乎eventwaiter没有收听MessageReactionAdd类
private static final String EMOTE = "\uD83D\uDE39";
// send a message to Dm and starts the method
event.replyInDm("message", (message - > {
message.addReaction("\uD83D\uDD27").queue();
initWaiter(message.getIdLong(), channel);
}));
private void initWaiter(long messageId, PrivateChannel channel) {
// waiting for a specific reaction (EMOTE) in a message with the same id as the message above
waiter.waitForEvent(
MessageReactionAddEvent.class,
(e) - > {
MessageReaction.ReactionEmote emote = e.getReactionEmote();
assert user != null;
return e.getMessageIdLong() == messageId && EMOTE.equals(emote.getName()) && !emote.isEmote() && !user.isBot();
},
(e) - > {
// if the code above is true, this should happen, but it doesn't
assert channel != null;
channel.sendMessage("message").queue();
}
);
答案 0 :(得分:0)
确保将EventWaiter作为侦听器添加到JDABuilder中:
JDABuilder.createDefault("token", intents)
.addEventListeners(..., waiter)
...
如果您将服务员注册为侦听器,则假设您正在运行最新版本的jda之一,则可能会缺少必需的DIRECT_MESSAGE_REACTIONS意图。