はじめに
サイコロによる判定(ダイスロール)をオンラインで実行できる神ツール、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のトークンは後で使うので、開発者画面は開きっぱなしにしておいてください。
Botを動かすためのサーバを用意する
プロジェクト作成
まずは大枠となるプロジェクトから作っていきます。
「リソースの管理」ページか、ダッシュボードからでも作成できます。
プロジェクトの作成と管理
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
また、起動後にファイルのダウンロード・解凍、設定ファイルの編集が必要なのですが、面倒なので全部自動化します。
(※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の管理者コマンドを実行するときに要求されます)
設定が終わったら「作成」ボタンをクリックします。
ちゃんと動いているか確認するため、ログを表示してみましょう。(結構時間かかります)
スクリプトの最後まで行ってくれたようです。
Discordの方を確認してみましょう。
無事にBot君がオンラインになってくれました。
出目も大変縁起が良いです。
停止/再起動でBot君を叩き起こせることも確認できたので、ひとまず目的は達成です。
それでは、ツール制作者様に感謝しつつ、さっそく遊んできます。
-
インスタンスの停止と起動 https://cloud.google.com/compute/docs/instances/stop-start-instance
↩ -
インスタンス メタデータの保存と取得 https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom
起動スクリプトのすぐ下に「メタデータ」の欄があるので、以下のパラメータを追加してください。 ↩