(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()はどちらも削除されたメソッドを参照します。(その場合、最初のメソッドは例外をスローし、2番目のメソッドは役に立たない。なぜなら、それはmessageIdを返すが、実際のメッセージを取得しようとするすべてのメソッドも例外をスローするためです)。チャネルで独自のメッセージを作成してから、channel.getMessagesBefore(message)を呼び出しましたが、プログラムでgetMessagesOfChannel()メソッドが頻繁に呼び出されるため、discord :(で通知が完全に満たされます。そうではない)チャネルのすべてのメッセージを何らかの方法で取得する方法
Snowflake.of(Instant.now())
すべてのメッセージを取得するために使用できます。
public static List<Message> getMessagesOfChannel(MessageChannel channel){
Snowflake now = Snowflake.of(Instant.now());
return channel.getMessagesBefore(now).collectList().block();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加