From b32ae5c7970428ca8d0624df5583807fd3bd7466 Mon Sep 17 00:00:00 2001 From: koi-chan Date: Thu, 26 Sep 2019 15:43:28 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix-ctcp-plugin:=20IRC=20=E7=89=88=E3=81=AE?= =?UTF-8?q?=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=20Ctcp=20?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/rgrb/plugin/ctcp/irc_adapter.rb | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/rgrb/plugin/ctcp/irc_adapter.rb b/lib/rgrb/plugin/ctcp/irc_adapter.rb index 25d942f3..249aadb8 100644 --- a/lib/rgrb/plugin/ctcp/irc_adapter.rb +++ b/lib/rgrb/plugin/ctcp/irc_adapter.rb @@ -27,27 +27,41 @@ def initialize(*args) end def ctcp_clientinfo(m) - m.ctcp_reply(@valid_cmd.join(' ')) + ctcp_reply(m, @valid_cmd.join(' ')) end def ctcp_version(m) - m.ctcp_reply("RGRB #{RGRB::VERSION}") + ctcp_reply(m, "RGRB #{RGRB::VERSION_WITH_COMMIT_ID}") end def ctcp_time(m) - m.ctcp_reply(Time.now.strftime('%a %b %d %T %Y %Z')) + ctcp_reply(m, Time.now.strftime('%a, %d %b %Y %T %z')) end def ctcp_ping(m) - m.ctcp_reply(m.ctcp_args.join(' ')) + ctcp_reply(m, m.ctcp_args.join(' ')) end def ctcp_userinfo(m) - m.ctcp_reply(@userinfo) + ctcp_reply(m, @userinfo) end def ctcp_source(m) - m.ctcp_reply('https://github.com/cre-ne-jp/rgrb') + ctcp_reply(m, 'https://github.com/cre-ne-jp/rgrb') + end + + private + + # CTCP 応答を返す + # @param [Cinch::Message] m + # @param [String] message 送信メッセージ + # @return [void] + def ctcp_reply(m, message) + log_incoming(m) + return if m.target.name == bot.nick + + m.ctcp_reply(message) + log(" #{message.inspect}", :outgoing, :info) end end end From 40a26f9f2290c74698c852898bb4457cb72fcc9c Mon Sep 17 00:00:00 2001 From: ocha Date: Thu, 26 Sep 2019 22:23:18 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A9=E7=94=A8=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=81=AACTCP=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=82=92?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E5=AE=9A=E6=95=B0=E3=81=A7=E5=AE=9A?= =?UTF-8?q?=E7=BE=A9=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一箇所で定義して漏れが発生しないようにする --- lib/rgrb/plugin/ctcp/irc_adapter.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/rgrb/plugin/ctcp/irc_adapter.rb b/lib/rgrb/plugin/ctcp/irc_adapter.rb index 249aadb8..a799c1b2 100644 --- a/lib/rgrb/plugin/ctcp/irc_adapter.rb +++ b/lib/rgrb/plugin/ctcp/irc_adapter.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true # vim: fileencoding=utf-8 require 'rgrb/plugin_base/irc_adapter' @@ -11,23 +12,25 @@ class IrcAdapter include PluginBase::IrcAdapter set(plugin_name: 'Ctcp') - ctcp(:clientinfo) - ctcp(:version) - ctcp(:time) - ctcp(:ping) - ctcp(:userinfo) - ctcp(:source) + + # 利用可能な CTCP コマンド + AVAILABLE_COMMANDS = %w(CLIENTINFO VERSION TIME PING USERINFO SOURCE) + .sort + .freeze + + AVAILABLE_COMMANDS.each do |command| + ctcp(command) + end def initialize(*args) super config_data = config[:plugin] || {} @userinfo = config_data['UserInfo'] || 'RGRB 稼働中' - @valid_cmd = %w(CLIENTINFO VERSION TIME PING USERINFO SOURCE).sort end def ctcp_clientinfo(m) - ctcp_reply(m, @valid_cmd.join(' ')) + ctcp_reply(m, AVAILABLE_COMMANDS.join(' ')) end def ctcp_version(m) From 4de0ca510d73652fc86b0a2dd708efb4031e4e1c Mon Sep 17 00:00:00 2001 From: ocha Date: Thu, 26 Sep 2019 22:40:58 +0900 Subject: [PATCH 3/3] =?UTF-8?q?CTCP:=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RFCのドラフトにおける各コマンドの説明のURLを追加したかった --- lib/rgrb/plugin/ctcp/irc_adapter.rb | 31 ++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/rgrb/plugin/ctcp/irc_adapter.rb b/lib/rgrb/plugin/ctcp/irc_adapter.rb index a799c1b2..c27d5dee 100644 --- a/lib/rgrb/plugin/ctcp/irc_adapter.rb +++ b/lib/rgrb/plugin/ctcp/irc_adapter.rb @@ -22,33 +22,58 @@ class IrcAdapter ctcp(command) end - def initialize(*args) + # プラグインを初期化する + def initialize(*) super config_data = config[:plugin] || {} @userinfo = config_data['UserInfo'] || 'RGRB 稼働中' end + # 利用可能なコマンドを返す + # @param [Cinch::Message] m 受信したメッセージ + # @return [void] + # @see https://tools.ietf.org/id/draft-oakley-irc-ctcp-01.html#clientinfo def ctcp_clientinfo(m) ctcp_reply(m, AVAILABLE_COMMANDS.join(' ')) end + # バージョン情報を返す + # @param [Cinch::Message] m 受信したメッセージ + # @return [void] + # @see https://tools.ietf.org/id/draft-oakley-irc-ctcp-01.html#version def ctcp_version(m) ctcp_reply(m, "RGRB #{RGRB::VERSION_WITH_COMMIT_ID}") end + # 現在のローカル時刻を返す + # @param [Cinch::Message] m 受信したメッセージ + # @return [void] + # @see https://tools.ietf.org/id/draft-oakley-irc-ctcp-01.html#time def ctcp_time(m) ctcp_reply(m, Time.now.strftime('%a, %d %b %Y %T %z')) end + # クエリと同じパラメータを返す + # @param [Cinch::Message] m 受信したメッセージ + # @return [void] + # @see https://tools.ietf.org/id/draft-oakley-irc-ctcp-01.html#ping def ctcp_ping(m) ctcp_reply(m, m.ctcp_args.join(' ')) end + # ユーザについての情報を返す + # @param [Cinch::Message] m 受信したメッセージ + # @return [void] + # @see https://tools.ietf.org/id/draft-oakley-irc-ctcp-01.html#userinfo def ctcp_userinfo(m) ctcp_reply(m, @userinfo) end + # RGRB のソースコードが存在する場所を返す + # @param [Cinch::Message] m 受信したメッセージ + # @return [void] + # @see https://tools.ietf.org/id/draft-oakley-irc-ctcp-01.html#source def ctcp_source(m) ctcp_reply(m, 'https://github.com/cre-ne-jp/rgrb') end @@ -56,8 +81,8 @@ def ctcp_source(m) private # CTCP 応答を返す - # @param [Cinch::Message] m - # @param [String] message 送信メッセージ + # @param [Cinch::Message] m 受信したメッセージ + # @param [String] message 送信するメッセージ # @return [void] def ctcp_reply(m, message) log_incoming(m)