Umagameです。
前回はメッセージの送信方法について触れましたが、今回は削除する方法について紹介します。
前の記事を見ていない人はこちらから:
umagame.hatenablog.jp

メッセージの取得
それでは今回は、「指定した数のメッセージを取得して削除する機能」を作りたいと思います。
そのためにまずは、過去のメッセージの取得方法について説明します。
メッセージを取得するには、MessageHistoryクラスのretrievePastメソッドを使います。
こんな感じ。
textChannel.getHistory().retrievePast(5);
指定した数のメッセージを含んだListを返してくれます。
メッセージを消すコマンドを「!clear 数」にして、コードを書きます。
こんな感じ。
@Override
public void onMessageReceived(MessageReceivedEvent e) {
String s = e.getMessage().getContentRaw();
if(s.startsWith("!clear ")) {
String[] ss = e.getMessage().getContentRaw().split(" ");
List<Message> messages = e.getTextChannel().getHistory().retrievePast(Integer.parseInt(ss[1])).complete();
}
}
Stringのsplitで文字列を分けて、2つ目の文字列をIntegerのparseIntでint型に変換しています。
メッセージの削除
メッセージの削除はdeleteメソッドで行います。
またこの際、メッセージを送信するときと同じように後ろにqueue();を付ける必要があります。
こんな感じ。
message.delete().queue();
最終的にこんな感じになります。
@Override
public void onMessageReceived(MessageReceivedEvent e) {
String s = e.getMessage().getContentRaw();
if(s.startsWith("!clear ")) {
String[] ss = e.getMessage().getContentRaw().split(" ");
int i = Integer.parseInt(ss[1]);
if(i <= 10 && i > 0) {
List<Message> messages = e.getTextChannel().getHistory().retrievePast(i).complete();
for(Message m : messages) {
m.delete().queue();
}
}else {
e.getTextChannel().sendMessage("数は1~10までです").queue();
}
}
}
数は1~10までに設定しています。
そして数が0以下だったり、11以上だったら「数は1~10までです」と送るようにしています。

この状態で、「!clear 3」と入力すると、「!clear 3」のメッセージを含んで3つメッセージが消されるため、
「10」と「11」が消えます。

0以下や11以上の場合
さいごに
今回はここまでです。
何かDiscordのBotについて質問・リクエストなどがありましたら、気軽にコメントしてください。(できそうならやり方を記事にします)
前の記事:
umagame.hatenablog.jp
次の記事:
umagame.hatenablog.jp