Skip to content

Commit

Permalink
DiceRoll: dXX 形式の日本語コマンドを追加
Browse files Browse the repository at this point in the history
通常のダイスロールに続いて、dXX 形式の出目をそのまま各位にして並べるダイスロールを追加した。
また、プラグインのドキュメントに日本語コマンドを追加し、またほかの部分のみ更新を改めた。
  • Loading branch information
koi-chan committed Apr 4, 2015
1 parent eee56b4 commit a61a14d
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 7 deletions.
16 changes: 12 additions & 4 deletions doc/plugins/dice_roll.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,41 @@ DiceRoll
コマンド
--------

### ダイスロール (`.roll fdp`, `.roll fDp`)
### ダイスロール (`.roll fdp`, `.roll fDp`, `。●の▼`)

面数 _p_ のダイスを _f_ 個振ったときの合計値を返します。

スマホなどのIRCクライアントからダイスが降りやすくなるよう、日本語ダイスコマンドが実装されています。こちらは、面数 _●_ のダイスを _▼_ 個振った時の合計値を返します。
ア段のひらがな「あかさたなはまやらわ」が、それぞれ数字「1234567890」に相当しています。

####

```
.roll 2d6
> foo -> 2d6 = [6, 2] = 8
> foo -> 2d6 = [6,2] = 8
.roll 1D6
> foo -> 1d6 = [1] = 1
。かのは
> foo -> 2d6 = [3,4] = 7
```

### dXX ロール (`.roll dXX`)
### dXX ロール (`.roll dXX`, `。の○○`)

出目をそのまま並べて数字にするダイスロールの結果を返します。_XX_ に入れた各数字をダイス面数として、桁数の分だけそのダイスを振ります。

_XX_ には 1~20 桁の数字を指定します。ただし、途中に 0 を入れると、0 を含めそれより後ろの数字を無視します。

日本語ダイスコマンドを使う場合のひらがな→数字の対応は、上記の通常のダイスロールと同じです。

####

```
.roll d66
> foo -> d66 = [3,6] = 36
.roll d567
> foo -> d567 = [3,2,7] = 327
。のはは
> foo -> d66 = [5,6] = 56
```

ToDo
Expand Down
14 changes: 14 additions & 0 deletions lib/rgrb/plugin/dice_roll/constants.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# vim: fileencoding=utf-8

module RGRB
module Plugin
module DiceRoll
NUM_RE = /[1-9]/
# アラビア数字による複数桁の数を表す正規表現
NUMS_RE = /[1-9]\d*/
KANA_NUM_RE = /[あかさたなはまやら]/
# ひらがなによる複数桁の数字を表す正規表現
KANA_NUMS_RE = /[あかさたなはまやら][あかさたなはまやらわ]*/
end
end
end
6 changes: 6 additions & 0 deletions lib/rgrb/plugin/dice_roll/generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def basic_dice(rolls, sides)
end
end

# basic_dice の日本語ダイス用ラッパー
def basic_dice_ja(rolls_ja, sides_ja)
basic_dice(ja_to_i(rolls_ja), ja_to_i(sides_ja))
end
Expand All @@ -44,6 +45,11 @@ def dxx_dice(rolls)
end
end

# dxx_dice の日本語ダイス用ラッパー
def dxx_dice_ja(rolls_ja)
dxx_dice("#{ja_to_i(rolls_ja)}")
end

# ダイスロールの結果を返す
# @param [Fixnum] rolls ダイスの個数
# @param [Fixnum] sides ダイスの最大値
Expand Down
13 changes: 10 additions & 3 deletions lib/rgrb/plugin/dice_roll/irc_adapter.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# vim: fileencoding=utf-8

require 'cinch'
require 'rgrb/plugin/dice_roll/constants'
require 'rgrb/plugin/dice_roll/generator'

module RGRB
Expand All @@ -12,11 +13,12 @@ class IrcAdapter

set(plugin_name: 'DiceRoll')
self.prefix = /\.roll[\s ]+/
match(/([1-9]\d*)d([1-9]\d*)/i, method: :basic_dice)
match(/d([1-9]+)/i, method: :dxx_dice)
match(/(#{NUMS_RE})d(#{NUMS_RE})/io, method: :basic_dice)
match(/d(#{NUM_RE}+)/io, method: :dxx_dice)

self.prefix = /。/
match(/([あかさたなはまやら][あかさたなはまやらわ]*)の([あかさたなはまやら][あかさたなはまやらわ]*)/i, method: :basic_dice_ja)
match(/(#{KANA_NUMS_RE})の(#{KANA_NUMS_RE})/io, method: :basic_dice_ja)
match(/の(#{KANA_NUM_RE}+)/io, method: :dxx_dice_ja)

def initialize(*args)
super
Expand All @@ -42,6 +44,11 @@ def dxx_dice(m, rolls)
message = @generator.dxx_dice(rolls)
m.target.send("#{m.user.nick} -> #{message}", true)
end

def dxx_dice_ja(m, rolls)
message = @generator.dxx_dice_ja(rolls)
m.target.send("#{m.user.nick} -> #{message}", true)
end
end
end
end
Expand Down

0 comments on commit a61a14d

Please sign in to comment.