如何从 MessageReactionAddEvent 获取消息
How to fetch Message from MessageReactionAddEvent
目前,我正在尝试制作一个音乐 discord 机器人,它应该会显示当前正在播放的音乐列表。
消息列表有左右箭头表情符号,用户可以使用它在正在播放的音乐列表中移动。
我无法收到此人刚刚添加了反应的消息。
@override
public void onMessageReactionAdd(MessageReactionAddEvent event){
I need to get the reacted message here.
}
我试过 event.getMessage()
但没用。
您可以获取消息所在的频道,然后使用消息的 ID 和 channel.getMessageById()
:
来获取消息本身
@override
public void onMessageReactionAdd(MessageReactionAddEvent event){
Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
}
您应该使用 retrieveMessageById
in combination with queue
异步检索它:
@override
public void onMessageReactionAdd(MessageReactionAddEvent event) {
event.getChannel().retrieveMessageById(event.getMessageId()).queue(message -> {
System.out.println(message.getContentDisplay());
});
}
这将避免阻止可能会降低机器人速度的代码。您的代码中唯一的区别是您编写了在队列回调中使用消息的代码。通常不鼓励使用 complete
,因为它可能会在不可预测的时间范围内锁定您的事件线程。
或者您也可以编辑或删除只有 ID 的消息,这在分页消息场景中很有用:
目前,我正在尝试制作一个音乐 discord 机器人,它应该会显示当前正在播放的音乐列表。 消息列表有左右箭头表情符号,用户可以使用它在正在播放的音乐列表中移动。
我无法收到此人刚刚添加了反应的消息。
@override
public void onMessageReactionAdd(MessageReactionAddEvent event){
I need to get the reacted message here.
}
我试过 event.getMessage()
但没用。
您可以获取消息所在的频道,然后使用消息的 ID 和 channel.getMessageById()
:
@override
public void onMessageReactionAdd(MessageReactionAddEvent event){
Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
}
您应该使用 retrieveMessageById
in combination with queue
异步检索它:
@override
public void onMessageReactionAdd(MessageReactionAddEvent event) {
event.getChannel().retrieveMessageById(event.getMessageId()).queue(message -> {
System.out.println(message.getContentDisplay());
});
}
这将避免阻止可能会降低机器人速度的代码。您的代码中唯一的区别是您编写了在队列回调中使用消息的代码。通常不鼓励使用 complete
,因为它可能会在不可预测的时间范围内锁定您的事件线程。
或者您也可以编辑或删除只有 ID 的消息,这在分页消息场景中很有用: