discord-bcdicebot

概要

Discord で BCDice を使うための bot です。各サーバに対して、ユーザが導入して利用します。

DOWNLOAD

必要なもの

このアプリは Discord のチャットに参加するユーザのうち、1人の環境で動かす必要があります。動かす人には以下の準備が求められます

Java 8 ないしそれ以降の実行環境

Java 実行環境 のインストール方法は Javaをインストールするには をご覧ください。

BCDice-API サーバ

BCDice-API が動作しているサーバを用意してください。ローカルでも構いませんし、貸してくれる人から借りてもかまいません。

BCDice-API サーバを自分で構築するのは一定の専門知識が必要です。 独自のダイスボットを追加するのでなければ、bcdice/bcdice-api-servers に記載されている公開サーバを利用する方が良いでしょう。 各公開サーバには利用ルールがあるため、利用前に事前にご確認ください。

また、中級者向けに Heroku を用いての自分用 BCDice-API サーバの設置手順も共有されています。
https://github.com/ysakasin/bcdice-api/blob/master/docs/heroku.md

使い方

ダイスボットを登録する

Discord に新規の Bot を作成します。サーバ1つにつき代表者1人がいれれば大丈夫です

  1. 開発者ページ にアクセスし、New APP をクリックします
  2. 最低限 APP NAME と APP ICON を入力し、 Create App をクリックします
  3. Create Bot User というボタンをクリックし、このダイスボット用のユーザを作成します
  4. Bot の Username の下に "Token:click to reveal" というのがあるのでクリックし、出てくるランダムな文字列をメモします
    この文字列は他の人に教えないこと
    この文字列は NDA0MgAIC0QK18lU0dxMt99F.HuWAIt.Nh9OTLbjxdMp3pcmw3Lsqd4aQlb のような形式の値となります(この値はダミーです)。
  5. 画面上部の APP DETAILS のところに書かれた Client ID の数字をメモします
  6. 次の URL にアクセスします
    https://discordapp.com/oauth2/authorize?client_id=[Client Id の数字]&scope=bot&permissions=0

アプリケーションを起動する

Bot を起動し、 Discord 上で BCDice を利用可能にします。サーバ1つにつき代表者1人がアプリを起動すれば大丈夫です

  1. Windows を使っている方は start.bat をメモ帳で開きます (ほとんどの方はこちら!)。
    Linux/macOS を使っている方は start.sh を適当なテキストエディタで開きます
    以下では start.bat を編集している前提で記載します
  2. DISCORD_BOT_TOKEN= の末尾に先の 4. でメモした Token を貼り付けます
  3. BCDICE_API_URL= の末尾に利用する BCDice-API サーバの URL を貼り付けます
  4. 管理用パスワードを決め、PleaseChangeMeIfYouUseThisを決めた管理用パスワードに書き換えます
  5. REM set BCDICE_PASSWORD=PleaseChangeMeIfYouUseThisの "REM" を削除します
  6. (必須ではない)
    REM set BCDICE_API_SECONDARY=http://secondary.bcdice-api.yourdomain.co.jp/の "REM" を削除します
    その上で http://secondary.bcdice-api.yourdomain.co.jp/ を予備の BCDice-API サーバの URL に書き換えます
  7. (必須ではない)
    REM set BCDICE_DEFAULT_SYSTEM=DiceBotの "REM" を削除し、DiceBotを利用するデフォルトのシステム名に書き換えます
  8. Windows を使っている方は メモ帳を閉じ、 start.bat をダブルクリックします
    Linux/macOS を使っている方は編集を保存・完了し start.sh を実行します
  9. Bot が起動します。Discord の参加者一覧に Bot がオンラインの状態で存在すれば成功です
  10. 終了はキーボードの Ctrl + C を押してください
start.sh を編集する際は REM ではなく # を消すと上手くいきます

利用する

チャットにただただ 2d6 等と打ち込めばダイスが振られます。

各システム向けの機能を使いたい場合、ダイスボットを切り替えましょう。
bcdice set [利用するダイスボットの名前] とチャット上で発言してください。
例えば bcdice set SwordWorld2.0 等です。

どんなダイスボットが利用できるのかは bcdice list と発言すれば確認できます。

各ダイスボットでどんな機能が利用できるのかを確認する際は bcdice help [ダイスボットの名前] と発言すれば表示できます。
例えば bcdice help SwordWorld2.0 等です。

