--- tiarra-20040215/NEWS	2004-02-15 09:21:35.000000000 +0900
+++ tiarra-20040223/NEWS	2004-02-23 11:47:36.000000000 +0900
@@ -1,3 +1,44 @@
+2004-02-23  Topia  <topia@clovery.jp>
+
+	* sample.conf
+	  - 順序が変わっています。注意してください。
+	  - general/omit-sysmsg-prefix-when-possible 削除。
+	  - general/sysmsg-prefix-use-masks ブロック追加。
+
+	* Log::Recent
+	  - no-client-logs クライアントオプションが追加されました。
+	    クライアントオプションの使い方は、
+	    realname 部分に $no-client-logs=1$ を指定します。
+	    複数ある場合は $no-client-logs=1;a=1;...$ のように指定できます。
+
+	* 全般
+	  - クライアントとの接続時にチャンネルの送出順を指定する patch を
+	    暫定的に取り込みました。 network に fixed-channels ブロックを
+	    作り、中に channel をキー名としてマスクを列挙します。
+	    例:
+	      fixed-channels {
+	        channel: #てすとちゃんねる@ircnet
+	        channel: #てすと@localserver
+	        channel: *@localserver
+	        channel: *@localserver:*.jp
+	      }
+	    マッチしなかったチャンネルについては最後にまとめて
+	    (順番がごちゃごちゃになって)送られてきます。
+	    conf の設定場所は暫定です。変わる可能性があるので注意してください。
+	  - doc/ 以下に HTML でのドキュメントが生成されていますが、
+	    まだ未調整な部分も多くあるので、正確な記述は sample.conf を参照してください。
+
+2004-02-21  phonohawk  <phonohawk@ps.sakura.ne.jp>
+
+	* Channel::Freeze
+	freezeコマンドの引数は、これまでは完全なチャンネル名であったが、
+	これはマスクに変更。その時にJOINしている全てのチャンネルの中から
+	マスクに一致した全てのチャンネルを凍結する。
+
+	* 設定 general/omit-sysmsg-prefix-when-possible 追加。
+	これが1である時、sysmsg-prefixはチャンネルに対してのメッセージ
+	でなければ省略する。デフォルトは1。
+
 2004-02-15  Topia  <topia@clovery.jp>
 
 	* Client::Cache
--- tiarra-20040215/sample.conf	2004-02-15 09:21:35.000000000 +0900
+++ tiarra-20040223/sample.conf	2004-02-23 11:47:36.000000000 +0900
@@ -1,6 +1,6 @@
 # -*- tiarra-conf -*-
 # -----------------------------------------------------------------------------
-# $Id: sample.conf,v 1.62 2004/02/14 11:48:18 topia Exp $
+# $Id: sample.conf,v 1.64 2004/02/23 02:46:17 topia Exp $
 # -----------------------------------------------------------------------------
 # tiarra.conf サンプル
 #
@@ -15,10 +15,13 @@
 #
 # 特に指定が無い場合、同じ設定を二度以上繰り返した時は最初に定義された設定が有効になります。
 #
+# ブロックごと省略した場合は、そのブロックの全ての値が省略されたものとみなします。
+# ただし省略不可能な設定もありますので御注意下さい。
+#
 # 「@include foo.conf」という行があると、foo.confがその場所に
 #  挿入されたかのように処理します。
 #
-# {}記号の位置には、ある程度の自由度があります。
+# {}記号の位置には、それなりの自由度があります。
 # 次の例は全て有効です。
 # block {
 #   foo: bar
@@ -48,8 +51,7 @@
 #
 # tiarra.conf自身の文字コードやユーザー情報などを指定するブロックです。
 # -----------------------------------------------------------------------------
