うまげーむさん

ゲームの情報を主に投稿します。

【Discord】JavaでDiscordのBotを作る方法! #4 メッセージの削除

Umagameです。

前回はメッセージの送信方法について触れましたが、今回は削除する方法について紹介します。

前の記事を見ていない人はこちらから:

umagame.hatenablog.jp

f:id:Umagame:20190225220802p:plain

メッセージの取得

それでは今回は、「指定した数のメッセージを取得して削除する機能」を作りたいと思います。

そのためにまずは、過去のメッセージの取得方法について説明します。

メッセージを取得するには、MessageHistoryクラスのretrievePastメソッドを使います。

こんな感じ。

textChannel.getHistory().retrievePast(5); // 数を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(); // 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までです」と送るようにしています。

f:id:Umagame:20190225215918p:plain

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

「10」と「11」が消えます。

f:id:Umagame:20190225215957p:plain

0以下や11以上の場合

さいごに

今回はここまでです。

何かDiscordのBotについて質問・リクエストなどがありましたら、気軽にコメントしてください。(できそうならやり方を記事にします)

前の記事:

umagame.hatenablog.jp

次の記事:

umagame.hatenablog.jp