trunk*1のnadokaさん、"!"ではじまるチャネルがうまく扱えない模様。 どうやら、
模様。
以下の文章において、仮に、
として説明を行う。
これは、次のような手順で再現可能。
この状態で、nadokaさんからクライアントが受け取るメッセージは "!などか" 宛ではなく "!GORUAなどか" になり、joinしていないチャネルに対してメッセージが送られることになってしまう。
また、この状態では "!などか" にjoinしていることになっているので、 PRIVMSG や MODE 等のメッセージは、クライアントから "!などか" 宛に送信することになるが、 nadokaさんからサーバに送信するメッセージが "!などか" のままなので、 存在しないチャネルに対してメッセージが送信されてしまう。
どうやら、
となる模様。 どうやら、nadokaさんは、canonical_channel_name で変換したチャネル名しか覚えていないようだ。
Nadoka::NDK_State#on_join 内で行っている ChannelState.new() に、 canonical_channel_name 後のチャネル名を与えているために起こっている模様。
この引数を canonical_channel_name 前のチャネル名にしてみたところ、 クライアントが受け取るメッセージに含まれるチャネル名はすべて "!GORUAなどか" となった。
channelid問題と同様、以下の文章において、仮に、
として説明を行う。
Channel_info = { "!などか" => {:timing=>:startup} }
のように、!つきのチャネルに自動joinするよう設定を書いておく。 このとき、すでに "!GORUAなどか" が存在すれば問題ないが、 存在しない場合、joinできずに 403 (ERR_NOSUCHCHANNEL) が返ってくる。
原因は簡単なことで、RFC2811 の 3.2 Safe Channels にあるように、 "!GORUAなどか" を作成するためには "JOIN !!などか" を送信する必要があるため。
とりあえず 403 が返ってきた場合、 "!などか" が Channel_info に含まれているチャネル名であれば "JOIN !!などか" をサーバに送信するように変更してみた。 とりあえずはこれで自動joinできる。
ただし、この対策には副作用があり、"!GORUAなどか" にjoin後、 "!などか" 宛にメッセージを送信したら 403 が返ってくるため、 再度 "JOIN !!などか" が送信されてしまい、最終的に 407 (ERR_TOOMANYTARGETS) が返ってくる。
とりあえず晒す。
403関連の変更をやめれば、"!"prefixのチャネルを自動作成することはできなくなるが、 そのかわり、上記407の副作用は発生しない。
*1 revision 83
*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナ の LIRSからも取得可能です。