広告 Discord Java プログラミング

JavaでDiscord Bot開発(Javacord)

2020年8月3日

Discord

突然ですがDiscordって便利ですよね!チャットできるし、通話できるし、画面共有できるし.......。
そんな便利なDiscordですがいろいろなサーバーに参加してみると独自で作っているようなBOTを見かけることがあると思います。「作りたいなー」と思っていてもなかなか手を出せない人もいるんじゃないでしょうか?
そんな人のためと言ってはなんですが、簡単にちょっとしたBotの作り方を紹介しようと思います。
話をしていても仕方ないので早速やっていきましょう。

開発環境としてIntelliJ IDEAを使用します。

プロジェクトの作成

まずはプロジェクトを作成しましょう。普通のJavaのプロジェクトでも構いませんが、MavenGradleのどちらかでプロジェクトを作成することをおすすめします。
今回はMavenで作成します。

Maven

まずはMavenで作成していきます。
Mavenで作成したプロジェクトのpom.xmlの設定をしていきます。
新規追加は10行目~になります。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>hello_bot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>Hello-DiscordBot-${project.version}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>discord_bot.main</mainClass>
                            <addClasspath>true</addClasspath>
                            <addExtensions>false</addExtensions>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <!-- Javacord -->
    <dependencies>
        <dependency>
            <groupId>org.javacord</groupId>
            <artifactId>javacord</artifactId>
            <version>3.0.6</version>
            <type>pom</type>
        </dependency>
    </dependencies>
</project>

このコードの「<build>~</build>」は実行可能なjarファイルにするためのプラグインになります。41行目~がJavacordのものです。
Mavenの設定はこんなもんですね。

特定のワードに反応させる

単純にこんなイメージです。

DICE
こんにちは!!
こんにちは!DICEさん!
Discord Bot

ただ挨拶を返すだけの簡単なBotになります。ではプログラムになります。

package discord_bot;

import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;

public class main {
    public static void main(String args[]){
        String token = "トークン";

        DiscordApi api = new DiscordApiBuilder().setToken(token).login().join();

        api.addMessageCreateListener(event -> {
            if (event.getMessageContent().contains("こんにちは") && !event.getMessageAuthor().isBotUser()) {
                event.getChannel().sendMessage("こんにちは!"+event.getMessageAuthor().getName()+"さん!");
                System.out.println(event.getMessageAuthor().getName()+">>"+event.getMessageContent());
                System.out.println("BOT>>"+"こんにちは!"+event.getMessageAuthor().getName()+"さん!");
            }
        });
    }
}

8行目のトークンについては後で説明します。
10行目はDiscordのAPIを使用するうえで必要な宣言になります。Javacordを用いて開発する場合はこれが必須です。
12行目~18行目がメッセージを受け付けた時の処理になります。
Javaでも「この書き方は見たことないよ!」という人も良そうですね。これはラムダ式と言います。気が向いたら調べてみても良いかもしれませんね。
(今度記事にしようかな......)
13行目のif文は第1条件が送信されてきたメッセージに「こんにちは」が含まれていること。第2条件がBotが発言していないこと。となっています。
1つ目の条件だけでも良いんじゃ?と思いがちですが、2つ目の条件を入れておかないとBotが返信したらそれを拾ってまた返信そしてまた返信......とBotを停止するまで永遠に続いてしまうので注意が必要!
14行目はユーザーが発言したチャンネルを取得してメッセージを送っています。

event.getMessageAuthor().getName()

これで発言者の名前を取得しています。
14、15行目はただ単にコンソールに出力するために書いてあるだけです。
さて、それでは実行可能なjarファイルにしていきましょう。

Mavenのビルド

赤枠のところをクリックすると中央のメニューが出てきます。
そうしたら黄色のところを選択するか、「mvn package」として実行してください。
そうすると「target」フォルダに2つのjarファイルができるともいます。
Mavenの設定をこのサイトと同じ設定にしているのであれば、「Hello-DiscordBot-1.0-SNAPSHOT.jar」と「プロジェクト名-1.0-SNAPSHOT.jar」いうファイルができていませんか?
2つのうち「Hello-DiscordBot-1.0-SNAPSHOT.jar」の方が実行可能なjarファイルになります。

DiscordのBotを作ろう

と言ってもそんなに難しいことではありません。
まずはこちらにアクセスしてください。

[st-card-ex url="https://discord.com/developers/applications" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]

そうしたら右上の「New Application」をクリックしてください。

そしてポップアップしてきた項目の「NAME」にBot名を入力してください。

入力したら「Create」を押してください。(今回は適当に"testBot1"としました。お好きな名前にして下さい。)

この画面になったら左の一覧から「Bot」を選択してください。

右の方にある「Add Bot」をクリックしてください。

これが出てきたら「Yes,do it!」をクリックしてください。
この時エラーが出てBotを追加できない場合は「General Information」よりBot名を変更してください。
次は左の一覧から「OAuth2」へ移動してください。

この画面に来たら真ん中の列の上から3番目ですかね。「bot」にチェックを入れてください。すると下にこんなメニューが出てくると思います。

左の列の「Administrator」にチェックを入れてください。
そうしたら、上の画像の黒塗りで隠してあるところにURLがあると思うので、そのURLにブラウザからアクセスしてください。
そうしたら自分が管理者であるサーバーを選択し、認証してください。

認証すると自分のサーバーに作成したBOTが参加すると思います。

これで準備完了……ではありません。
プログラムの中で一か所抜けていますね。「トークン」です。
トークンはBot作成のページのメニューから「Bot」を選択し、赤枠内をクリックすれば表示できますし表示しなくても「Copy」を押せばコピーできます。

ここでコピーしたトークンをプログラム中の「トークン」と書いてある場所に張り付けてください。
トークンを貼り付けたらビルドして実行形式のjarファイルと作成し、実行するだけでBotが起動します。プログラムが問題なく起動すれば、自分のサーバーに追加されたBotがオンラインになっているはずです。
そうしたら、「こんにちは」と打ってみてください。
Botから「こんにちは!(あなたの名前)さん!」と返ってくれば成功です。

まとめ

以上で簡単なBotの作り方の説明は終了です。
今回使用したJavacordは正直あまり使われていない感じがするものになりますが、簡単なものに限ってはこれでも十分です。ただ、いろいろな機能を実装していきたい場合は少し物足りません。
実際に作っていくのであれば「JDA」か「discord4j」が良いと思います。
これらに関する記事も書いていこうと思います。
その他の言語でのBotの作成方法も追々書いていきますのでしばらくお待ちください。

-Discord, Java, プログラミング
-, ,