首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从通道获取所有消息,discord api

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

Stack Overflow用户
提问于 2020-09-04 06:46:51
回答 1查看 2K关注 0票数 0

(discord4j 3.1.0)所以我想从一个(行会)MessageChannel获取所有消息,但据我所知,没有直接的方法(我的意思是没有channel.getMessages()、.block()或其他东西)。我已经使用了一段时间作为替代,是一种方法,它获取通道的最后一条消息,然后获取之前的所有消息。

代码语言:javascript
复制
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,所有试图获取实际消息的方法也会抛出一个异常)。我尝试在通道中创建自己的消息,然后调用channel.getMessagesBefore( message ),但getMessagesOfChannel()方法在我的程序中调用太频繁,因此它完全填充了我的通知。那么,有没有什么聪明(或不聪明)的方法来获取通道的所有消息,或者是否可以在MessageDeleteEvent期间更新存储在通道中的lastMessage?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-04 16:17:00

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

代码语言:javascript
复制
public static List<Message> getMessagesOfChannel(MessageChannel channel){
    Snowflake now = Snowflake.of(Instant.now());
    return channel.getMessagesBefore(now).collectList().block();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63732612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档