ダイスを振る際にダイスコマンドの手前にダイスを振る回数を記入することでその回数分ダイスを振ることができます。例えば3 2d6とすれば3回 2d6 を振ることが可能です。
また、数字ではなく[]でカンマ区切りのリストを与えるとそのリストのそれぞれについてダイスを振ることができます。例えば[こぶた,たぬき,きつね,ねこ] 2d6 とすることでこぶた、たぬき、きつね、ねこのそれぞれについて 2d6 を振ることが可能です。

管理者はオリジナルのランダム表を追加することもできます。詳細は管理コマンドをご確認ください。

チャットに bcdice help と打てば何ができるのかが一覧されるので困ったときは実行してみてください。

管理コマンドを使う

チャットに bcdice admin [パスワード] help と打てば管理者として利用できるコマンドの一覧が出力されます

接続する BCDice-API サーバを変更する場合は bcdice admin [パスワード] [BCDice-APIサーバのURL]

各部屋ごとに設定されたダイスボットの一覧を取得する場合は bcdice admin [パスワード] export
以下のような結果が得られます

331084010098917376:SwordWorld2.0
551310555730673666:DoubleCross
541477835299356673:Cthulhu

複数の部屋に対してダイスボットを設定する場合は以下のようにします。
アプリを再起動した際は全部屋のダイスボット設定がリセットされますので、import と組み合わせると原状復帰が容易です

bcdice admin [パスワード] import
331084010098917376:SwordWorld2.0
551310555730673666:DoubleCross
541477835299356673:Cthulhu

チャットに送信されたメッセージを全て BCDice-API サーバに送信したい場合は次のようにします。
bcdice admin [パスワード] suppressroll disable
BCDice-API サーバに送る必要のありそうな発言だけを送信するようにする場合は次のようにします。こちらがデフォルト設定です。
bcdice admin [パスワード] suppressroll on
また、先頭に /r 等が無いと BCDice-API サーバにコマンドを送信しないようにすることもできます。
bcdice admin [パスワード] suppressroll /r
このコマンドワードは / で始まる物であれば任意のものを設定できます。
bcdice admin [パスワード] suppressroll /diceroll
とすれば発言の戦闘に /diceroll があるものだけを BCDice-API サーバに送信します。

独自のダイスボットを追加する場合は Discord にダイスボットの情報をアップロードし、アップロード時のコメントに次のように記載してください。
bcdice admin [パスワード] addDiceBot [ダイスボット名]
追加した後ダイスボット名がチャット上で発言されるとダイスボットが振られます。この際にアップロードするダイスボットのサンプルは originalDiceBots ディレクトリ内のファイルないしはdiscord-bcdicebot/originalDiceBots/サンプルダイスボット-夜食表を参照してください。
ダイスボットを削除する際は以下のようにしてください。
bcdice admin [パスワード] removeDiceBot [ダイスボット名]
ダイスボットの一覧は次のようにすると確認できます。
bcdice admin [パスワード] listDiceBot

連絡先

バグ報告など

Twitter アカウントは@Shunshun94。ないしはリポジトリに issue を追加してください。

寄付先

Amazon のウィッシュリスト

ライセンス

使用しているライブラリ

javacord
Discord との通信で使用。LGPLv3 でライセンスされています。
Logback Classic Module
ロガー。LGPLv2.1 でライセンスされています。
RESTEasy
HTTP クライアント。Aapche 2.0 でライセンスされています。
Apache Commons Lang
java.lang の拡張。Aapche 2.0 でライセンスされています。
minimal-json
json を扱うためのシンプルなライブラリ。MIT ライセンスでライセンスされています。

利用しているサービス

ゲーム設定型ダイスボット「ボーンズ&カーズ」
どどんとふを初めとする多くのオンセツールで採用されているダイスボット。略称は BCDice。修正BSDライセンスでライセンスされています。
BCDice-API
BCDice に HTTP による API を付与するラッパ。MIT ライセンスでライセンスされています。
Discord
ボイスチャットアプリ。パソコンからでも携帯からでも利用可能。

本アプリのライセンス

このアプリ (ソースコードなどを含む) は GPLv3 でライセンスします。
ソースコードはhttps://github.com/Shunshun94/discord-bcdicebotから入手可能です。

Q&A

質問・バグ報告はどこに

@Shunshun94 ないしは github の issues に。

どんな出力が出たのか、出力をコピペして頂けると調査が捗ります。

なんで Java なの。Ruby とか○○とかじゃないの

一般ユーザの PC に Ruby や○○の実行環境が導入されているとは思えなかった

じゃあ単体実行できるバイナリでいいじゃん

Mac ユーザやら Linux ユーザやらごとにバイナリを作るのが面倒だった。 Linux はともかく Mac ユーザはいる気がしたから

