如何从MessageReactionAddEvent获取消息

时间:2019-08-10 13:46:55

标签: java discord discord-jda

当前,我正在尝试制作一个音乐不和谐机器人,它应该显示当前正在播放的音乐列表。 消息列表中有一个左右箭头表情符号,人们可以用它来在播放的音乐列表中移动。

我无法获得此人刚刚对其做出反应的消息。

@override
public void onMessageReactionAdd(MessageReactionAddEvent event){
I need to get the reacted message here.
}

我尝试做event.getMessage(),但是不起作用。

2 个答案:

答案 0 :(得分:0)

您可以获取消息所在的频道,然后使用带有channel.getMessageById()的消息ID来获取消息本身:

@override
public void onMessageReactionAdd(MessageReactionAddEvent event){
    Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
}

答案 1 :(得分:0)

您应该结合使用retrieveMessageByIdqueue来异步检索它:

@override
public void onMessageReactionAdd(MessageReactionAddEvent event) {
    event.getChannel().retrieveMessageById(event.getMessageId()).queue(message -> {
        System.out.println(message.getContentDisplay());
    });
}

这将避免阻止可能会使您的机器人慢下来的代码。您代码中的唯一区别是您编写了在队列的回调中使用消息的代码。通常不建议使用complete,因为它可能会在不可预测的时间范围内锁定事件线程。

或者,您也可以仅使用ID(在分页消息场景中很有用)编辑或删除消息: