Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜

イントロダクション

前回は「ping」と入力したら「pong」と返事するアプリケーションを作成しました。ので今回は「test」と入力したら「Hello World」という返事をするものにしました。

ポイント

前回は、リスナークラスをメインメソッド上で作成しましたが、これだとクラスを追加するたびにメインメソッドを修正する必要があるので良いコードとは言えません。※「保守性に欠ける」なんて言います。

保守性のアップ方法その1※今回はこれだけです。

クラスファイルを別に作成し別にする。
つまり、作成したクラスを単純に追加する。

/** 作成したクラス */
public class FirstCommand implements MessageCreateListener {
    public void onMessageCreate(DiscordAPI api, Message message) {
        // check the content of the message
        if (message.getContent().equalsIgnoreCase("test")) {
            // reply to the message
            message.reply("Hello World!");
        }
    }
}
// MessageListenerインターフェースを実装したクラスを追加
api.registerListener(new FirstCommand());

実行結果は下の様になりました。ソースはこちら

今回作成したリポジトリは以下です。

https://github.com/ZenryokuService/DiscordPrg.git

上記のリンクで Gitに飛ぶことができ、リポジトリからソースをチェックアウトできます。(Pullすると言います。)



Java Discord ピンポン〜Discordプログラム〜

イントロダクション

前回、IntelliJ IDEAでの開発環境を構築しました。
今回は、JavaコードをDiscord上で起動します。

手順

1.「https://discordapp.com/」を開く
2.申請をクリックする
申請をクリックすると下のような画面が出るので「新しいアプリ」をクリックします。

3.下のような画面が出るので必要な情報を入力して「アプリを作成」をクリック

4.最終的に下のような画面が表示されます。

5.この画面の上部に「クライアントID」があるのでそれをコピーして下の「メールアドレス」と「パスワード」に貼り付けます。

    public static void main(String[] args) {
// See "How to get the token" below
        DiscordAPI api = Javacord.getApi("クライアントID", true);
        api.setEmail("メールアドレス");
        api.setPassword("パスワード");
        // connect
        api.connect(new FutureCallback<DiscordAPI>() {
            public void onSuccess(DiscordAPI api) {
                // register listener
                api.registerListener(new MessageCreateListener() {
                    public void onMessageCreate(DiscordAPI api, Message message) {
                        // check the content of the message
                        if (message.getContent().equalsIgnoreCase("ping")) {
                            // reply to the message
                            message.reply("pong");
                        }
                    }
                });
            }

            public void onFailure(Throwable t) {
                t.printStackTrace();
            }
        });
    }

6.このメインメソッドを起動します。
※コンソール出力

7.Discordのページからコマンドを入力
今回は、「ping」と入力すると「pong」と返すアプリを作成しました。

こんな感じで出力されました。

JavaDocはこちら

http://ci.ketrwu.de/job/Javacord/branch/master/javadoc/



関連ペーッジ一覧

ミニゲーム作成

Java Basic ミニゲーム作成 〜コンソールゲーム〜

Java Discord

  1. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜
  2. Java Discord セットアップ〜Hello Discord〜
  3.  Java Discord ピンポン〜Discordプログラム〜
  4. Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜

JavaDoc

  1. Java Doc 読解〜System.out〜
  2. JavaDoc 読解 〜 Filesクラス 〜
  3. Java Doc読解 BufferedReader
  4. Java Doc 読解〜BufferedWriter〜
  5. Java Doc 読解 List 〜JavaDocList その1〜
  6.  Java Doc 読解 Map

 

Java Discord セットアップ〜Hello Discord〜

イントロダクション

前回、見つけたサイトでGladleでの環境セットアップを行なっていたのでそのようにやったのですが、結局Gitからの情報だったのでGitへ移動したところMavenを使用していたので、やり直します。※しかしサイトは古い画像が載っています。

最後に作成したものがうまくいったものです。

Introduction

Last time, I found web page write about setting up for git in Intellij using gradle.resently wrote in git. so i found how to set up using maven. result of all, i setted up using maven.(pom.xml)

success file is Last of this page.

Maveでセットアップ

pom.xmlを作成してビルドをかけると必要なライブラリなどがインストール出来ます。

プロジェクトの作成は下のページを参照してください。
こちらを参照してください※こっちの方が正しい情報があります。「正しい」というのはちゃんとインポートできるということです。

Setting by Maven

we can download libraries easy using maven.just build using pom file.

how to create project is “こちらを参照”.

※インポートできない時は下の様にMavenをUpdate(更新)してください。そして、最後にプロジェクトのビルドをおこなってください。。。

以下のように、POMファイルを修正します。
※上にあるGItへのリンクを参照

change pom file as bellow.sight is 参照

そして、修正すると以下のように「Import Changes」のように表示されるのでそれをクリックします。

下のようにコピペしたままだと赤くりなますので最新のバージョンを設定します。

check the version in pom file.

自分が調べたところでは、javacord(やっぱりGit)には以下のように記載がありました。

there are many kind of libs in that site so i use “javacord”.

ここには「2.0.17」とバージョンの記載があったのでそれを記載し「Import Changes」をクリックします。

しかし、赤いままになってしまいます。

リポジトリが足りませんでした。。。

I did no write repository.

上記のように修正し再度「Import Changes」をクリック。。。がダメでした。

