(discord4j 3.1.0)所以我想从(Guild)MessageChannel 获取所有消息,但据我所知,没有直接的方法(我的意思是没有 channel.getMessages() .block() 什么的)。一段时间以来,我一直在使用替代方法,它获取通道的最后一条消息,然后获取之前的所有消息。
public static List<Message> getMessagesOfChannel(MessageChannel channel){
try {
//get the last message
Message tempMessage = channel.getLastMessage().block();
//get all messages before the last message and then add the last message to it
List<Message> messages = channel.getMessagesBefore(tempMessage.getId()).collectList().block();
return messages;
}catch(ClientException | NullPointerException e){
//if there was no last message then the channel is empty so return an empty list
return new ArrayList<>();
}
}
直到今天它都运行良好......因为在 MessageDeleteEvent 中调用此方法时会出现问题。如果所述删除的方法是通道的最后一个方法。因为即使消息被删除了,channel.getLastMessage() 和 channel.getLastMessageId() 都引用了删除的方法。(在这种情况下,第一种方法会引发异常,而第二种方法是无用的,因为即使它返回 messageId,所有试图获取实际消息的方法也会引发异常)。我尝试在频道中创建自己的消息,然后调用 channel.getMessagesBefore(message) 但是 getMessagesOfChannel() 方法在我的程序中被调用得太频繁了,所以它完全填充了我的不和谐通知:(。那么有什么聪明的(或不是)以其他方式获取频道的所有消息的方法,