-general
-{
+general {
   # tiarra.conf自身の文字コード
   # コード名はjis,sjis,euc,utf8,utf16,utf32等。(この値はUnicode::Japaneseにそのまま渡されます)
   # autoが指定された、または省略された場合は自動判別します。
@@ -72,12 +74,12 @@
   # Tiarraが開くポート。ここに指定したポートへクライアントに接続させる。
   # 省略されたらポートを開かない。
   tiarra-port: 6667
-
+  
   # Tiarraがポートtiarra-portを開く際、IPv6とIPv4のどちらでリスニングを行なうか。
   # 'v4'または'v6'で指定します。デフォルトは'v4'です。
   # IPv6を使うためにはSocket6.pmが利用可能である必要があります。
   #tiarra-ip-version: v4
-
+  
   # Tiarraがポートtiarra-portを開く際のローカルアドレス。
   # 意味が分からなければ省略して下さい。
   # デフォルトは、IPv4のはINADDR_ANY、IPv6のはin6addr_anyになります。
@@ -87,7 +89,7 @@
   # Tiarraにクライアントが接続する際に要求するパスワードをcryptした文字列。
   # 空の文字列が指定されたり省略された場合はパスワードを要求しない。
   tiarra-password: xl7cflIcH9AwE
-
+  
   # 外部プログラムからtiarraをコントロールする為のUNIXドメインソケットの名前。
   # 例えば"foo"を指定した場合、ソケット/tmp/tiarra-control/fooが作られる。
   # 省略された場合はこの機能を無効とする。
@@ -112,7 +114,7 @@
   # Tiarraはエラーメッセージを標準出力に出力するが、その時に接続しているクライアントがあればクライアントにもNOTICEで送る事が出来る。
   # この値を1にすると、その機能が有効になる。省略するか0を指定するとこの機能は無効になる。
   notice-error-messages: 1
-
+  
   # Tiarraでチャンネルとユーザーのマスクを指定するときの形式。
   # plum形式とTiarra形式が選択できます。
   #-----------------
@@ -131,20 +133,36 @@
   #  mask: *                                     -*!*@*
   #-----------------
   # となります。 この二つはまったく同じマスクを表しています。
-
+  
   # この値をplumにすると、plum形式、省略するかtiarraを指定すると、Tiarra形式になります。
   chanmask-mode: tiarra
-
+  
   # サーバーに接続する際、ローカル側のどのアドレスにバインドするか。
   # 意味が分からなければ省略して下さい。
   # デフォルトは、IPv4のはINADDR_ANY、IPv6のはin6addr_anyになります。
   #ipv4-bind-addr: 0.0.0.0
   #ipv6-bind-addr: ::0
-
+  
   # tiarra が、 001 や 002 や、 recent log を送信するときなどに使う prefix
   # を指定します。 hostname や fqdn っぽいものを指定すると良いかもしれません。
   # デフォルトは tiarra です。普通変える必要はありません。
   #sysmsg-prefix: tiarra
+  
+  sysmsg-prefix-use-masks {
+    # sysmsg-prefix を使用する場所を指定する。
+  
+    # システムメッセージ(NumericReply など)。デフォルトは * です。
+    # ふつうこれを変更する必要はありません。
+    system: *
+  
+    # 個人宛メッセージ(Notice,Privmsg の中で)。デフォルトはなし。
+    #priv: 
+  
+    # チャンネル宛メッセージ(Notice,Privmsg の中で)。デフォルトは * です。
+    # Ziciz などのクライアントを接続する場合は、
+    # -*::log を指定しておくといいかもしれません。
+    channel: *
+  }
 }
 
 # -----------------------------------------------------------------------------
@@ -154,8 +172,7 @@
 # 一つも定義しなかった場合やこのブロックを省略した場合は、
 # "main"というネットワークが一つだけ指定されたものと見做します。
 # -----------------------------------------------------------------------------
-networks
-{
+networks {
   # 複数のサーバーへの接続を可能にするかどうか。1(オン)と0(オフ)で指定。
   # これを1にすると、次のnameを複数個定義する事が可能になり、
   # 複数のサーバーに同時に接続出来るようになります。
@@ -167,7 +184,7 @@
   # その直後にjoinし直したように見えます。
   # デフォルトでは1です。
   multi-server-mode: 1
-
+  
   # 接続するIRCネットワークに名前を付けます。この名前は後で使用します。
   # 複数のネットワークに接続したい場合は多重定義して下さい。
   name: ircnet
@@ -195,7 +212,7 @@
   #    再接続に成功すると再びNOTICEで報告する。JOINやPARTはしない。
   # デフォルトはpart-and-joinです。
   action-when-disconnected: message-for-each
-
+  
   # NICKを変更する度に、変更したサーバーでの新しいNICKをNOTICEで常に通知するかどうか。
   # 1なら必ず通知し、0なら変更後のnickがローカルnick(クライアントが見る事の出来るnick)と違っている場合のみ通知する。
   # デフォルトは0です。
@@ -208,28 +225,27 @@
 # networksブロックで定義した全てのネットワークについて、
 # そのアドレス、ポート、(必要なら)パスワードを定義します。
 # -----------------------------------------------------------------------------
-ircnet
-{
+ircnet {
   # サーバーのホストとポート。省略不可。
-  host: irc.kyoto.wide.ad.jp
+  host: irc.nara.wide.ad.jp
   port: 6663
   
   # general/userで設定したユーザ名を使わずに、各ネットワークで独自のユーザ名を使用する事も可能。
   # 省略されたら当然、general/userで設定したものが使われる。
   #user: hoge
-
+  
   # general/nameで設定した本名(建前上)を使わずに、各ネットワークで独自の本名を使用可能。
   #name: hoge
   
   # このサーバーの要求するパスワード。省略可能。
   #password: hoge
-
+  
   # general/setver-in/out-encodingで設定したエンコーディングを使わずに、
   # 各ネットワークで独自のエンコーディングを使用する事も可能。
   # 省略されたら当然、generalで設定したものが使われる。
   #in-encoding: jis
   #out-encoding: jis
-
+  
   # general/(ipv4|ipv6)bind-addrで設定したローカルアドレスを使わずに、
   # 各ネットワークで独自のbind_addrを使用する事も可能。
   # 省略されたらgeneralで設定したものが使われる。
@@ -237,8 +253,7 @@
   #ipv6-bind-addr: ::0
 }
 
-2ch
-{
+2ch {
   host: irc.2ch.net
   port: 6667
 }
@@ -278,9 +293,10 @@
 # tiarra*  これはtiarraで始まる文字列を表す。
 # +*!*tiarra@*.jp,-re:\d  これは*!*tiarra@*.jpにマッチして、かつ文字列中に数字を含まないものを表す。
 
-- Auto::Alias
-{
+
+- Auto::Alias {
   # ユーザエイリアス情報の管理を行ないます。
+
   # エイリアスは基本的にname,userの二つのフィールドから成っており、
   # それぞれユーザー名、ユーザーマスクを表します。
   
@@ -318,18 +334,18 @@
   # それぞれ相手のnick、チャンネル名に置換されます。
   # #(key)、#(value)は、追加されたキーと値に置換されます。
   added-format: #(name|nick.now): エイリアス #(key) に #(value) を追加しました。
-
+  
   # メッセージが削除されたときの反応を指定します。
   # added-formatで指定できるものと同じです。
   removed-format: #(name|nick.now): エイリアス #(key) から #(value) を削除しました。
-
+  
   # エイリアスの追加や削除が許されている人。省略された場合は「*!*@*」と見做される。
   modifier: *!*@*
 }
 
-- Auto::Answer
-{
-  # 特定の発言に反応して対応する発言をするモジュールです。
+- Auto::Answer {
+  # 特定の発言に反応して対応する発言をする。
+
   # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
   
   # 反応する発言と、それに対する返事を定義します。
@@ -338,15 +354,27 @@
   #
   # 書式: <反応する発言のマスク> <それに対する返事>
   # 例:
-  # reply: こんにちは* こんにちは、#(name|nick.now)さん。
+  #reply: こんにちは* こんにちは、#(name|nick.now)さん。
   # この例では誰かが「こんにちは」で始まる発言をすると、
   # 発言した人のエイリアスを参照して「こんにちは、○○さん。」のように発言します。
 }
 
+- Auto::ChannelWithoutOper {
+  # チャンネルオペレータ権限がなくなってしまったときに発言する。
+
+  # +で始まらない特定のチャンネルで、+aモードでも+rモードでもないのに
+  # 誰もチャンネルオペレータ権限を持っていない状態になっている時、
+  # そこに誰かがJOINする度に特定のメッセージを発言するモジュールです。
+  
+  # 書式: <チャンネル名> <メッセージ>
+  #channel: #IRC談話室@ircnet なると消失しました。
+}
+
 - Auto::Joined {
-  # 特定のチャンネルに誰かがJOINする度に特定のメッセージを発言するモジュールです。
-  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
+  # 特定のチャンネルに誰かがJOINする度に特定のメッセージを発言する。
 
+  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
+  
   # 発言を行なうチャンネルと、その内容を定義します。
   # #(nick.now)と$(channel)は、それぞれ相手の現在のnickとチャンネル名に置換されます。
   #
@@ -354,90 +382,80 @@
   #channel: #チャンネル@ircnet   「#ちゃんねる」に移転しました。
 }
 
-- Auto::ChannelWithoutOper
-{
-  # +で始まらない特定のチャンネルで、+aモードでも+rモードでもないのに
-  # 誰もチャンネルオペレータ権限を持っていない状態になっている時、
-  # そこに誰かがJOINする度に特定のメッセージを発言するモジュールです。
-  
-  # 書式: <チャンネル名> <メッセージ>
-  #channel: #IRC談話室@ircnet なると消失しました。
-}
+- Auto::MesMail {
+  # 伝言をメールとして送信する。
 
-- Auto::MesMail
-{
-  # 伝言をメールとして送信するモジュールです。
   # メールアドレスはエイリアスの mail を参照します。
-
+  
   # Fromアドレス。[default: OSのユーザ名]
   from: example1@example.jp
-
+  
   # 送信用のキーワード [default: mesmail_send]
   send: 速達伝言
-
+  
   # 使用を許可する人&チャンネルのマスク。
   # 例はTiarraモード時。 [default: なし]
   mask: * +*!*@*
   # [plum-mode] mask: +*!*@*
-
+  
   # maskで拒否されたときのメッセージ [default: なし]
   deny: 伝言したくない。
-
+  
   # 一度に送れる宛先の量 [default: 無制限]
   max-send-address: 5
-
+  
   # 宛先を探すエイリアスエントリ [default: なし]
   alias-key: name
   alias-key: nick
-
+  
   # 宛先の人を判別出来なかったときのメッセージ [default: なし]
   unknown: #(who)さんと言うのは誰ですか?
-
+  
   # メールの日付形式
   date: %H:%M:%S
-
+  
   # エイリアスは見付かったけれどメールアドレスが登録されていなかったときのメッセージ。 [default: なし]
   #none-address: #(who)さんはアドレスを登録していません。
-
+  
   # SMTPのホスト [default: localhost]
   #smtphost: localhost
-
+  
   # SMTPのポート [default: smtp(25)]
   #smtpport: 25
-
+  
   # SMTPで自ホストのFQDN [default: localhost]
   #smtpfqdn: localhost
-
+  
   # 送信するメールの既定件名(エイリアス使用不可) [default: Message from IRC]
   #subject: Message from IRC
-
+  
   # 送信するメールの本文 [default: #(date) << #(from.name|from.nick|from.nick.now) >> #(message)]
   #format: #(date)に#(from.name|from.nick|from.nick.now)さんから#(message)という伝言です。
-
+  
   # 送信したときのメッセージ。 [default: なし]
   accept: #(who)さんに#(message)と伝言しておきました。
-
+  
   # ---- POP before SMTP の指定 ----
   # POP before SMTPを使う。 [default: no]
   #use-pop3: yes
-
+  
   # POP before SMTPのタイムアウト時間(分)。分からない場合は指定しなくて良い。 [default: 0]
   #pop3-expire: 4
-
+  
   # POPのホスト。 [default: localhost]
   #pop3host: localhost
-
+  
   # POPのポート。 [default: pop(110)]
   #pop3port: 110
-
+  
   # POPのユーザ [default: OSのユーザ名]
   #pop3user: example1
-
+  
   # POPのパスワード [default: 空パスワード('')]
   #pop3pass: test-password
-
+  
   # ---- エラーメッセージの設定 ----
-
+  
   # 一般エラー。
   # error-[state] と言う形式で詳細エラーメッセージを指定できる。
   # [state]は、
@@ -449,12 +467,12 @@
   # がある。特に欲しくなければerror-[state]は指定しなくても構わない。
   # メッセージを出したくないなら中身の無いエントリを指定すれば良い。
   # error-[state]が指定されてない場合は代わりに error を使う。 [default: 未定義]
-
-  #error-rcptto:
+  
+  #error-rcptto: 
   #error-norcptto: #(who)さんには送れませんでした。送信できるメールアドレスがありません。
   #error-data: メールが送信できません。DATAコマンドに失敗しました。#(line;サーバ応答:%s|;)
   #error: メール送信エラーです。#(line;サーバ応答:%s|;)#(state; on %s|;)
-
+  
   # 致命的なエラー。メールに個別なエラーではないので送信者(のprefix)毎に1メッセージ送られる。
   # fatalerror-[state]
   # [state]:
@@ -463,14 +481,14 @@
   # がある。特に欲しくなければfatalerror-[state]は指定しなくても構わない。
   # メッセージを出したくないなら中身の無いエントリを指定すれば良い。
   # fatalerror-[state]が指定されてない場合は代わりに fatalerror を使う。 [default: 未定義]
-
+  
   #fatalerror-first: SMTPサーバに接続できません。
   #fatalerror: SMTPセッションで致命的なエラーがありました。#(line; サーバ応答:%s|;)#(state; on %s|;)
 }
 
-- Auto::Oper
-{
-  # 特定の文字列を発言した人を+oするモジュールです。
+- Auto::Oper {
+  # 特定の文字列を発言した人を+oする。
+
   # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
   
   # +oを要求する文字列(マスク)を指定します。
@@ -527,136 +545,136 @@
   out: チャンネルに入っていない
 }
 
-- Auto::Random
-{
+- Auto::Random {
   # 特定の発言に反応してランダムな発言をします。
-  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
 
+  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
+  
   # 使用するブロックの定義。
   blocks: wimikuji
-
+  
   wimikuji {
     # ランダムに発言するメッセージの書かれたファイルと、その文字コードを指定します。
     # ファイルの中では一行に一つのメッセージを書いて下さい。
     file: random.txt
     file-encoding: euc
-
+  
     # 反応する発言を表すマスクを指定します。
     request: ゐみくじ
-
+  
     # メッセージの登録数を返答するキーワードを指定します。
     count-query: ゐみくじ登録数
-
+  
     # メッセージの登録数を返答するときの反応を指定します。
     # formatで指定できるものと同じです。#(count)は登録数になります。
     count-format: ゐみくじは#(count)件登録されています。
-
+  
     # ランダムなメッセージを発言する際のフォーマットを指定します。
     # エイリアス置換が有効です。#(message)、#(nick.now)、#(channel)は
     # それぞれメッセージ内容、相手のnick、チャンネル名に置換されます。
     # 何も登録されていないときのために、#(message|;無登録)のように指定すると良いでしょう。
     format: #(name|nick.now)の運命は#(message)
-
+  
     # 反応する人のマスク。
     mask: * *!*@*
     # plum: mask: *!*@*
-
+  
     # メッセージが追加されたときの反応を指定します。
     # formatで指定できるものと同じです。#(message)は追加されたメッセージになります。
     added-format: #(name|nick.now): ゐみくじ #(message) を追加しました。
-
+  
     # メッセージが削除されたときの反応を指定します。
     # formatで指定できるものと同じです。#(message)は削除されたメッセージになります。
     removed-format: #(name|nick.now): ゐみくじ #(message) を削除しました。
-
+  
     # 発言に反応する確率を指定します。百分率です。省略された場合は100と見做されます。
     rate: 100
-
+  
     # メッセージを追加するキーワードを指定します。
     # ここで指定したキーワードを発言すると、新しいメッセージを追加します。
     # 実際の追加方法は「<addで指定したキーワード> <追加するメッセージ>」です。
     add: ゐみくじ追加
-
+  
     # メッセージを削除するキーワードを指定します。
     # 実際の削除方法は「<removeで指定したキーワード> <削除するキーワード>」です。
     remove: ゐみくじ削除
-
+  
     # addとremoveを許可する人。省略された場合は誰も変更できません。
     modifier: * *!*@*
     # plum: modifier: *!*@*
   }
 }
 
-- Auto::Reply
-{
+- Auto::Reply {
   # 特定の発言に反応して発言をします。
-  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
 
+  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。
+  
   # 使用するブロックの定義。
   blocks: std
-
+  
   std {
     # データファイルと文字コードを指定します。
     # ファイルの中では一行に一つの"反応:メッセージ"を書いて下さい。
     file: reply.txt
     file-encoding: euc
-
+  
     # 反応チェックを行うキーワードを指定します。
     # 実際の指定方法は、「<requestで指定したキーワード> <チェックしたい発言>」です。
     request: 反応チェック
-
+  
     # request に反応するときのフォーマットを指定します。
     # #(key) がキーワード、 #(message) が発言に置換されます。
     reply-format: 「#(key)」という発言に「#(message)」と反応します。
-
+  
     # request に反応する最大個数を指定します。
     # あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。
     max-reply: 5
-
+  
     # メッセージの登録数を返答するキーワードを指定します。
     count-query: 反応登録数
-
+  
     # メッセージの登録数を返答するときの反応を指定します。
     # formatで指定できるものと同じです。#(count)は登録数になります。
     count-format: 反応は#(count)件登録されています。
-
+  
     # 反応する人のマスク。
     mask: * *!*@*
     # plum: mask: *!*@*
-
+  
     # 反応が追加されたときの反応を指定します。
     # formatで指定できるものと同じです。#(message)は追加されたメッセージになります。
     added-format: #(name|nick.now): #(key) に対する反応 #(message) を追加しました。
-
+  
     # メッセージが削除されたときの反応を指定します。
     # formatで指定できるものと同じです。#(message)は削除されたメッセージになります。
     removed-format: #(name|nick.now): #(key) #(message;に対する反応 %s|;) を #(count) 件削除しました。
-
+  
     # 発言に反応する確率を指定します。百分率です。省略された場合は100と見做されます。
     rate: 100
-
+  
     # メッセージを追加するキーワードを指定します。
     # ここで指定したキーワードを発言すると、新しいメッセージを追加します。
     # 実際の追加方法は「<addで指定したキーワード> <追加するメッセージ>」です。
     add: 反応追加
-
+  
     # メッセージを削除するキーワードを指定します。
     # 実際の削除方法は「<removeで指定したキーワード> <削除するキーワード>」です。
     remove: 反応削除
-
+  
     # addとremoveを許可する人。省略された場合は「*!*@*」と見做します。
     modifier: *!*@*
-
+  
     # 正規表現拡張を許可するか。省略された場合は許可します。
     use-re: 1
   }
 }
 
-- Auto::Response
-{
-  # データファイルの指定にしたがって反応するモジュールです。
-  # 大量の反応データを定義するのに向いています。
+- Auto::Response {
+  # データファイルの指定にしたがって反応する。
 
+  # 大量の反応データを定義するのに向いています。
+  
   # データファイルのフォーマット
   # | pattern: re:^(こん(に)?ちは)
   # | rate: 90
@@ -671,31 +689,77 @@
   # patternは一行しか書けません。(手抜き
   # maskもrateも省略できます。省略した場合はmaskは全員、rateは100となります。
   # responseは複数書いておけばランダムに選択されます。
-
+  
   # データファイル
   file: response.txt
-
+  
   # 文字コード
   charset: euc
-
+  
   # 使用を許可する人&チャンネルのマスク。
   mask: * *!*@*
   # plum: mask: +*!*@*
 }
 
+- CTCP::ClientInfo {
+  # CTCP CLIENTINFOに応答する。
+
+  # CTCP::Versionのintervalと同じ。
+  interval: 3
+}
+
+- CTCP::Ping {
+  # CTCP PINGに応答する。
+
+  # CTCP::Versionのintervalと同じ。
+  interval: 3
+}
+
+- CTCP::Time {
+  # CTCP TIMEに応答する。
+
+  # CTCP::Versionのintervalと同じ。
+  interval: 3
+}
+
+- CTCP::UserInfo {
+  # CTCP USERINFOに応答する。
+
+  # CTCP::Versionのintervalと同じ。
+  interval: 3
+  
+  # USERINFOとして返すメッセージ。
+  message: テスト
+}
+
++ CTCP::Version {
+  # CTCP VERSIONに応答する。
+
+  # 連続したCTCPリクエストに対する応答の間隔。単位は秒。
+  # 例えば3秒に設定した場合、一度応答してから3秒間は
+  # CTCPに一切応答しなくなる。デフォルトは3。
+  #
+  # なお、CTCP受信時刻の記録は、全てのCTCPモジュールで共有される。
+  # 例えばCTCP VERSIONを送った直後にCTCP CLIENTINFOを送ったとしても、
+  # CTCP::ClientInfoのintervalで設定された時間を過ぎていなければ
+  # 後者は応答しない。
+  interval: 3
+}
+
 - Channel::Freeze {
   # 特定のチャンネルの発言を、一時的に受信するのをやめる。
+
   # ログを取っているなら、ログには記録される。
   
   # チャンネルの凍結に用いるコマンド名。
   # 省略時は freeze であり、/freeze #channel@network のように使う。
   # チャンネル名を省略すると、現在フリーズされているチャンネルのリストを表示する。
   freeze-command: freeze
-
+  
   # 凍結解除に用いるコマンド名。
   # 省略時は defrost であり、/defrost #channel@network のように使う。
   defrost-command: defrost
-
+  
   # 凍結しているチャンネルが存在する時、一定時間毎にその旨を報告する事も可能。
   # この機能は凍結した事を忘れないようにする為にある。
   # 単位は分、デフォルトはゼロ(報告しない)。
@@ -717,29 +781,28 @@
   #channel: #ddddd@ircnet
 }
 
-- Channel::Join::Kicked {
-  # 特定のチャンネルからkickされた時に、自動で入りなおすモジュール。
-  
-  # 対象となるチャンネル名のマスク
-  channel: *
-}
-
-- Channel::Join::Invite
-{
+- Channel::Join::Invite {
   # 招待されたらそのチャンネルに入る。
 
   # 許可するユーザ/チャンネルのマスク。
   mask: * *!*@*
   # plum: *!*@*
-
+  
   # 招待されたチャンネルに流すメッセージのフォーマット。
   #message: こんばんわ〜。
 }
 
-- Channel::Mode::Get
-{
+- Channel::Join::Kicked {
+  # 特定のチャンネルからkickされた時に、自動で入りなおす。
+
+  # 対象となるチャンネル名のマスク
+  channel: *
+}
+
+- Channel::Mode::Get {
   # チャンネルにJOINした時、そのチャンネルのモードを取得します。
-  # 下のChannel::Mode::Set等が正しく動くためには
+
+  # Channel::Mode::Set等が正しく動くためには
   # チャンネルのモードをTiarraが把握しておく必要があります。
   # 自動的にモードを取得するクライアントであれば必要ありませんが、
   # そうでなければこのモジュールを使うべきです。
@@ -747,20 +810,9 @@
   # 設定項目は無し。
 }
 
-- Channel::Mode::Set
-{
-  # チャンネルを作成した時に自動的にモードを設定するモジュール。
-  
-  # 書式は<チャンネル名にマッチするマスク> <設定するモード>[,<設定するモード>,...]です。
-  # 例:
-  # channel: #IRC談話室@ircnet +t
-  # channel: *                +n
-  # この例では#IRC談話室@ircnetなら+t+nを、それ以外なら+nを設定します。
-}
-
-- Channel::Mode::Oper::Grant
-{
+- Channel::Mode::Oper::Grant {
   # 特定のチャンネルに特定の人間がjoinした時に、自分がチャンネルオペレータ権限を持っていれば+oする。
+
   # splitからの復帰などで+o対象の人が一度に大量に入って来ても+oは少しずつ実行します。
   # Excess Floodにはならない筈ですが、本格的な防衛BOTに使える程の物ではありません。
   
@@ -769,11 +821,23 @@
   wait: 0
   
   # チャンネルと人間のマスクを定義。Auto::Operと同様。
-  #mask: * sample!~sample@*.sample.ne.jp
+  #mask: * example!~example@*.example.ne.jp
+}
+
+- Channel::Mode::Set {
+  # チャンネルを作成した時に自動的にモードを設定するモジュール。
+
+  # 書式は<チャンネル名にマッチするマスク> <設定するモード>[,<設定するモード>,...]です。
+  # #IRC談話室@ircnetなら+t+nを、それ以外なら+nを設定する例。
+  #channel: #IRC談話室@ircnet +t
+  #channel: *                +n
+  # LimeChat 標準設定を模倣する設定例。
+  #channel: * +sn
 }
 
-- Channel::Rejoin
-{
+- Channel::Rejoin {
+  # チャンネルオペレータ権限を無くしたとき、一人ならjoinし直す。
+
   # +チャンネルや+aされているチャンネル以外でチャンネルオペレータ権限を持たずに
   # 一人きりになった時、そのチャンネルの@を復活させるために自動的にjoinし直すモジュール。
   # トピック、モード、banリスト等のあらゆるチャンネル属性をも保存します。
@@ -783,15 +847,6 @@
   save-lists: 1
 }
 
-- Client::Eval {
-  # クライアントから Perl 式を実行できるようにする。
-
-  # eval を実行するコマンド名。省略されるとコマンドを追加しません。
-  # この時コマンドはTiarraが握り潰すので、IRCプロトコル上で定義された
-  # コマンド名を設定すべきではありません。
-  command: eval
-}
-
 - Client::Cache {
   # データをキャッシュしてサーバに問い合わせないようにする
 
@@ -806,6 +861,15 @@
   use-who-cache: 1
 }
 
+- Client::Eval {
+  # クライアントから Perl 式を実行できるようにする。
+
+  # eval を実行するコマンド名。省略されるとコマンドを追加しません。
+  # この時コマンドはTiarraが握り潰すので、IRCプロトコル上で定義された
+  # コマンド名を設定すべきではありません。
+  command: eval
+}
+
 - Log::Channel {
   # チャンネルやprivのログを取るモジュール。
 
@@ -871,9 +935,10 @@
   channel: others *
 }
 
-- Log::Recent
-{
+- Log::Recent {
   # クライアントを接続した時に、保存しておいた最近のメッセージを送る。
+
+  # クライアントオプションの no-recent-logs が指定されていれば送信しません。
   
   # 各行のヘッダのフォーマット。省略されたら'%H:%M'。
   header: %H:%M:%S
@@ -888,9 +953,20 @@
   command: privmsg,notice,topic,join,part,quit,kill
 }
 
-+ System::Pong
-{
-  #   サーバーからのPINGメッセージに対し、自動的にPONGを返すモジュール。
+- System::Macro {
+  # 新規にコマンドを追加し、そのコマンドが使われた時に特定の動作をまとめて実行します。
+
+  # 書式: <コマンド> <動作>
+  # コマンド"switch"を追加して、それが使われると
+  # #a@ircnet,#b@ircnet,#c@ircnetにjoinして、
+  # #d@ircnet,#e@ircnet,#f@ircnetからpartする例。
+  #macro: switch join #a@ircnet,#b@ircnet,#c@ircnet
+  #macro: switch part #d@ircnet,#e@ircnet,#f@ircnet
+}
+
++ System::Pong {
+  # サーバーからのPINGメッセージに対し、自動的にPONGを返す。
+
   # これをoffにするとクライアントが自らPINGに応答せざるを得なくなりますが、
   # クライアントからのPONGメッセージはデフォルトのサーバーへ送られるので
   # デフォルト以外のサーバーからはPing Timeoutで落とされるなど
@@ -898,108 +974,154 @@
   #   設定項目はありません。
 }
 
-+ System::Reload
-{
-  # .confやモジュールが更新されていればそれをリロードするコマンドを追加します。
+- System::PrivTranslator {
+  # クライアントからの個人的なprivが相手に届かなくなる現象を回避する。
+
+  # このモジュールは個人宛てのprivmsgの送信者のnickにネットワーク名を付加します。
+  # 設定項目はありません。
+}
+
+- System::Raw {
+  # マスクで指定したサーバーにIRCメッセージを加工せずに直接送る。
+
+  # 例えばQUITを送る事で一時的な切断が可能。
   
+  # この機能を利用するためのコマンド名。デフォルトは「raw」。
+  # 「/raw ircnet quit」のようにして使う。
+  # 一つ目のパラメータは送り先のネットワーク名。ワイルドカード使用可能。
+  # CHOCOA の場合、 raw がクライアントで使われてしまうので、
+  # コマンド名を変えるか、 /raw raw ircnet quit のようにする必要がある。
+  command: raw
+}
+
++ System::Reload {
+  # confファイルやモジュールの更新をリロードするコマンドを追加する。
+
   # リロードを実行するコマンド名。省略されるとコマンドを追加しません。
-  # 例えば"load"を設定すると、"/load"と発言した時にリロードを実行します。
+  # 例えば"load"を設定すると、"/load"と発言しようとした時にリロードを実行します。
   # この時コマンドはTiarraが握り潰すので、IRCプロトコル上で定義された
   # コマンド名を設定すべきではありません。
   command: load
-  
-  # 何秒間隔で更新をチェックするか。省略されると自動での更新チェックは行いません。
-  interval: 60
 }
 
-- System::Macro
-{
-  # 新規にコマンドを追加し、そのコマンドが使われた時に
-  # 特定の動作をまとめて実行します。
+- System::RemoteControl {
+  # 特定の発言が送られてきたとき、それに反応してIRCコマンドを実行します。
+
+  # 実行を許可する人間を表すマスク。
+  #mask: *!*example@example.net
   
-  # 書式: <コマンド> <動作>
+  # 構文: + <nick> <IRC Message>
+  # <nick>は反応するbotのnickを表すマスク。
+  # <IRCMessage>はサーバーに向けて発行するIRCメッセージ。
+  #
   # 例:
-  # macro: switch join #a@ircnet,#b@ircnet,#c@ircnet
-  # macro: switch part #d@ircnet,#e@ircnet,#f@ircnet
-  # この例ではコマンド"switch"を追加して、それが使われると
-  # #a@ircnet,#b@ircnet,#c@ircnetにjoinして、
-  # #d@ircnet,#e@ircnet,#f@ircnetからpartします。
+  # + hoge NICK [hoge]
+  # hogeというBOTが[hoge]にnickを変更する。
 }
 
-- System::Shutdown
-{
+- System::Shutdown {
+  # Tiarraを終了させる。
+
   # クライアントから特定のコマンドが実行された時や、
   # 誰かから個人的に(privで)特定の発言が送られた時に
-  # Tiarraを終了させるモジュールです。
+  # Tiarra を終了させます。
   
   # 追加するコマンド。省略された場合はコマンドでのシャットダウンは無効になります。
-  command: shutdown
+  #command: shutdown
   
   # Tiarraをシャットダウンさせるprivの発言。
   # 省略された場合はprivでのシャットダウンは無効になります。
-  message: shutdown
+  #message: shutdown
   
   # privでのシャットダウンを許可する人。
   # 省略された場合はprivでのシャットダウンは無効になります。
   # 複数のマスクを指定した場合は、一つでもマッチするものがあればシャットダウンします。
-  mask: sample!sample@*.sample.jp
+  #mask: example!example@*.example.jp
 }
 
-- System::PrivTranslator
-{
-  # 個人的なprivやnoticeが来た時に、その送信者のnickにネットワーク名を付ける事によって
-  # クライアントからprivが届かなくなる現象を回避するモジュール。
-  
-  # 設定項目はありません。
+- User::Away::Client {
+  # クライアントが一つも接続されていない時にAWAYを設定します。
+
+  # どのようなAWAYメッセージを設定するか。省略された場合はAWAYを設定しません。
+  #away: 居ない。
 }
 
-- System::RemoteControl
-{
-  # 特定の発言が送られてきたとき、それに反応してIRCコマンドを実行します。
-  
-  # 実行を許可する人間を表すマスク。
-  #mask: *!*hoge@hoge.net
+- User::Away::Nick {
+  # ニックネーム変更に応じて AWAY を設定します。
+
+  # ニックネームを変更したときに、そのニックネームに対応するAWAYが
+  # 設定されていれば、そのAWAYを設定します。そうでなければAWAYを取り消します。
   
-  # 構文: + <nick> <IRC Message>
-  # <nick>は反応するbotのnickを表すマスク。
-  # <IRCMessage>はサーバーに向けて発行するIRCメッセージ。
+  # 書式: <nickのマスク> <設定するAWAYメッセージ>
   #
-  # 例:
-  # + hoge NICK [hoge]
-  # hogeというBOTが[hoge]にnickを変更する。
+  # nickをhoge_zzzに変更すると、「寝ている」というAWAYを設定する。
+  # hoge_workまたはhoge_zzzに変更した場合は、「仕事中」というAWAYを設定する。
+  # それ以外のnickに変更した場合はAWAYを取り消す。
+  # 後者は正規表現を利用して「away: re:hoge_(work|zzz) 仕事中」としても良い。
+  #away: hoge_zzz           寝ている
+  #away: hoge_work,hoge_zzz 仕事中
 }
 
-- System::Raw
-{
-  # マスクで指定したサーバーにIRCメッセージを加工せずに直接送る。
-  # 例えばQUITを送る事で一時的な切断が可能。
+- User::Filter {
+  # 指定された人物からのPRIVMSGやNOTICEを書き換える。
 
-  # この機能を利用するためのコマンド名。デフォルトは「raw」。
-  # 「/raw ircnet quit」のようにして使う。
-  # 一つ目のパラメータは送り先のネットワーク名。ワイルドカード使用可能。
-  command: raw
+  # 人物のマスクと、置換パターンを定義。
+  # 置換パターン中の#(message)は、発言内容に置換されます。
+  # 人物が複数のマスクに一致する場合は、最初に一致したものが使われます。
+  pattern: *!*@* #(message)
+}
+
+- User::Ignore {
+  # 指定された人間からのPRIVMSGやNOTICEを破棄してクライアントへ送らないようにするモジュール。
+
+  # 対象となるコマンドのマスク。省略時には"privmsg,notice"が設定されている。
+  # ただしprivmsgとnotice以外を破棄してしまうと、(Tiarraは平気でも)クライアントが混乱する。
+  command: privmsg,notice
+  
+  # maskは複数定義可能。定義された順番でマッチングが行なわれます。
+  mask: example!*@*.example.net
+}
+
+- User::Nick::Detached {
+  # クライアントが接続されていない時に、特定のnickに変更します。
+
+  # クライアントが接続されていない時のnick。
+  # このnickが既に使われていたら、適当に変更が加えられて使用されます。
+  # クライアントが再び接続されると、切断前のローカルnickに戻ります。
+  detached: PHO_d
+}
+
+- User::ServerOper {
+  # 特定のネットワークに接続した時、OPERコマンドを発行してします。
+
+  # 書式: <ネットワーク名> <オペレータ名> <オペレータパスワード>
+  #
+  # ネットワーク"local"に接続した時、オペレータ名oper、
+  # オペレータパスワードoper-passでOPERコマンドを発行する例。
+  #oper: local oper oper-pass
 }
 
 - User::Vanish {
-  # 指定された人物の存在を、様々なメッセージから消去するモジュール。
+  # 指定された人物の存在を、様々なメッセージから消去する。
+
   # 対象となった人物の発行したJOIN、PART、INVITE、QUIT、NICKは消去され、NAMESの返すネームリストからも消える。
   # また、対象となった人物のNJOINも消去される。
-
+  
   # Vanish対象が発行したMODEを消去するかどうか。デフォルトで0。
   # 消去するとは云え、本当にMODEそのものを消してしまうのではなく、
   # そのユーザーの代わりに"HIDDEN!HIDDEN@HIDDEN.BY.USER.VANISH"がMODEを実行した事にする。
   drop-mode-by-target: 1
-
+  
   # Vanish対象を対象とするMODE +o/-o/+v/-vを消去するかどうか。デフォルトで1。
   drop-mode-switch-for-target: 1
-
+  
   # Vanish対象が発行したKICKを消去するかどうか。デフォルトで0。
   # 本当に消すのではなく、"HIDDEN!HIDDEN@HIDDEN"がKICKを実行した事にする。
   drop-kick-by-target: 1
-
+  
   # Vanish対象を対象とするKICKを消去するかどうか。デフォルトで0。
   drop-kick-for-target: 0
-
+  
   # Vanish対象が発行したTOPICを消去するかどうか。デフォルトで0。
   # 本当に消すのでは無いが、他の設定と同じ。
   drop-topic-by-target: 1
@@ -1011,117 +1133,3 @@
   mask: #example@example  example!exapmle@example.com
 }
 
-- User::Ignore
-{
-  # 指定された人間からのPRIVMSGやNOTICEを破棄してクライアントへ送らないようにするモジュール。
-  
-  # 対象となるコマンドのマスク。省略時には"privmsg,notice"が設定されている。
-  # ただしprivmsgとnotice以外を破棄してしまうと、(Tiarraは平気でも)クライアントが混乱する。
-  command: privmsg,notice
-  
-  # maskは複数定義可能。定義された順番でマッチングが行なわれます。
-  mask: sample!*@*.sample.net
-}
-
-- User::Filter
-{
-  # 指定された人物からのPRIVMSGやNOTICEを書き換えるモジュール。
-
-  # 人物のマスクと、置換パターンを定義。
-  # 置換パターン中の#(message)は、発言内容に置換されます。
-  # 人物が複数のマスクに一致する場合は、最初に一致したものが使われます。
-  pattern: *!*@* #(message)
-}
-
-- User::Away::Client
-{
-  # クライアントが一つも接続されていない時にAWAYを設定します。
-  
-  # どのようなAWAYメッセージを設定するか。省略された場合はAWAYを設定しません。
-  #away: 居ない。
-}
-
-- User::Away::Nick
-{
-  # ニックネームを変更したときに、そのニックネームに対応するAWAYが
-  # 設定されていれば、そのAWAYを設定します。そうでなければAWAYを取り消します。
-  
-  # 書式: <nickのマスク> <設定するAWAYメッセージ>
-  #
-  # 例：
-  # away: hoge_zzz           寝ている
-  # away: hoge_work,hoge_zzz 仕事中
-  #
-  # この例ではnickをhoge_zzzに変更すると、「寝ている」というAWAYを設定する。
-  # hoge_workまたはhoge_zzzに変更した場合は、「仕事中」というAWAYを設定する。
-  # それ以外のnickに変更した場合はAWAYを取り消す。
-  # 後者は正規表現を利用して「away: re:hoge_(work|zzz) 仕事中」としても良い。
-}
-
-- User::Nick::Detached
-{
-  # Tiarraにクライアントが接続されていない時に、特定のnickに変更します。
-    
-  # クライアントが接続されていない時のnick。
-  # このnickが既に使われていたら、適当に変更が加えられて使用されます。
-  # クライアントが再び接続されると、切断前のローカルnickに戻ります。
-  detached: PHO_d
-}
-
-- User::ServerOper
-{
-  # 特定のネットワークに接続した時、OPERコマンドを発行して
-  # サーバーオペレーター権限を取得します。
-  
-  # 書式: <ネットワーク名> <オペレータ名> <オペレータパスワード>
-  #
-  # 例:
-  # oper: local oper oper-pass
-  # この例ではnetworks/nameで定義されたネットワーク"local"に接続した時、
-  # オペレータ名oper、オペレータパスワードoper-passでOPERコマンドを発行します。
-}
-
-+ CTCP::Version {
-  # CTCP VERSIONに応答するためのモジュール。
-
-  # 連続したCTCPリクエストに対する応答の間隔。単位は秒。
-  # 例えば3秒に設定した場合、一度応答してから3秒間は
-  # CTCPに一切応答しなくなる。デフォルトは3。
-  #
-  # なお、CTCP受信時刻の記録は、全てのCTCPモジュールで共有される。
-  # 例えばCTCP VERSIONを送った直後にCTCP CLIENTINFOを送ったとしても、
-  # CTCP::ClientInfoのintervalで設定された時間を過ぎていなければ
-  # 後者は応答しない。
-  interval: 3
-}
-
-- CTCP::ClientInfo {
-  # CTCP CLIENTINFOに応答するためのモジュール。
-
-  # CTCP::Versionのintervalと同じ。
-  interval: 3
-}
-
-- CTCP::UserInfo {
-  # CTCP USERINFOに応答するためのモジュール。
-
-  # CTCP::Versionと同じ。
-  interval: 3
-
-  # USERINFOとして返すメッセージ。
-  message: テスト
-}
-
-- CTCP::Ping {
-  # CTCP PINGに応答するためのモジュール。
-
-  # CTCP::Versionと同じ。
-  interval: 3
-}
-
-- CTCP::Time {
-  # CTCP TIMEに応答するためのモジュール。
-
-  # CTCP::Versionと同じ。
-  interval: 3
-}
--- tiarra-20040215/ChangeLog	2004-02-15 09:21:35.000000000 +0900
+++ tiarra-20040223/ChangeLog	2004-02-23 11:47:36.000000000 +0900
@@ -1,3 +1,167 @@
+2004-02-23  Topia  <topia@clovery.jp>
+
+	* makedoc:
+	  - sample.conf を出力するようにした。
+	  - 全体にわたってモジュール名のソートを行うようにした。
+	  - block 構文への暫定対応。
+	  - #key:value という *コメント* をきちんと認識していなかったのを fix
+	  - グループ名に説明が定義されていなかったときに警告を出すようにした。
+
+	* tiarra:
+	  - --enable-debug 時にも、 couldn't connect 関連のメッセージなら
+	    スタックトレースを省略するようにした。
+
+	* sample.conf:
+	  - TiarraDoc を使用するようになった。
+
+	* doc/module-toc.html, doc/module/*.html:
+	  - regen.
+
+	* doc-src/conf-main.tdoc:
+	  - general/omit-sysmsg-prefix-when-possible 削除。
+	  - general/sysmsg-prefix-use-masks ブロック追加。
+	  - 書かれていなかった networks/multi-server-mode の解説を
+	    sample.conf から持ってきて追加。
+	  - typo したままだった networks/channel-network-separator の
+	    コメントを sample.conf に従って修正。
+	  - ircnet/host を irc.nara.wide.ad.jp に変更。
+	    いまは停止しているのだが、復活を願うということで。
+
+	* doc-src/module-group.tdoc:
+	  - Channel の最後が typo していたのを修正。
+	  - Client, CTCP, Debug を追加。
+	    とはいえ Debug はまだ cvs repo. には存在していないが…。
+
+	* doc-src/sample.conf.in:
+	  - RCS Tag 'Id' を追加。
+
+	* main/Configuration.pm:
+	  - general/omit-sysmsg-prefix-when-possible のデフォルト値を消して、
+	    general/sysmsg-prefix-use-masks のデフォルトブロックを追加。
+	(_complete_table_with_defaults):
+	  - _complete_{table,block}_with_defaults に分割。
+	(_complete_table_with_defaults):
+	  - Block を使った実装に変更。
+	  - Configuration::Block->table の追加が必須。
+	(_complete_block_with_defaults):
+	  - block(hash_ref) と array_ref のデフォルト値に対応。
+
+	* main/ModuleManager.pm:
+	(update_modules):
+	  - %loaded_mods に古いモジュールが無かった場合は無視するようにした。
+	(_unload):
+	  - デバッグモード時でも、同じモジュールからの 11 以上の export は表示しない。
+
+	* main/Multicast.pm:
+	  - $server_sent, $client_sent: NumericReply 化。
+	    ERR_TOOMANYCHANNELS と RPL_WHOISCHANNELS を追加。
+	(_NJOIN_from_server, _RPL_NAMREPLY):
+	  - /[@+]/ が変数展開されているようなので /[\@+]/ に変更。
+	(_WHOIS_from_client):
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	(_{attach,detach}_RPL_WHOISCHANNELS):
+	  - 追加。 WHOIS で表示されるチャンネル名に network をつける。
+
+	* main/RunLoop.pm:
+	  - sysmsg_prefix を追加。
+	(_action_one_message, _action_message_for_each, notify_msg):
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+
+	* main/TiarraDoc.pm:
+	(_makeconf):
+	  - block への暫定対応。
+
+	* main/Configuration/Block.pm:
+	  - ->table を追加。
+	(eval_code):
+	  - original の typo を修正。
+
+	* main/IrcIO/Client.pm:
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	(inform_joinning_channels):
+	  - 暫定的に networks/fixed-channels ブロックに channel の mask を
+	    書くことで、送信順を指定できるようにしたが、 conf エントリ名が
+	    気に入らないため、名前が決まるまでは sample.conf に
+	    書かないことにする。
+
+	* main/IrcIO/Server.pm:
+	  - ->server_hostname を追加。 RPL_WELCOME(001) で送られてきた
+	    サーバ名を保持する。
+	  - サーバで nick 変更が起こったときに、以前の nick も表示するようにした。
+
+	* module/Auto/Reply.pm:
+	  - 返答時に mask をチェックするようにした。
+
+	* module/Channel/Freeze.pm:
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	  - 不要になった use Configuration; を削除。
+
+	* module/Client/Cache.pm:
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	  - WHO キャッシュ送信時において、 Multicast::global_to_local を
+	    使って nick を変換していなかった bug を修正。
+	  - 不要になった use Configuration; を削除。
+
+	* module/Client/Eval.pm:
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	  - 無用な remark('fill-prefix-when-sending-to-client') をなくした。
+
+	* module/Log/Recent.pm:
+	  - no-recent-logs クライアントオプションを追加。
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	  - 不要になった use Configuration; を削除。
+
+	* module/System/Pong.pm:
+	  - NumericReply 化。 ERR_NOORIGIN を返せるようにした。
+	  - PING もここで破棄するようにした。
+	(message_arrived):
+	  - $sender->server_hostname を使用して正確なホスト名に返す。
+
+	* module/System/Raw.pm:
+	  - RunLoop->shared_loop->sysmsg_prefix を使用するようにした。
+	  - NumericReply 化。 NOTICE の代わりに ERR_NEEDMOREPARAMS を返す。
+	  - 不要になった use Configuration; を削除。
+
+	* module/User/Ignore.pm:
+	  - sample conf の mask に例示用ドメインを使用するようにした。
+
+	* module/Auto/Alias.pm, module/Auto/Answer.pm,
+	module/Auto/ChannelWithoutOper.pm, module/Auto/Joined.pm,
+	module/Auto/MesMail.pm, module/Auto/Oper.pm,
+	module/Auto/Random.pm, module/Auto/Reply.pm,
+	module/Auto/Response.pm, module/CTCP/*.pm,
+	module/Channel/*.pm, module/Channel/Join/Invite.pm,
+	module/Channel/Join/Kicked.pm, module/Channel/Mode/*.pm,
+	module/Channel/Mode/Oper/Grant.pm, module/Log/Recent.pm,
+	module/System/Macro.pm, module/System/Pong.pm,
+	module/System/Raw.pm, module/System/RemoteControl.pm,
+	module/System/Shutdown.pm, module/User/Filter.pm,
+	module/User/ServerOper.pm, module/User/Vanish.pm,
+	module/User/Away/Client.pm, module/User/Away/Nick.pm,
+	module/User/Nick/Detached.pm:
+	  - TiarraDoc 化。 sample.conf から取ってきて一部まずいところは
+	    変更している。
+
+2004-02-21  phonohawk  <phonohawk@ps.sakura.ne.jp>
+
+	* module/Channel/Freeze.pm:
+	freezeコマンドの引数は、これまでは完全なチャンネル名であったが、
+	これはマスクに変更。その時にJOINしている全てのチャンネルの中から
+	マスクに一致した全てのチャンネルを凍結する。
+
+	* sample.conf, doc-src/conf-main.tdoc:
+	設定 general/omit-sysmsg-prefix-when-possible 追加。
+	これが1である時、sysmsg-prefixはチャンネルに対してのメッセージ
+	でなければ省略する。デフォルトは1。
+
+	* main/Configuration.pm:
+	general/omit-sysmsg-prefix-when-possible のデフォルト値を追加。
+
+	* main/Multicast.pm, main/RunLoop.pm,
+	  main/IrcIO/Client.pm, module/Channel/Freeze.pm,
+	  main/Log/Recent.pm, module/System/Raw.pm:
+	omit-sysmsg-prefix-when-possibleを反映。
+
 2004-02-15  Topia  <topia@clovery.jp>
 
 	* module/Client/Cache.pm:
@@ -1234,7 +1398,7 @@
 
 	* これ以前のログは書いていません。
 
-#       Id: $Id: ChangeLog,v 1.129 2004/02/15 00:19:31 topia Exp $
+#       Id: $Id: ChangeLog,v 1.131 2004/02/23 02:46:17 topia Exp $
 #   Author: $Author: topia $
-#     Date: $Date: 2004/02/15 00:19:31 $
-# Revision: $Revision: 1.129 $
+#     Date: $Date: 2004/02/23 02:46:17 $
+# Revision: $Revision: 1.131 $
