Discord で BCDice を使うための bot です。各サーバに対して、ユーザが導入して利用します。
このアプリは Discord のチャットに参加するユーザのうち、1人の環境で動かす必要があります。動かす人には以下の準備が求められます
Java 実行環境 のインストール方法は Javaをインストールするには をご覧ください。
BCDice-API が動作しているサーバを用意してください。ローカルでも構いませんし、貸してくれる人から借りてもかまいません。
導入手順を画像付きで分かりやすくまとめた記事をえいむさんが書いてくださっています。
必要に応じてこちらも読むことをおすすめします。
https://aimsot.net/discord_dicebot/
Discord に新規の Bot を作成します。サーバに導入するため、サーバ管理者がこれを実行することになるでしょう。
MESSAGE CONTENT INTENT
を ON にしますMESSAGE CONTENT INTENT
の設定はスラッシュコマンドでしか利用しない予定であれば不要です。NDA0MgAIC0QK18lU0dxMt99F.HuWAIt.Nh9OTLbjxdMp3pcmw3Lsqd4aQlb
のような形式の値となります(この値はダミーです)。d70963bg6e4df564f3648c87c514f15bef8ce3b38af1156800bcc3395c062f80
のような値ではありません。DOWNLOAD から Discord-Bcdicebot をダウンロードし、解凍します。
その上で同梱されている start.bat を以下のように編集します(Linux/macOS を使っている方は以下を参考に start.sh を編集してください)。
@echo off cd /d %~dp0 set DISCORD_BOT_TOKEN=詳細1.の5で得たランダムな文字列 set BCDICE_API_URL=BCDice-APIサーバのURL set IGNORE_ERROR= set BCDICE_PASSWORD=管理用のパスワード。ここに入れた文字列がパスワードとして設定される set BCDICE_API_SECONDARY=予備のBCDice-APIサーバのURL REM set BCDICE_DEFAULT_SYSTEM=DiceBot REM set BCDICE_MENTION_MODE=1 REM set BCDICE_RESULT_DISPLAY_FORMAT=V1 REM set BCDICE_SLASH_PREFIX=bcdice REM set BCDICE_SLASH_SHORT_PREFIX=br REM set BCDICE_STANDARD_INPUT_DISABLED=disabled REM set BCDICE_SLASH_TABLE_SUGGESTION_DISABLED=disabled java -jar discord-bcdicebot.jar %DISCORD_BOT_TOKEN% %BCDICE_API_URL% %IGNORE_ERROR% pause
BCDICE_PASSWORD
と BCDICE_API_SECONDARY
の行の先頭には
編集を始めた時点では REM という文字列があるのでこれは削除してください。
BCDICE_API_URL
と BCDICE_API_SECONDARY
の右に入力する値はhttps://api-status.bcdice.org/ に記載されている公開サーバを利用する方が良いでしょう。
各公開サーバには利用ルールがあるため、利用前に事前にご確認ください。
各パラメータは以下のような意味を持ちます。
DISCORD_BOT_TOKEN | 必須です。Discord の Bot アカウントに接続するための情報です |
---|---|
BCDICE_API_URL | 必須です。ダイスを振るための BCDice-API サーバの URL です |
IGNORE_ERROR | ダイスを振るコマンド以外を入力した場合に BCDice-API サーバが 500 エラーを返す場合にそれを無視するか否かを設定します。これの値を1にすることでエラーを無視するようになります |
BCDICE_PASSWORD | 管理用パスワードです。入力しなかった場合、起動のたびにランダムな値がパスワードとして設定されます |
BCDICE_API_SECONDARY | BCDICE_API_URL で設定した BCDice-API サーバが何らかの都合で使えない場合に利用される代替のサーバの URL です |
BCDICE_DEFAULT_SYSTEM | 部屋ごとにシステムを設定していない場合に使われるシステムです。設定しない場合は DiceBot が使われます。先頭の REM ないし # を削除しなければ有効になりません |
BCDICE_MENTION_MODE | ダイスを振った際の結果に振った人へのメンションするか否かを設定します。これの値を1にすることでメンションするようになります。先頭の REM ないし # を削除しなければ有効になりません |
BCDICE_RESULT_DISPLAY_FORMAT | ダイスを振った結果の表示を設定します。これの値を V1 にすることで旧表示に戻し、ダイスの結果にシステム名も記載されます。先頭の REM ないし # を削除しなければ有効になりません |
BCDICE_SLASH_PREFIX | スラッシュコマンドを有効にします。ここに入力された値がスラッシュコマンドの接頭語となります。先頭の REM ないし # を削除しなければ有効になりません |
BCDICE_SLASH_SHORT_PREFIX | ダイスを振る場合に用いるスラッシュコマンドの短縮ワードを設定します。スラッシュコマンドが有効な場合にのみ有効です。入力しなかった場合、br が接頭語に設定されます。先頭の REM ないし # を削除しなければ有効になりません |
BCDICE_STANDARD_INPUT_DISABLED | この値に何らかの文字列が入っている場合、スラッシュコマンド以外の手段で設定やダイスロールを行うことができなくなります。先頭の REM ないし # を削除しなければ有効になりません |
BCDICE_SLASH_TABLE_SUGGESTION_DISABLED | この値に何らかの文字列が入っている場合、スラッシュコマンドを用いた際のオリジナル表のサジェストが機能しません |
先に編集した start.bat をダブルクリックすることでダイスボットが起動します。黒い背景に白い文字が出ているウィンドウが表示され、そこにダイスボットの実行ログが表示されます。
ダイスボットを終了する時は表示されているウィンドウを消すか、キーボードの Ctrl+C を押してください。
Windows 環境の方は同梱してある validate.bat をダブルクリックすることで何が問題なのか確認するツールが動作します。 それでもわからない場合は validate.bat の結果を後述の "質問・バグ報告はどこに" 記載の連絡先に送ってください。
利用手順を画像付きで分かりやすくまとめた記事をえいむさんが書いてくださっています。
必要に応じてこちらも読むことをおすすめします。
https://aimsot.net/discord_dicebot02/
BCDICE_STANDARD_INPUT_DISABLED
が設定されていない場合、
チャットに BCDice のコマンドを書き込めばダイスが振られます。
例えば 2d6
等と書き込めばサイコロを2つ振った合計値が得られます。
どのようなコマンドが利用できるのかは BCDice コマンドリストをご参照ください。
BCDice にはない独自の振り方として、[
と]
でカンマ区切りのリストを与えるとそのリストのそれぞれについてダイスを振ることができます。
例えば[こぶた,たぬき,きつね,ねこ] 2d6
とすることでこぶた、たぬき、きつね、ねこのそれぞれについて 2d6 を振ることが可能です。
BCDICE_SLASH_PREFIX
が有効な場合はスラッシュコマンドでダイスを振る際に同様の記法を用いることが可能です。
例えば、BCDICE_SLASH_PREFIX
の値がbcdice
ならば
/bcdice roll 2d6
や/bcdice roll [こぶた,たぬき,きつね,ねこ] 2d6
等とすればダイスを振ることが可能です。
BCDICE_STANDARD_INPUT_DISABLED
が設定されていない場合、
以下のような設定をチャットに書き込むことで実施できます。
bcdice list |
利用できるダイスボットのシステムを一覧します | - |
bcdice set [利用するシステムの名前] |
そのテキストチャンネルで利用するダイスボットのシステムを指定します。この設定はテキストチャンネル毎に保持されます。利用できるシステムはbcdice list でご確認ください |
bcdice set SwordWorld2.5 ダイスボットの設定をソードワールド2.5にする |
bcdice help [利用するシステムの名前] |
そのダイスボットのシステムのコマンドに関するヘルプを表示します。利用できるシステムはbcdice list でご確認ください |
bcdice help SwordWorld2.5 ソードワールド2.5のダイスボットで何をできるのか確認する |
bcdice status |
現在利用しているダイスサーバと、このコマンドが打たれたテキストチャンネルで利用されているダイスボットのシステムを出力します | - |
bcdice help |
discord-bcdicebot 自体のヘルプを呼び出します | - |
例えば CoC 7版のダイスボットを使いたい時は使いたいテキストチャンネルでbcdice set Cthulhu7th
と入力し、ダイスボットのシステムを CoC 7版のものに設定します。
その上でCC<=25 【目星】
等と書き込めば CoC 7版の判定ができます。
start.bat
ないしstart.sh
と同じディレクトリにあるBCDiceConfiguration
ディレクトリ内のファイルに
どの部屋がどのシステムを使っているのかが保存されます。 次の起動時は保存された情報に基づいて部屋ごとのシステムを設定します
BCDICE_SLASH_PREFIX
が有効な場合はスラッシュコマンドでダイスを振る際に同様の記法を用いることが可能です。
詳細はスラッシュコマンドの説明をご確認ください。
BCDICE_STANDARD_INPUT_DISABLED
が設定されていない場合、
以下のような設定をチャットに書き込むことで実施できます。
パスワードは start.bat
ないし start.sh
で設定した BCDICE_PASSWORD
の値を用いてください。
bcdice admin [パスワード] listServer |
discord-bcdicebot が参照する BCDice-API サーバの一覧を表示します。1個以上のサーバの URL が出力されます。 もし、その時点で利用している BCDice-API サーバが利用できなかった場合、一覧に表示された別のサーバを discord-bcdicebot は利用します | bcdice admin myPassw0rd listServer 出力例 https://bcdice.onlinesession.app/ https://bcdice.trpg.net/ |
bcdice admin [パスワード] setServer [BCDice-APIサーバのURL] |
discord-bcdicebot が利用する BCDice-API サーバを変更します。 discord-bcdicebot が参照する BCDice-API サーバの一覧に変更後のサーバがなかった場合、変更後のサーバを一覧に追加します | bcdice admin myPassw0rd setServer https://bcdice.onlinesession.app |
bcdice admin [パスワード] removeServer [BCDice-APIサーバのURL] |
discord-bcdicebot が参照する BCDice-API サーバの一覧からサーバを削除します。 現在使っているサーバを削除した場合、一覧に存在する別のサーバを利用するように設定は変更されます | bcdice admin myPassw0rd removeServer https://bcdice.onlinesession.app |
bcdice admin [パスワード] export |
全テキストチャンネルについてどのダイスボットのシステムを利用しているのか出力します | bcdice admin myPassw0rd export 出力例 Room-System List 655334231928733699:SwordWorld2.5 768400929514061826:SwordWorld2.0 665445513117564962:SwordWorld2.5 643025877055176707:DoubleCross general:DiceBot |
bcdice admin [パスワード] import |
複数のテキストチャンネルについてどのダイスボットのシステムを利用するのかを設定します。export の出力結果をそのまま使うことができます。 | bcdice admin myPassw0rd import 655334231928733699:SwordWorld2.5 768400929514061826:SwordWorld2.0 665445513117564962:SwordWorld2.5 643025877055176707:DoubleCross |
bcdice admin [パスワード] updateDiceRollPreFix |
テキストチャンネルに入力された発言がダイスコマンドであるか否かのチェックを行うための情報を更新します。BCDice-API サーバが更新された直後などに使用することで最新のダイスコマンドを利用可能にすることができます | bcdice admin myPassw0rd updateDiceRollPreFix |
bcdice admin [パスワード] suppressroll |
テキストチャンネルに入力された発言のうち、ダイスコマンドであると思われるものを判断して BCDice-API サーバに送信するように設定します。これがデフォルトの挙動です | bcdice admin myPassw0rd suppressroll |
bcdice admin [パスワード] suppressroll [/ で始まる文字列] |
テキストチャンネルに入力された発言のうち、先頭が指定した任意の文字列以外ののみダイスコマンドであると判断して BCDice-API サーバに送信するように設定します | bcdice admin myPassw0rd suppressroll /r |
bcdice admin [パスワード] listDiceBot |
後述するオリジナル表を一覧します | bcdice admin myPassw0rd listDiceBot |
bcdice admin [パスワード] addDiceBot [追加するオリジナル表の名前] |
オリジナル表を追加します。詳細は後述します | bcdice admin myPassw0rd addDiceBot 言語表 |
bcdice admin [パスワード] removeDiceBot [削除するオリジナル表の名前] |
オリジナル表を削除します | bcdice admin myPassw0rd removeDiceBot 言語表 |
bcdice admin [パスワード] refreshSecretDice |
3日以上前に振られたシークレットダイスの情報を削除します | - |
bcdice admin |
bcdice admin コマンドの discord-bcdicebot 自体のヘルプを呼び出します | - |
bcdicediscord [パスワード] listServers |
Bot が登録されているサーバの一覧を出力します | - |
bcdicediscord [パスワード] listRooms |
Bot が登録されているサーバに存在するテキストチャンネルの一覧を取得します | - |
bcdicediscord [パスワード] listRoomIds |
Bot が登録されているサーバに存在するテキストチャンネルの ID の一覧を取得します | - |
start.bat
ないしstart.sh
と同じディレクトリにあるBCDiceConfiguration
ディレクトリ内のファイルに
どの部屋がどのシステムを使っているのかが保存されます。 次の起動時は保存された情報に基づいて部屋ごとのシステムを設定します
BCDICE_SLASH_PREFIX
が有効な場合はスラッシュコマンドでダイスを振る際に同様の記法を用いることが可能です。
ただし、export
、import
、suppressroll
はスラッシュコマンドからは利用できません。
詳細はスラッシュコマンドの説明をご確認ください。
管理者はオリジナル表を追加することもできます。
オリジナル表を追加する場合は Discord にオリジナル表の情報をアップロードし、アップロード時のコメントに次のように記載してください。
bcdice admin [パスワード] addDiceBot [オリジナル表名]
追加した後オリジナル表の名前がチャット上で発言されるとオリジナル表が振られます。
オリジナル表を削除する際は以下のようにしてください。bcdice admin [パスワード] removeDiceBot [オリジナル表名]
オリジナル表の一覧は次のようにすると確認できます。bcdice admin [パスワード] listDiceBot
他のツールと互換性のあるオリジナル表をアップロードすることでそのオリジナル表を利用できます。
記法はオリジナル表 · BCDiceコマンドガイド
ないしはdiscord-bcdicebot/originalDiceBots/サンプルダイスボット-夜食表を参照してください。
両者でフォーマットが異なりますが、どちらも利用できます。
また、追加するダイスボット表は UTF-8 で作成されている必要があります。
Windows 付属のメモ帳であれば名前を付けて保存する際に保存ボタンの左に「文字コード」を選択できる箇所があります。ここで UTF-8
を選択した上で保存してください。
アクセスすることで BCDice API のダイス結果互換の値を返すアクセスポイント(例:original_table_sample_result.json)を与えることでもオリジナル表を作成できます。
返り値には最低限 ok
text
secret
の情報が含まれている必要があります。
アップロードするオリジナル表のファイルは1行目にアクセスポイントの URL のみ記載してください(例:original_table_sample_file)。
アクセスポイントにアクセスする際、次の URL に対して GET メソッドでアクセスを実施します。
${与えた URL}?repeat=${回数}¶ms=${引数}
例えば https://original_table.example.com/access_point
がアクセスポイントで、
テキストチャットから次のような入力を実施して該当のオリジナル表を振るとします。
x3 URLのオリジナル表 ぱんだ うさぎ こあら
この場合、次のようにアクセスを実施します。
https://original_table.example.com/access_point?repeat=3¶ms=ぱんだ%20うさぎ%20こあら
BCDICE_SLASH_PREFIX
が有効な場合、Discord のスラッシュコマンド機能を用いてダイスを振ったり設定を実施したりできるようになります。
ダイスボット起動後、テキストチャットにスラッシュ(/
)を入力すると何ができるのかが表示されます。そちらをご参照ください。
ダイスボットを起動してから1時間前後待たないとスラッシュコマンドは有効になりません。
ただし、一度 Bot のアプリを起動して導入している各サーバでスラッシュコマンドが有効になれば、次の起動からは起動直後からスラッシュコマンドが利用できます。
admin コマンドと discord コマンドは管理者しか実行できません。 従来パスワードを知っていれば誰でも実行できましたが、スラッシュコマンドにおいては Bot の管理者のみ実行できるように変更されました。
上述の通り、管理コマンドのexport
、import
、suppressroll
はスラッシュコマンドからは利用できません。
BCDICE_SLASH_PREFIX
やBCDICE_SLASH_SHORT_PREFIX
の値を変えたい場合は再起動が必要です。
しかし、再起動後もスラッシュコマンドの Discord 上でのサジェストは残ってしまいます。
そのため、それらの値を変えたり、Bot を長期に渡って止める場合は止める前にdiscord removeslashcommands
のスラッシュコマンドを用いてスラッシュコマンドを削除してください。
PaaS サービス heroku を使って discord-bcdicebot を動かすことも可能です。
月額数ドルを払うことで利用できます。詳細はHeroku Pricing のページをご参照ください。
ただし、Git と Heroku を使える必要があり、Heroku については英語で書かれたウェブサイト上での操作が必要となります。
git@github.com:Shunshun94/discord-bcdicebot.git
heroku login
を実行し、ログインしますheroku create
を実行し、heroku 上に App を作成しますgit push heroku master
を実行し、heroku 上にソースコードを push しますheroku config:set DISCORD_BOT_TOKEN=NDA0MgAIC0QK18lU0dxMt99F.HuWAIt.Nh9OTLbjxdMp3pcmw3Lsqd4aQlb
(トークンはダミーです)heroku config:set BCDICE_API_URL=http://xxxx.xxxxx.xxxxx.example.com/
(URL はダミーです)heroku config:set BCDICE_PASSWORD=MY_PASSWORD
(MY_PASSWORD を任意の文字列に書き換えてください)heroku config:set LANG=ja_JP.UTF-8
heroku config:set BCDICE_API_SECONDARY=http://xxxx.xxxxx.xxxxx.example.com/
(URL はダミーです)heroku config:set BCDICE_DEFAULT_SYSTEM=DiceBot
(DiceBot は任意のシステムに書き換えてください)heroku config:set BCDICE_MENTION_MODE=1
heroku config:set BCDICE_RESULT_DISPLAY_FORMAT=V1
heroku config:set BCDICE_SLASH_PREFIX=bcdice
heroku config:set BCDICE_SLASH_SHORT_PREFIX=br
heroku config:set BCDICE_STANDARD_INPUT_DISABLED=1
heroku config:set BCDICE_SLASH_TABLE_SUGGESTION_DISABLED=1
Twitter アカウントは@Shunshun94。ないしはリポジトリに issue を追加してください。
このアプリ (ソースコードなどを含む) は GPLv3 でライセンスします。
ソースコードはhttps://github.com/Shunshun94/discord-bcdicebotから入手可能です。
@Shunshun94 ないしは github の issues に。
どんな出力が出たのか、出力をコピペして頂けると調査が捗ります。
環境変数 BCDICE_MENTION_MODE
になんらかの値を入れた状態で bot を起動してください
start.bat の IGNORE_ERROR=0 の 0 を 1 と書き入れてみてください。治るかもしれません
環境変数BCDICE_PASSWORD
の値が使われます。
環境変数を指定していない場合は起動直後に Admin Password: SGO7C0XYtBJouE75
みたいな文字列がでます。この英数字ランダム16桁の文字列がパスワードです。起動するたびに変わるので注意してください
初回起動時は使えるようになるまで1時間程度かかります。お待ちください
以下について変更が入っています。
こちらからダウンロードいただけます。ただし今後更新はされません
一般ユーザの PC に Ruby や○○の実行環境が導入されているとは思えなかった
Mac ユーザやら Linux ユーザやらごとにバイナリを作るのが面倒だった。 Linux はともかく Mac ユーザはいる気がしたから
BCDice を作成・公開してくださったFacelessさんと、 Ruby 移植をしてくださったたいたい竹流さん。 さらにメンテを引き継いでくださっている酒田 シンジさん。 そもそも、BCDice が無ければこのアプリは着想すらありませんでした。 BCDice が多機能である点、2017年現在、国内オンラインセッションツールのデファクトスタンダードであるどどんとふが採用しているダイスボットであるため、 国内におけるダイスボットのデファクトスタンダードが BCDice となっていたことが実装の必要を感じたそもそもの理由でした。
BCDice-API を実装・公開してくださった酒田 シンジさん。 BCDice-API が無ければ本アプリの実装は気が遠くなるものだったに違いありません。
発表前の動作確認に付き合ってくださったかし*さんと離凛さん。 色々な想定漏れについて指摘していただき、公開前にアプリが大幅に改善されました。
PR や問題の指摘等をくださった酒田 シンジさん、シーラさん、 cardinalさん、おちゃさん、 yoshi さん、水篠 日和さん。(順番は時期順) 頂いた PR やご指摘等に基づいて色々と修正や追加機能、利用しやすくするための措置をとれました。
DiscordでDiceBot(BCDice)を使う方法その1・その2を書いてくださった えいむさん。画像つきのかなりわかりやすいガイドを書いて頂き、導入して頂きやすくなりました。
OGP 画像にフリー写真素材ぱくたそ のゾロ目が揃ったサイコロの写真素材(Photo by すしぱく)を用いています。
Nanasu さんが作ってくださったBCDiscord for Browser のコマンドは本アプリの物を参考にしてくださいました。 ブラウザのみで動くため、大変に便利です。
BCDICE_RESULT_DISPLAY_FORMAT
の値が V1
の場合、ダイスを振った際にシステム名を付けて結果を表示するように変更2 NotDiceRoll
のようなフォーマットの発言を行った際に警告メッセージが暴発する問題に対処しましたBCDICE_MENTION_MODE
に何らかの値が入っている場合、ダイスを振った際に振った人にメンションを付けて結果を表示するように変更ダイスを振るコマンド以外を入力すると [ERROR][500] ~ って出る。設定は合っているはずなのにを参照してください
BCDice-API サーバを自分で構築するのは一定の専門知識が必要です。 独自のダイスボットを追加するのでなければ、https://api-status.bcdice.org/ に記載されている公開サーバを利用する方が良いでしょう。 各公開サーバには利用ルールがあるため、利用前に事前にご確認ください。
また、中級者向けに Heroku を用いての自分用 BCDice-API サーバの設置手順も共有されています。
https://github.com/ysakasin/bcdice-api/blob/master/docs/heroku.md