ダイスを振るコマンド以外を入力すると [ERROR][500] ~ って出る。設定は合っているはずなのに

start.bat の IGNORE_ERROR=0 の 0 を 1 と書き入れてみてください。治るかもしれません

管理用のパスワードはどこ?

環境変数BCDICE_PASSWORDの値が使われます。
環境変数を指定していない場合は起動直後に Admin Password: SGO7C0XYtBJouE75 みたいな文字列がでます。この英数字ランダム16桁の文字列がパスワードです。起動するたびに変わるので注意してください

謝辞

お世話になった方々

BCDice を作成・公開してくださったFacelessさんと、 Ruby 移植をしてくださったたいたい竹流さん。 さらにメンテを引き継いでくださっている酒田 シンジさん。 そもそも、BCDice が無ければこのアプリは着想すらありませんでした。 BCDice が多機能である点、2017年現在、国内オンラインセッションツールのデファクトスタンダードであるどどんとふが採用しているダイスボットであるため、 国内におけるダイスボットのデファクトスタンダードが BCDice となっていたことが実装の必要を感じたそもそもの理由でした。

BCDice-API を実装・公開してくださった酒田 シンジさん。 BCDice-API が無ければ本アプリの実装は気が遠くなるものだったに違いありません。

発表前の動作確認に付き合ってくださったかし*さんと離凛さん。 色々な想定漏れについて指摘していただき、公開前にアプリが大幅に改善されました。

関連アプリの紹介

Nanasu さんが作ってくださったBCDiscord for Browser のコマンドは本アプリの物を参考にしてくださいました。 ブラウザのみで動くため、大変に便利です。

更新履歴

v1.13.1
マニュアルを少し修正
v1.13
ダイスを一度に複数回振る機能を追加しました
BCDice API サーバが不調の際に別の BCDice API サーバに自動で切り替える機能を追加しました
ダイスボットの種類を指定していない際に利用されるデフォルトのダイスボットを指定する機能を追加しました
v1.12.2
システムの名称にスペースが入っている場合にダイスボットの設定やコマンドの参照ができない問題を修正しました
v1.12.1
ダイスを振る際に接頭語を必要とする設定にしている際、オリジナルのダイスボットについて接頭語の設定が有効になってなかった問題を修正しました
v1.12
BCDice-API へのリクエスト送信頻度を下げる機能を追加しました
管理者がオリジナルのダイスボット表を追加できる機能を追加しました
v1.11
たまに BCDice-API へのリクエストが上手くいかない問題に対して対処しました
パスワードを指定する機能を追加しました
v1.10
Linux/macOS 環境向けの起動スクリプトを追加。スクリプトを共有くださったおちゃさん、ありがとうございます!
v1.9
ダイスボットのスペルが間違えている時に警告が出ない問題を解消しました
v1.8.1(2019/07/24)
本ドキュメントの軽微な修正を実施しました
v1.8(2019/07/23)
ダイスコマンドに関するバグを修正しました (詳細)。
管理用コマンドとして BCDice-API の接続先を変更する機能を追加しました
管理用コマンドとして全部屋に設定されたダイスボット一覧を取得する機能を追加しました
管理用コマンドとして全部屋にダイスボットを設定する機能を追加しました
v1.7(2019/06/10)
bcdice list でダイスボットの一覧が表示されないことがある問題を修正しました
v1.6(2018/11/11)
一部のエラーを無視する機能を追加しました。詳しくは上述の ダイスを振るコマンド以外を入力すると [ERROR][500] ~ って出る。設定は合っているはずなのに を参照してください
設定用コマンドを一部修正しました
v1.5(2018/03/24)
ダイスコマンドに関するバグを修正しました (詳細)。問題の指摘と修正手法の共有をしてくださったcardinal さん、ありがとうございます!
v1.4(2017/10/07)
利用しているライブラリ起因の問題に対してライブラリをバージョンアップして対応しました。問題の指摘をくださったシーラさん、ありがとうございます!
アプリ終了後に待機するように start.bat を変更しました。ログの収集が容易になりました
v1.3(2017/07/13)
Channel 毎に異なるダイスボットを利用できるように変更しました。特に設定していない場合は general のものを利用しています
v1.2(2017/07/06)
BCDice-API v0.4.0 に対応しました。問題の指摘をくださった酒田 シンジさん、ありがとうございます!
v1.1.1(2017/06/30)
本ドキュメントの権利的な問題に対応しました
v1.1(2017/06/30)
いくらかの内部的な問題を修正。機能への変更はありません
v1.0 (2017/06/26)
公開