discord-bcdicebot

概要

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

DOWNLOAD

必要なもの

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

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

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

BCDice-API サーバ

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

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

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

heroku を使う場合

PaaS サービス heroku を使って動かすことが可能です。

  1. Git を導入します。Git: https://git-scm.com/
  2. Heroku のアカウントを作成します。Heroku: https://www.heroku.com/home
  3. Heroku CLI を導入します。インストールガイド: https://devcenter.heroku.com/articles/heroku-cli
  4. GitHub からソースコードを clone してきます。URL は git@github.com:Shunshun94/discord-bcdicebot.git
  5. clone してきたディレクトリ内で heroku login を実行し、ログインします
  6. clone してきたディレクトリ内で heroku create を実行し、heroku 上に App を作成します
  7. clone してきたディレクトリ内で git push heroku master を実行し、heroku 上にソースコードを push します
  8. clone してきたディレクトリ内で以下を実行し、環境変数を設定します
  9. (必須ではない) 以下の環境変数を設定します。
  10. Heroku の Dashboard から worker を起動します。Heroku の Dashboard:https://dashboard.heroku.com/
https://dinosaur-fossil.hatenablog.com/entry/2020/12/23/001818 を参考に記載しています。
また、既知の問題として追加したダイスボット表の名前に ascii 文字以外が含まれる場合にダイスボット表の名前を正しく読み込めない問題が存在します。 この方法で設置する場合はダイスボット表を半角英数字・記号で命名してください。

利用する

チャットにただただ 2d6 等と打ち込めばダイスが振られます。他にどのようなコマンドが利用できるのかは BCDice コマンドリストをご参照ください。

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

どんなシステムが利用できるのかは bcdice list と発言すれば確認できます。

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

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

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

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

管理コマンドを使う

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

ダイスサーバの変更および管理

接続する BCDice-API サーバを変更する場合は bcdice admin [パスワード] setServer [BCDice-APIサーバのURL]
ただし、このコマンドを実行した場合、変更前の BCDice-API サーバは bot によって忘れられるのではなく、予備のサーバとして bot の内部に保持されます。
もし、BCDice-API サーバへのアクセスになんらかの問題があった場合、 bot は内部に保持された別の BCDice-API サーバを代わりに使おうとします。

bot が保持する予備のサーバから特定の BCDice-API サーバを削除したい場合はbcdice admin [パスワード] removeServer [BCDice-APIサーバのURL]

bot が保持する予備のサーバから特定の BCDice-API サーバを一覧したい場合はbcdice admin [パスワード] listServer [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 [ダイスボット表名]
追加した後ダイスボット表の名前がチャット上で発言されるとダイスボット表が振られます。 この際にアップロードするダイスボット表のサンプルは オリジナル表 · BCDiceコマンドガイド ないしはdiscord-bcdicebot/originalDiceBots/サンプルダイスボット-夜食表を参照してください。
両者でフォーマットが異なりますが、どちらも利用できます。
また、追加するダイスボット表は UTF-8 で作成されている必要があります。 Windows 付属のメモ帳であれば名前を付けて保存する際に保存ボタンの左に「文字コード」を選択できる箇所があります。ここで UTF-8 を選択した上で保存してください。

ダイスボット表を削除する際は以下のようにしてください。
bcdice admin [パスワード] removeDiceBot [ダイスボット表名]
ダイスボット表の一覧は次のようにすると確認できます。
bcdice admin [パスワード] listDiceBot

上述の通り、heroku に設置した場合に独自のダイスボット表の名前を正しく取得できないことがあります

Bot が登録されている Discord サーバの情報を取得する

Bot が登録されているサーバの一覧を取得するには次のようにします。
bcdicediscord [パスワード] listServers

Bot が登録されているサーバに存在する部屋の一覧を取得するには次のようにします。情報は
bcdicediscord [パスワード] listRooms

Bot が登録されているサーバに存在する部屋の ID 一覧を取得するには次のようにします。
bcdicediscord [パスワード] listRoomIds

連絡先

バグ報告など

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

寄付先

Amazon のウィッシュリスト

ライセンス

使用しているライブラリ

利用しているサービス

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

本アプリのライセンス

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

Q&A

質問・バグ報告はどこに

@Shunshun94 ないしは github の issues に。

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

ダイスを振った時にメンションしてほしいんだけど

環境変数 BCDICE_MENTION_MODE になんらかの値を入れた状態で bot を起動してください

Version 2? Version 1 との差異として気を付けるべき点は何?

以下について変更が入っています。

Version 1 を使いたいのだけれども

こちらからダウンロードいただけます。ただし今後更新はされません

なんで 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 のコマンドは本アプリの物を参考にしてくださいました。 ブラウザのみで動くため、大変に便利です。

更新履歴

v2.2.0
Heroku 上で動かすための設定ファイル Procfile を追加しました。ファイルを共有してくださった yoshi さん、ありがとうございます!(詳細
Bot が登録されているサーバの情報を取得できるようにしました
オリジナルダイスボット表に関する問題をいくらか修正しました
v2.1.0
環境変数 BCDICE_MENTION_MODE に何らかの値が入っている場合、ダイスを振った際に振った人にメンションを付けて結果を表示するように変更
v2.0.2
bcdice help SYSTEM_NAME がうまく動かない問題を報告いただき、修正しました。h-mikisato さん、ありがとうございます!(詳細
システム設定のインポート・エクスポートの出力を修正しました
オリジナルダイスボット表の繰り返しコマンドについて出力を修正しました
v2.0.1
オリジナルダイスボット表に関する問題を修正しました
v2.0.0
BCDice-API 2.0 に対応しました
コマンド中に全角スペースが含まれている場合、半角スペースとして扱うようにしました
v1.14.5
このファイルのタイポを修正頂きました(詳細)。yoshi さん、ありがとうございます!
v1.14.4
利用しているライブラリを更新しました
v1.14.3
利用しているライブラリを更新しました
アプリ内で使っている用語のいくつかを修正しました
v1.14.2
ヘルプとマニュアルの修正を実施しました
v1.14.1
利用する予定の BCDice API サーバを一覧する機能を追加しました
利用する予定の BCDice API サーバから特定のサーバを削除する機能を追加しました
挙動を安定させるために若干修正を加えました
複数回振る時の挙動に関するバグを修正しました
v1.14
オリジナルのダイスボット表にヘルプテキストを追加できるようにしました
複数回ロールする機能で発生していたいくつかのバグを修正しました
Discord の API 仕様変更の予定に追随しました
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)
公開