从通道获取所有消息,discord api

nwsw7zdq  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(890)

(discord4j 3.1.0)所以我想从(公会)消息频道获取所有消息,但据我所知,没有直接的方法(我的意思是没有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()都引用了deleted方法(在这种情况下,第一个方法抛出一个异常,而第二个方法没有用,因为即使它返回messageid,所有试图获取实际消息的方法也会抛出一个异常)。我曾尝试在通道中创建自己的消息,然后在(message)之前调用channel.getmessagesbefore,但在我的程序中调用getmessagesofchannel()方法的次数太多,因此它会在discord()中完全填充我的通知。那么,有没有什么聪明(或没有)的方法可以以其他方式获取某个通道的所有消息,或者可以在messagedeleteevent期间更新存储在该通道中的lastmessage?

ds97pgxw

ds97pgxw1#

你可以用 Snowflake.of(Instant.now()) 要获取所有消息:

public static List<Message> getMessagesOfChannel(MessageChannel channel){
    Snowflake now = Snowflake.of(Instant.now());
    return channel.getMessagesBefore(now).collectList().block();
}

相关问题