我正在尝试获取discord-jda中最后一条消息之前的消息。
我已经尝试过了,但它给了我一个IndexOutOfBounds异常。
event.getChannel().getHistory().getRetrievedHistory().get(1)
你能向我解释一下为什么要这样做吗?并给我指明正确的方向,这样我就可以完成我的项目了?非常感谢。
根据getRetrievedHistory()
:的文档
已使用
retrievePast(int)
、retrieveFuture(int)
和MessageChannel.getHistoryAround(String, int)
方法从此MessageHistory对象从Discord检索到的所有消息的消息列表,从最新到最旧排序。如果它只是使用MessageChannel.getHistory((或类似方法创建的,那么它将为空您首先必须检索消息
因此您必须使用retrievePast(2)
来获得第二条最新消息:
channel.getHistory().retrievePast(2)
.map(messages -> messages.get(1)) // this assumes that the channel has at least 2 messages
.queue(message -> { // success callback
System.out.println("The second most recent message is: " + message.getContentDisplay();
});
请记住,队列是异步的。这意味着这样的代码无法工作:
MessageHistory history = channel.getHistory();
history.retrievePast(2).queue(); // <-- schedules the request, its not done when it returns
List<Message> message = history.getRetrievedHistory(); // <-- this is still empty