From 9f6b0623647fbcd784bd1e1f62d2cc8e416fefa1 Mon Sep 17 00:00:00 2001 From: koi-chan Date: Tue, 11 Aug 2015 19:40:01 +0900 Subject: [PATCH] =?UTF-8?q?Trpg::Kancolle:=20=E6=B1=BA=E5=AE=9A=E8=A1=A8?= =?UTF-8?q?=E6=8C=AF=E3=82=8A=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=81=AE?= =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E7=89=88=E5=AE=9F=E8=A3=85=E9=96=8B?= =?UTF-8?q?=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/rgrb/plugin/trpg/kancolle/generator.rb | 13 +++++- lib/rgrb/plugin/trpg/kancolle/irc_adapter.rb | 43 ++++++++++++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/lib/rgrb/plugin/trpg/kancolle/generator.rb b/lib/rgrb/plugin/trpg/kancolle/generator.rb index b7543fd1..c22cb3f5 100644 --- a/lib/rgrb/plugin/trpg/kancolle/generator.rb +++ b/lib/rgrb/plugin/trpg/kancolle/generator.rb @@ -23,6 +23,7 @@ def initialize @random = Random.new @dice_roll_generator = DiceRoll::Generator.new @table = {} + @table_ja = {} @kanmusu = {} @logger = Lumberjack::Logger.new( @@ -33,8 +34,8 @@ def initialize def configure(*) super - load_tables("#{@data_path}/tables/*.yaml") # load_kanmusu("#{@data_path}/kanmusu/*.yaml") + load_tables("#{@data_path}/tables/*.yaml") self end @@ -63,9 +64,18 @@ def table_random(table) # @param [String] table_name 表名 # @return [String] def table_name_ja(table_name) + check_existence_of(table_name) @table[table_name].name_ja end + # 日本語の表名からアルファベットの表名を調べる + # @param [String] table_name 表名 + # @return [String] 表が存在した時 + # @return [nil] 表が存在しなかった時 + def table_name_en(table_name) + @table_ja[table_name] + end + # 表から値を取得して返す # @param [String] table_name 表名 # @param [Boolean] root 最初に参照する表の場合 true にする @@ -134,6 +144,7 @@ def load_tables(glob_pattern) yaml = File.read(path, encoding: 'UTF-8') table = Table.parse_yaml(yaml) @table[table.name] = table + @table_ja[table.name_ja] = table.name rescue => e @logger.error("データファイル #{path} の読み込みに失敗しました") @logger.error(e) diff --git a/lib/rgrb/plugin/trpg/kancolle/irc_adapter.rb b/lib/rgrb/plugin/trpg/kancolle/irc_adapter.rb index 5bf78a94..7db6c48c 100644 --- a/lib/rgrb/plugin/trpg/kancolle/irc_adapter.rb +++ b/lib/rgrb/plugin/trpg/kancolle/irc_adapter.rb @@ -20,6 +20,10 @@ class IrcAdapter match(/mr#{SPACES_RE}#{KANMUSU_RE}/io, method: :kanmusu_reaction) match(/t#{SPACES_RE}#{TABLES_RE}/io, method: :table_random) + match(/娘/i, method: :kanmusu_ja, :prefix => "。艦") + match(/リアクション#{SPACES_RE}(.*)/io, method: :kanmusu_reaction_ja, :prefix => "。艦") + match(/表#{SPACES_RE}(.*)/io, method: :table_random_ja, :prefix => "。艦") + def initialize(*args) super prepare_generator @@ -48,12 +52,12 @@ def kanmusu_reaction(m, kanmusu) def table_random(m, tables_str) tables_str.split(' ').each do |table| begin - body = @generator.table_random(table) - name_ja = @generator.table_name_ja(table) + body = "<#{@generator.table_name_ja(table)}>" \ + ": #{@generator.table_random(table)}" rescue TableNotFound => not_found_error - ": #{table_not_found_message(not_found_error)}" + body = ": #{table_not_found_message(not_found_error)}" end - message = "#{@header}[#{m.user.nick}]<#{name_ja}>: #{body}" + message = "#{@header}[#{m.user.nick}]#{body}" m.target.send(message, true) log_notice(m.target, message) @@ -62,6 +66,37 @@ def table_random(m, tables_str) end end + def kanmusu_ja(m) + end + + def kanmusu_reaction_ja(m, kanmusu) + end + + # 日本語で決定表名を書かれたときその表を振る + # table_random の日本語コマンド用ラッパー + # @param [Cinch::Message] m メッセージ + # @param [String] tables_str_ja 決定表名のリスト + # @return [void] + def table_random_ja(m, tables_str_ja) + tables = [] + tables_str_ja.split(SPACES_RE).each do |table| + tables << @generator.table_name_en(table.gsub(/表$/, '')) + end + + tables_str = tables.join(' ') + return if tables_str == '' + + table_random(m, tables_str) + end + + # 表が見つからなかったときのメッセージを返す + # @param [TableNotFound] error エラー + # @return [String] + def table_not_found_message(error) + "「#{error.table}」なんて表は見つからないのですわっ。" + end + private :table_not_found_message + # NOTICE 送信をログに残す # @param [Cinch::Target] target 対象 # @param [String] message メッセージ