1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCP上でDiscord用ダイスボットを動かしてみる&設定を自動化する

Posted at

はじめに

サイコロによる判定(ダイスロール)をオンラインで実行できる神ツール、BCDice
これをDiscordのチャットで使えるようにする神Botがあります。

これがあればDiscord内でもTRPGセッションができる!さっそく導入してみました。

BCDice
https://bcdice.org/

discord-bcdicebot
https://shunshun94.github.io/discord-bcdicebot/index.html

このBotを使用するには、Botが稼働するコンピュータが1台と、BCDiceのAPIが稼働しているサーバが必要になります。

APIサーバの方は使用可能なものが幾つか公開されているため、そちらをお借りすればOKです。
(自分でHerokuに構築する手順も公開されています)

Botの方はファイルをダウンロードしてbatかshファイルを実行すればよいので、自分のPCでも問題はないのですが、
せっかくなので今回はGCP上に構築してみました。

準備

discord-bcdicebotのリンク先にある「ダイスボットを登録する」に従い、DiscordにBotを作成します。
最後のURLアクセスまで完了すると、Dicebot君がサーバにやってきます。
Botのトークンは後で使うので、開発者画面は開きっぱなしにしておいてください。
ss5.png

Botを動かすためのサーバを用意する

プロジェクト作成

まずは大枠となるプロジェクトから作っていきます。
「リソースの管理」ページか、ダッシュボードからでも作成できます。
ss1.png

プロジェクトの作成と管理
Google Cloud プロジェクトは、API の管理、課金の有効化、共同編集者の追加と削除、Google Cloud リソースに対する権限の管理など、すべての Google Cloud サービスの作成、有効化、使用の基礎となります。
https://cloud.google.com/resource-manager/docs/creating-managing-projects

Computed Engine作成

Compute Engineは、ざっくりいうとGCPのサーバインスタンスです。
「VMインスタンスの作成」から作成していきます。

料金は性能と使用時間、それとリージョンによって決まります。
東京に置くとちょっとだけ高いので、デフォルトのus-central1にしておきましょう。

シリーズは第2世代「E2」の最小(e2-micro)にします。
月間予測を見てみると、$6.52。停止中は時間単位の課金は発生しないので(やさしい)、
必要な時だけ立ち上げておけば更に安く済みそうです。1

DicebotはJavaで動作するため、VMにもJavaをインストールしておく必要があります。
以下リンク先にJavaの起動スクリプトがあるので、これをコピーして起動時にインストールが走るようにします。

なお、起動スクリプトの欄はデフォルトでは表示されません。
「管理、セキュリティ、ディスク、ネットワーキング、単一テナンシー」をクリックすると「自動化>起動スクリプト」の欄が出てくるので、ここに貼り付けます。

Compute Engine での Java スタートガイド
https://cloud.google.com/java/docs/tutorials/getting-started-on-compute-engine?hl=ja

ss3.png
ss4.png

また、起動後にファイルのダウンロード・解凍、設定ファイルの編集が必要なのですが、面倒なので全部自動化します
(※discord-bcdicebot v1.14.4で動作確認済ですが、うまく動作しない場合は手動で実施してください)

まず、上の起動スクリプトは2回目以降だと途中で終了してしまうようなので、javaが未インストールのときのみ実行されるようにIF文で囲います。

if ! java -version COMMAND &> /dev/null; then
# (元のスクリプト)
fi

そして、スクリプトの末尾に以下を追記します。

# カスタムメタデータ取得
DISCORD_BOT_TOKEN=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/DISCORD_BOT_TOKEN" -H "Metadata-Flavor: Google")
BCDICE_API_URL=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/BCDICE_API_URL" -H "Metadata-Flavor: Google")
BCDICE_PASSWORD=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/BCDICE_PASSWORD" -H "Metadata-Flavor: Google")

cd /
if ! [ -d "discord-bcdicebot" ]; then
  apt-get install wget
  apt-get install unzip

  # ファイルがGoogle Drive上にあるため、gdown(https://github.com/circulosmeos/gdown.pl)でダウンロード
  echo "Dicebot Downloading..."
  wget https://raw.githubusercontent.com/circulosmeos/gdown.pl/master/gdown.pl -O gdown.pl
  chmod +x ./gdown.pl
  ./gdown.pl "https://drive.google.com/u/0/uc?id=0BwmXeRuZhw9oUzBINlJUdEp2eGM&export=download" discord-bcdicebot.zip

  echo "Extracting..."
  unzip discord-bcdicebot -d discord-bcdicebot
fi

# 起動設定を編集
cd discord-bcdicebot
sed -i -e "s/DISCORD_BOT_TOKEN=.*$/DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN}/g" start.sh
sed -i -e "s,BCDICE_API_URL=.*$,BCDICE_API_URL=${BCDICE_API_URL},g" start.sh
sed -i -e "s/# BCDICE_PASSWORD=PleaseChangeMeIfYouUseThis/BCDICE_PASSWORD=${BCDICE_PASSWORD}/g" start.sh

# バックグラウンドで実行
nohup sh start.sh &

echo "Dicebot Started"

トークンなどの設定値はベタ書きにしたくないので、カスタムメタデータとして設定します。2

  • DISCORD_BOT_TOKEN: Bot作成時に取得したトークン
  • BCDICE_API_URL: BCDice-APIのURL
  • BCDICE_PASSWORD: 任意のパスワード(Botの管理者コマンドを実行するときに要求されます)

ss6.png

設定が終わったら「作成」ボタンをクリックします。
ちゃんと動いているか確認するため、ログを表示してみましょう。(結構時間かかります)

ss7.png
ss8.png
スクリプトの最後まで行ってくれたようです。
Discordの方を確認してみましょう。
ss9.png
ss10.png
無事にBot君がオンラインになってくれました。
出目も大変縁起が良いです。

停止/再起動でBot君を叩き起こせることも確認できたので、ひとまず目的は達成です。
それでは、ツール制作者様に感謝しつつ、さっそく遊んできます。

  1. インスタンスの停止と起動 https://cloud.google.com/compute/docs/instances/stop-start-instance
    ss2.png

  2. インスタンス メタデータの保存と取得 https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom
    起動スクリプトのすぐ下に「メタデータ」の欄があるので、以下のパラメータを追加してください。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?