LoginSignup
0
2

More than 1 year has passed since last update.

VCに誰かが入った時に通知してくれるbotを作る【Discord/Java】

Posted at

はじめに

身内用に誰かがDiscordのVCに入ったときに通知してくれるbotを作ったので覚え書き。

環境

  • Java
  • Gradle
  • Javacord

Javacordの導入

JavacordはDiscord botをJavaで開発するためのライブラリです。
以下のようにgradleファイルに記述します。

gradle.build
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:バージョン' }

Discord botアカウントの設定

こちらとかを参考にしつつbotを作成する。

ログインする

        DiscordApi api = new DiscordApiBuilder()
                .setToken("ここにbotトークンを入れる")
                .login().join();

botトークンに関しては直接記述したり、環境変数に入れてSystem.getenv().get("TOKEN")とかで取得すると良いと思います。

VCに誰かが入ったときを検知する

        api.addServerVoiceChannelMemberJoinListener(event -> {});

addServerVoiceChannelMemberJoinListenerはサーバー上の誰かがVCに接続したときに呼ばれます。
ラムダ式を用いてeventにイベント情報を格納します。

メッセージを送る

            String user = event.getUser().getName();
            String channel = event.getChannel().getName();

            if (event.isMove()) return;

            new MessageBuilder()
                    .append(user, MessageDecoration.UNDERLINE)
                    .append(" が ")
                    .append(channel, MessageDecoration.BOLD)
                    .append(" に入ったよん")
                    .send(api.getTextChannelsByName("通知先のチャンネル名").iterator().next());

userにVCに接続した人の名前、channelに接続したチャンネル名を格納します。
ユーザが移動する度にメッセージが送られるとうるさいのでisMove()の際は処理を終了します。
MessageBuilderを生成してメッセージを作り、送信します。
MessageDecorationをパラメータに指定すると文字を太字にしたり下線を引いたりできます。
appendで文字列の結合、sendで指定先のテキストチャンネルにメッセージを送信します。
getTextChannelsByName()を用いて名前でチャンネル名を検索し、検索結果のコレクションの先頭のチャンネルを取得します。

メッセージのところは自分の好きなように編集すると良いと思います。

動かす

プログラムを実行してDiscordサーバーで動かします!
5df9710685a931d75128ed4b012d1f75.png
botが通知メッセージを送ってくれます。

おわりに

このbotを導入したら作業VCに人が集まりやすくなりました。
VCに入った時に通知があれば気づきやすいですからね。

最終的なコードを貼っておきます。

参考文献

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2