but I can not download ...

仕方ないので以下のサイトのPOMファイルのPOMで再度挑戦

実際に起動したPOMファイルは下になります。結果はエラーになりました。

I can not download libs ...

<?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>zenryokuservice.discord</groupId>
    <artifactId>bot.prac</artifactId>
    <version>1.0-SNAPSHOT</version>

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
        <repository>
            <id>javacord-repo</id>
            <url>http://repo.bastian-oppermann.de</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>de.btobastian.javacord</groupId>
            <artifactId>javacord</artifactId>
            <version>2.0.17</version>
            <!-- This will use the shaded javacord which contains all required dependencies -->
            <classifier>shaded</classifier>
        </dependency>
        <!-- A SLF4J comaptible logging framework. I would recommend to use logback -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.3</version>
        </dependency>
    <!-- 2018/07/16追記 コマンドフレームワーク追加-->
        <dependency>
           <groupId>com.discord4j</groupId> <!-- However our packages are all under sx.blah in version 2.x! -->
           <artifactId>Discord4J</artifactId>
           <version>2.10.1</version>
           </dependency>
        <dependency>
           <groupId>de.btobastian.sdcf4j</groupId>
           <artifactId>sdcf4j-core</artifactId>
           <version>1.0.9</version>
        </dependency>
    <!-- The module for your preferred lib -->
        <dependency>
           <groupId>de.btobastian.sdcf4j</groupId>
           <!-- Possible artifact ids: sdcf4j-javacord, sdcf4j-jda3, sdcf4j-discord4j -->
           <artifactId>sdcf4j-javacord</artifactId>
           <version>2.0.17</version>
        </dependency>
   </dependencies>
</project>

そして、サンプルコードをコピーして実行したいのですが、ビルドエラーが出ます。

足りないライブラリは以下です。

This is my lost lib.(included this class)

om.google.common.util.concurrent.FutureCallback;

URL
https://mvnrepository.com/artifact/com.google.guava/guava

最終的に、作成したコードです。(Success file)

public class HelloDiscord {
    public static void main(String[] args) {
// See "How to get the token" below
        DiscordAPI api = Javacord.getApi("トークンを記述", true);
        api.setEmail("メールアドレス"); // 2018/07/15追記 
        api.setPassword("パスワード"); // 2018/07/15追記
        // connect 
       api.connect(new FutureCallback<DiscordAPI>() {
          public void onSuccess(DiscordAPI api) {
             // register listener 
             api.registerListener(new MessageCreateListener() {
                public void onMessageCreate(
                       DiscordAPI api, Message message) { 
                          // check the content of the message 
                          if (message.getContent().equalsIgnoreCase("ping")) { 
                              // reply to the message 
                              message.reply("pong"); } } });
                      }
                public void onFailure(Throwable t) {
                    t.printStackTrace();
                }
           }
        ); 
   }
}

次回は、トークン(認証情報)を取得して実際にログインします。

 



関連ページ一覧

Java Discord

  1. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜
  2. Java Discord セットアップ〜Hello Discord〜
  3.  Java Discord ピンポン〜Discordプログラム〜
  4. Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜

JavaDoc

    1. Java Doc 読解〜System.out〜
    2. JavaDoc 読解 〜 Filesクラス 〜
    3. Java Doc読解 BufferedReader
    4. Java Doc 読解〜BufferedWriter〜
    5. Java Doc 読解 List 〜JavaDocList その1〜
    6.  Java Doc 読解 Map

IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜

GradleからMavenへ移行します。

こちらのページを参照してください。

イントロダクション

必要な手順としては以下になります。
参考にしたサイトはこちらになります。
1. Gradleをセットアップ〜ライブラリをダウンロードします。〜

2. Webでの登録など。。。

IntelliJ でプロジェクトを作成します。

Gradleを選択し、 Javaを選択します。
※2018-07-11現在ではJava10はGradleで使用できません。。。

Java8を設定することをオススメします。

ここから先はMaveの時と同じです。

プロジェクトを作成してから、build.gradleを以下のように修正します。

plugins {
    id'java'
    id'application'
    id'com.github.johnrengelman.shadow' version '2.0.1'
}

mainClassName = 'com.example.jda.Bot'

version '1.0'
def jdaVersion = '3.3.1_308'

sourceCompatibility = 1.8

repositories {
    jcenter()
}

dependencies {
    compile 'net.dv8tion:JDA:3.6.0_377'
}

compileJava.options.encoding = 'UTF-8'

環境が原因でエラーが出ます。
自分は、以下のようなエラーでハマりました。
「Module 'discord.bot' is not backed by gradle」

結局Gradleがサポートされていません。ということで。。。
JDKを10から8に変更して、build.gradleを修正したら治りました。そして、プロジェクトを再起動しないとビルドは通りませんでした。プロジェクトを開き直してみるのも一つの方法だと思います。

「ハローワールド」も無事に実行できました。

続きは次回にやります。



関連ページ一覧

<セットアップ>

Java Discord セットアップ〜Hello Discord〜

<サンプルアプリ>

Java Discord ピンポン〜Discordプログラム〜

<サンプル拡張>

Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜

<使用する基本>

<クラス>

Java Basic クラスとは〜Step2_1〜

<インターフェース>

Java Basic インターフェース・抽象クラスの作り方