技術者ブログ-Discord BOT作成(無料での24時間稼働まで)

技術者ブログとして日ごろ取り組んでいる学習内容を紹介します。
最近個人的にDiscordのBOTを作成し、無料での24時間稼働に成功したので今回はそちらについてご紹介します。

Discordとは

本題に入る前に、まずDiscordについて簡単に説明します。
Discordはアメリカで開発されたテキスト・ボイス・ビデオでコミュニケーションが取れるサービスです。
私は主に作業時の通話アプリとして利用しています。

Discordの主な機能は以下のとおりです。(本題に関係する部分のみ抜粋します)

◆サーバー
サーバーとはグループチャットのような機能です。複数のユーザーとテキストチャットや音声でやり取りができます。
サーバーには オープンサーバー(申請してDiscord内検索や掲示板サイトでサーバーを公開し、メンバー募集できる)と、プライベートサーバー(申請しない限り招待制で利用する)があります。

◆テキストチャンネル
サーバー内のグループチャット機能です。メンバー同士でテキストのやり取りができます。

◆ボイスチャンネル
サーバー内のグループ通話機能です。入室したメンバー同士で会話や画面共有ができます。

◆BOT
BOTを導入すると、サーバーの機能を拡張できます。公開されているBOTを招待すれば、音楽再生・テキスト読み上げ・タイマー・予定調整など、便利な機能を追加できます。
また、自作BOTを招待して動かすことも可能です。

BOT作成から稼働まで

今回作成したのは、プライベートサーバー向けの 「ボイスチャンネル入室通知BOT」 です。

◆きっかけ
Discordでは、ボイスチャンネルに入室してもサーバーメンバーに通知が行かない仕様のため、誰かが待機していても気付かずに一人で作業してしまうことがありました。
そこで「入室を通知してくれるBOTがあれば便利なのでは」と考え、作成することにしました。

◆実施内容
①BOTの機能を決めてコーディング
BOTを24時間無料で稼働させることができるサイトに合わせて、JavaScriptでmain.jsファイルを作成します。

機能としては以下を入れています。
・「作業中」ボイスチャンネル内の人数が0人から1人になった時のみ「通話募集(自動)」テキストチャンネルに通話募集のメッセージ送信
・1人から0人になったら「通話募集(自動)」に送信されていた通話募集メッセージを全削除
・1人から2人以降は「通話募集(自動)」に通話募集のメッセージを送信しない

以下は実際のコーディングの一部です。

②Discord Developer PortalにBOTアカウントを作成
Discord Developer Portalにアクセスし、New ApplicationからBOTアカウントを作成し、トークンを取得します。

BOTの権限設定で以下を有効にします。

BOTの権限を設定したら生成されたURLからBOTをサーバーに招待します。

③GitHubにリポジトリを作成し、ソースをアップロード
以前技術者ブログでも紹介したことがあり、社内勉強会でも触ったことのあるGitを使用しました。
GitHubにリポジトリ作成をしてソースをアップロードします。

④Deno.deployとGitHubを連携してログイン
Deno.deployの中でプロジェクトを作成し、GitHubで作成したリポジトリをインポートします。
②で取得したトークンをEnvironment variablesに設定します。

⑤ソースの最後の方にDeno.cronを記載し、24時間稼働させる
BOTが止まらないように2分ごとにDeno.deploy上で軽く動作させるための定期処理(Cronジョブ)をソースの最後の方に記載します。
これで24時間BOTが稼働してくれるようになります。

⑥Discordサーバーでテスト
実際にボイスチャンネルに入室して想定通りに動くか確認します。

ボイスチャンネルに0人の状態。テキストチャンネルにはメッセージがない状態です。
ボイスチャンネルに入室してボイスチャンネルの人数が0人から1人になるとテキストチャンネルに通話募集のメッセージが送信されます。
ボイスチャンネルから抜けて、ボイスチャンネル内の人数が1人から0人になるとテキストチャンネルのメッセージが自動で削除されます。

想定通りに動くことが確認できたので、翌朝BOTがオフラインになってないか確認したら完了です。

以上、長くなってしまいましたが、DiscordのBOT作成から無料での24時間稼働まででした。

次回の技術者ブログをお楽しみに。