ゆっちゃんのブログ

ゲームの事とか書いてます。Twitter→@f_julover

0からDiscordのダイスボットを作成する

今回はゲーム用のチャットツールとして最近ぼちぼち普及し始めているDiscordに、TRPG用のダイスボットを導入する話。

 

プログラミングはprintfしかわからないレベルの初心者ですが、これから頑張っていきます。

 

普段遊んでいるTRPGがSW2.0なので、今回の目標は以下のふたつ。

・xDy+zなどのダイスコードの読み取り

・威力表のロール

 

わりと眠い中書いてるのでかなり端折って書きます。

 

まずは開発環境の構築から。紆余曲折あってRuby2.4.1やらvimやらをインストールしていきます。

 

練習として、Rubyチュートリアル「20分ではじめるRuby」をやりました。詳しい人に補足説明してもらいつつ最後まで通し。

20分ではじめるRuby

 

次にDiscord上にダイスボットを作成します。ググりながらやって、DiscordのMy Appsに「dice_bot」を作成しました。

参考ページ→

Discord Bot の簡単な作り方asamacs.wordpress.com

f:id:f_julover:20170325052846p:plain

で、次にこいつの中身を書いていきます。言語はRuby

 

ダイスコードの読み取りは詳しい人に教えてもらいながら正規表現で書いていきます。次に、正規表現で読み取った奴らをrand()に持って行って、to_iで数字にしてsumします。

f:id:f_julover:20170325053021p:plain

終わり!

 

時間を見ていただければ僕の眠さ加減がわかると思います(書いてるときは朝の5:30)

 

これで目標のひとつめは達成。めっちゃスムーズじゃない?(4時間経過)

 

ふたつめについてですが、力尽きたので次に持ち越しです。なんだかとっても眠いんだ。

 

たぶん

 

"#{event.content}".match(/\Ak([0-9]@([0-9]+)(?:\+([0-9]*))?\z/)

 

こんな感じで書けば「k10@10+5」みたいな威力表ロールを読んでくれるんじゃないかなーと思ったら、全然読んでくれませんでした。

 

あと、event.contentはString型だと思ってたので#{}で囲う必要は無いと思ってたんですけど、これString型じゃないんですね。@saved_massageの中身じゃなくて@massageの中身だからMassage型(?)になるんですかね?

 

威力表ロールの正規表現の書き方についてはまた勉強が必要かなーと思います。Ruby以前の問題だね。

 

正規表現の書き方をきちんとした後は、威力表に照らし合わせる部分を作らなきゃいけないんですよね。さぁ大変だ。

 

おやすみなさい。

 

2017/3/25

参考にしたページを記事の中に追記しました