うまげーむさん

Fortniteなどのゲームの情報を主に投稿します。Twitterでブログの更新をツイートしてます。(@umageemu)

【Discord】JavaでDiscordのBotを作る方法! #3 メッセージの送信

Umagameです。

今回は前の記事の続きです。

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

umagame.hatenablog.jp

f:id:Umagame:20190220213748p:plain

メッセージの検知

 まず、ListenerAdapterというクラスを継承して、メッセージを検知できるようにします。

なぜこれをするかというと、Botでよくある「コマンドを打てば処理を行う機能」を実装するためです。

 ListenerAdapterを継承した後は、JDAのaddEventListenerメソッドを行う必要があります。

こんな感じです。

public class TutorialBot extends ListenerAdapter{
	public static void main(String[] args) {
		JDABuilder b = new JDABuilder();
		JDA jda = null;
		try { 
			jda = b.setToken("ここにトークンを入力").build();
		} catch (LoginException e) {
			e.printStackTrace();
		}
		jda.addEventListener(new TutorialBot());
	}
}

「ローカル変数 jda が初期化されていない可能性があります」とでるため、

4行目の部分をJDA jda = null;にしています。

そして、onMessageReceivedメソッドをOverrideします。

@Override
public void onMessageReceived(MessageReceivedEvent e) {
	// ここにいろいろと書く
}

これで、メッセージを受け取ったときにこのメソッドが呼び出されます。

メッセージの送信

メッセージの送信は、Discordのテキストチャンネルを表す、

TextChannelクラスのsendMessageメソッドで行うことができます。

ですが、sendMessageメソッドの後ろにqueue();をつけないと処理が実行されません。

そして、メッセージが送られたテキストチャンネルは、

MessageReceivedEventのgetTextChannelメソッドで入手できます。

こんな感じ。

@Override
public void onMessageReceived(MessageReceivedEvent e) {
	e.getTextChannel().sendMessage("メッセージ").queue();
}

それでは、「Hello」と言ったら「Hello」と返してくれる機能を作ってみましょう。

送られたメッセージは、MessageReceivedEventのgetMessageで入手できます。

このままでは文字列として使えないので、getContentRawでStringにしましょう。

こんな感じ。

@Override
public void onMessageReceived(MessageReceivedEvent e) {
	String s = e.getMessage().getContentRaw();
	if(s.equals("Hello")) {
		e.getTextChannel().sendMessage("Hello").queue();
	}
}

ちなみに、getContentRaw以外にも、getContentDisplay、getContentStrippedがありますが、

これらのメソッドに違いは特にありませんので、どれでも良いです。

ですが、これではBot自身が言った「Hello」にも反応してしまうため、

「Hello」と送信した人がBotかそうでないかを確認する必要があります。

すこし面倒ですが、このようにすれば解決できます。

@Override
public void onMessageReceived(MessageReceivedEvent e) {
	String s = e.getMessage().getContentRaw();
	if(s.equals("Hello")) {
		if(!e.getAuthor().equals(jda.getSelfUser())) {
			e.getTextChannel().sendMessage("Hello").queue();
		}
	}
}

getAuthorでメッセージに送信元を入手し、getSelfUserでBot自身のインスタンスを入手します。

f:id:Umagame:20190220212249p:plain

こんな感じ

さいごに

今回はここまでです。

前の記事:

umagame.hatenablog.jp

次の記事:

umagame.hatenablog.jp