# -*- tiarra-conf -*-
# -----------------------------------------------------------------------------
# $Id: all.conf.in 36552 2010-01-27 14:53:29Z drry $
# -----------------------------------------------------------------------------
# tiarra.conf サンプル
# このファイルにはすべてのブロックの解説があります。
# 必要なブロックがあればここからコピーしていってください。
# -----------------------------------------------------------------------------

# -----------------------------------------------------------------------------
# generalブロック
#
# tiarra.conf自身の文字コードやユーザー情報などを指定するブロックです。
# -----------------------------------------------------------------------------
general {
  # tiarra.conf自身の文字コード
  # コード名はjis,sjis,euc,utf8,utf16,utf32等。(この値はEncodeまたはUnicode::Japaneseにそのまま渡されます)
  # autoが指定された、または省略された場合は自動判別します。
  conf-encoding: utf8

  # ユーザー情報
  # 省略不能です。
  nick: tiarra
  user: tiarra
  name: Tiarra the "Aeon"

  # どのようなユーザーモードでログインするか。+iwや+iのように指定する。
  # 省略された場合はユーザーモードを特に設定しない。
  #user-mode: +i

  # Tiarraへの接続を許可するホスト名を表わすマスク。
  # 制限をしないのであれば"*"を指定するか省略する。
  client-allowed: *

  # 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になります。
  #tiarra-ipv4-bind-addr: 0.0.0.0
  #tiarra-ipv6-bind-addr: ::0

  # Tiarraにクライアントが接続する際に要求するパスワードをcryptした文字列。
  # 空の文字列が指定されたり省略された場合はパスワードを要求しない。
  # crypt は ./tiarra --make-password で行えます。
  tiarra-password: xl7cflIcH9AwE

  # 外部プログラムからTiarraをコントロールする為のUNIXドメインソケットの名前。
  # 例えば"foo"を指定した場合、ソケット/tmp/tiarra-control/fooが作られる。
  # 省略された場合はこの機能を無効とする。
  # また、非UNIX環境ではそもそもUNIXドメインソケットが利用可能でないため、
  # そのような場合にもこの機能は無効となる。
  #control-socket-name: test

  # IRCサーバーから送られる文字のコードと、IRCサーバーへ送る文字のコード。
  # それぞれ省略された場合はjis。
  server-in-encoding: utf8
  server-out-encoding: utf8

  # クライアントから受け取る文字のコードと、クライアントへ伝える文字のコード。
  # それぞれ省略された場合はjis。
  client-in-encoding: utf8
  client-out-encoding: utf8

  # Tiarraは標準出力に様々なメッセージを出力するが、その文字コードを指定する。省略時にはutf8となる。
  # ただしtiarra.confのパースが完了するまでは文字コードの変換は行なわれない(つまりこの設定が有効にならない)ことに注意して下さい。
  stdout-encoding: utf8

  # Tiarraはエラーメッセージを標準出力に出力するが、その時に接続しているクライアントがあればクライアントにもNOTICEで送る事が出来る。
  # この値を1にすると、その機能が有効になる。省略するか0を指定するとこの機能は無効になる。
  notice-error-messages: 1

  # Tiarraでチャンネルとユーザーのマスクを指定するときの形式。
  # plum形式とTiarra形式が選択できます。
  #-----------------
  # plum形式: (channelには+や-は使えない。channelは省略すると*とみなす。)
  #   + syntax: user[ channel[ channel[ ...]]]
  #
  #  mask: +*!*@*.example.com #{example}@ircnet +{example3}@ircnet
  #  mask: -*!*@*.example.com #{example2}@2ch,+{example4}@2ch
  #  mask: -*!*@*
  #-----------------
  # Tiarra形式: (channelにも+や-を使える。)
  #   + syntax: channel user
  #
  #  mask: #{example}@ircnet,-#{example2}@2ch    +*!*@*.example.com
  #  mask: ++{example3}@ircnet,-+{example4}@2ch  +*!*@*.example.com # +で始まるチャンネル。
  #  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: *
  }

  # Tiarra が nick 変更時の衝突等を処理するモードを指定します。
  # 0: Tiarra が接続時と同様に自動処理します。
  # 1: クライアントにそのまま投げます。
  #    複数のクライアントが nick 重複を処理する場合は非常に危険です。
  #    (設定不足の IRC クライアントが複数つながっている場合も含みます)
  # 2: 対応するエラーメッセージ付きの NOTICE に変換して、
  #    クライアントに投げます。
  # multi-server-mode 時のデフォルトは 0 、 single-server-mode 時のデフォルトは 1 です。
  #nick-fix-mode: 0

  # Tiarra がチャンネルに join する際の挙動を設定します。
  # デフォルト設定で Excess Flood になってしまう場合に設定してください。
  #
  # irc.juggler.jp (2ch@IRC) にて 25 チャンネル以上 join している場合に
  # Excess Flood になってしまった事例があるそうです。

  # JOIN コマンドを送信する間隔 (秒)
  # デフォルトは1秒です。
  join-interval: 1

  # 一つの JOIN コマンドで指定するチャンネルの数
  # デフォルトは5チャンネルです。
  join-channels-per-command: 5

  messages {
    # Tiarra が使用する、いくつかのメッセージを指定する。

    quit {
      # ネットワーク設定が変更され、再接続する場合の切断メッセージ
      netconf-changed-reconnect: Server Configuration changed; reconnect

      # ネットワーク設定が変更され、切断する場合の切断メッセージ
      netconf-changed-disconnect: Server Configuration changed; disconnect
    }
  }
}

# -----------------------------------------------------------------------------
# networksブロック
#
# Tiarraから接続するIRCネットワークの名称です。
# 一つも定義しなかった場合やこのブロックを省略した場合は、
# "main"というネットワークが一つだけ指定されたものと見做します。
# -----------------------------------------------------------------------------
networks {
  # 複数のサーバーへの接続を可能にするかどうか。1(オン)と0(オフ)で指定。
  # これを1にすると、次のnameを複数個定義する事が可能になり、
  # 複数のサーバーに同時に接続出来るようになります。
  # その一方、これを1にしている時は、チャンネル名にネットワーク名が付加される等、
  # IRCの大部分のメッセージがTiarraによる改変を受けます。
  # これを0にしている間は、次のnameを複数個定義する事は出来なくなります。
  # マルチサーバーモードの設定を起動中に変えると、クライアントから見たチャンネル名が
  # 変更になる為、全クライアントが一時的に全てのチャンネルからpartしたように見え、
  # その直後にjoinし直したように見えます。
  # デフォルトでは1です。
  multi-server-mode: 1

  # 接続するIRCネットワークに名前を付けます。この名前は後で使用します。
  # 複数のネットワークに接続したい場合は多重定義して下さい。
  name: ircnet
  name: 2ch
  #name: freenode
  #name: ustream

  # 通常Tiarraではチャンネル名を「#Tiarra@ircnet」のように表現します。
  # これはネットワークircnet内の#Tiarraというチャンネルを表わします。
  # @以降は省略可能ですが、省略された場合のデフォルトのネットワーク名をここで指定します。
  # 省略した場合は最も始めに定義されたnameがデフォルトになります。
  # (そしてnameが一つも無かった場合はmainがデフォルトになります)
  #default: ircnet

  # 上に述べた通り、デフォルトではTiarraはチャンネル名とネットワーク名を@で区切ります。
  # この区切り文字は任意の文字に変更する事が出来ます。省略された場合は@になります。
  #
  # System::PrivTranslator モジュールを利用している場合、 prefix の nick 部分にも
  # 利用されます。そのため、 ! や @ を含む文字列を利用するとクライアントが誤作動する
  # 場合がありますので注意してください。
  channel-network-separator: @

  # 接続先のサーバーから切断された時に、joinしていたそのサーバーのチャンネルをどうするか。
  # 1. "part-and-join"の場合は、切断されるとクライアントにはチャンネルからpartしたように見せ掛け、
  #    再接続に成功すると再びjoinしたように見せ掛ける。最も負荷が高い。(これはplumに似た動作である)
  # 2. "one-message"の場合は、切断されるとクライアントに宛ててTiarraがNOTICEでその旨を報告する。
  #    再接続に成功すると再びNOTICEで報告する。JOINやPARTはしないので、
  #    クライアントからはまだそのチャンネルに残っているかのように見える。
  # 3. "message-for-each"の場合は、切断されるとクライアントに宛ててTiarraが
  #    到達不能になった全てのチャンネルにNOTICEでその旨を報告する。
  #    再接続に成功すると再びNOTICEで報告する。JOINやPARTはしない。
  # 省略時のデフォルトはpart-and-joinです。
  action-when-disconnected: message-for-each

  # NICKを変更する度に、変更したサーバーでの新しいNICKをNOTICEで常に通知するかどうか。
  # 1なら必ず通知し、0なら変更後のnickがローカルnick(クライアントが見る事の出来るnick)と違っている場合のみ通知する。
  # デフォルトは0です。
  always-notify-new-nick: 0

  fixed-channels {
    # Tiarra がクライアント接続時にチャンネル情報を送る順番を指定する。
    # マッチしなかったチャンネルについては最後にまとめて
    # (順番がごちゃごちゃになって)送られてきます。
    channel: #てすとちゃんねる@ircnet
    channel: #てすと@localserver
    channel: *@localserver
    channel: *@localserver:*.jp
  }
}

# -----------------------------------------------------------------------------
# 各ネットワークの設定
#
# networksブロックで定義した全てのネットワークについて、
# そのアドレス、ポート、(必要なら)パスワードを定義します。
# -----------------------------------------------------------------------------
ircnet {
  # サーバーのホストとポートを指定。複数行可。(host/port が指定されていない場合は)省略不可。
  # 同じサーバの複数のポート指定は順番に試すので、大量に書かない方がよい。
  server: irc.ircnet.ne.jp 6667
  server: irc.media.kyoto-u.ac.jp 6662 6663
  server: irc.huie.hokudai.ac.jp 6667

  # サーバーのホストとポート。(server が指定されていない場合は)省略不可。
  # server を指定した場合は server が優先されます。
  #host: irc.media.kyoto-u.ac.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で設定したものが使われる。
  #ipv4-bind-addr: 0.0.0.0
  #ipv6-bind-addr: ::0
}

2ch {
  server: irc.2ch.net 6667
  server: irc2.2ch.net 6667
  server: irc.juggler.jp 6667

  in-encoding: jis
  out-encoding: jis
}

freenode {
  server: chat.freenode.net 6667

  # freenodeではパスワードとして「アカウント パスワード」のように、
  # アカウントに空白とパスワードを続けたものを指定することで、
  # NICKコマンドの前の接続の段階でidentifyすることができるため、
  # nickの重複や異なるnick等、nickとは無関係に自動identifyが可能。
  #password: account secret
}

ustream {
  server: chat1.ustream.tv 6667

  # Ustreamのloginをnickとuserに指定する。
  #nick: ustreamer
  #user: ustreamer

  # Ustreamのパスワードを指定する。
  #password: secret
}

# -----------------------------------------------------------------------------
# 必須の設定は以上です。以下はモジュール(プラグイン)の設定です。
# -----------------------------------------------------------------------------

# +または-で始まる行はモジュール設定行と見做されます。
# +で記述されたモジュールが使用され、-で記述されたモジュールは使用されません。
# +や-の後の空白は幾つあっても無視されます。

#   メッセージが各モジュールを通過する順番は、このconfファイルで記述された
# 順番の通りになります。ログを取るモジュールなどはconfでも後の方に
# 記述した方が良いということになります。

#   モジュール名はperlのそれと同じようにディレクトリ区切り文字を「::」としたパスで表現されます。
# 例えばモジュールChannel::Auto::Operの実体はファイルmodule/Channel/Auto/Oper.pm
# でなければならず、そのpackage宣言もChannel::Auto::Operでなければなりません。
#   Tiarraモジュールの名称は、perl標準モジュール群やmain/下の.pmファイルと重複しないように
# 気を付けて下さい。Tiarraはモジュールが本当にModuleのサブクラスかどうかをチェックするので
# 例えばIO::Socket::INETといったモジュールを置いても誤動作はしませんが、
# そのようなモジュールはロード時にエラーを出して使用中止になります。

# 一つのモジュールを複数回定義して、何度も同じモジュールをメッセージが通過するようには出来ません。

# 幾つかのモジュールはパラメータとしてチャンネル名を必要とします。
# ここで指定するチャンネル名は、ネットワーク名も含めた文字列でなければなりません。
# 「#チャンネル」では駄目で「#チャンネル@ネットワーク」などとする必要があります。

# マスクの書式:
# ['+' / '-'] ( <マスク文字列> / "re:" 正規表現 )
# これはカンマで幾つでも継ぐ事が出来ます。"\,"でカンマそのものを表します。
# 先頭が+なら、それに続く部分にマッチするものが選ばれ、-なら除外されます。省略されたら+と見做されます。
# マスク文字列とは"*"で0文字以上の任意の文字列を、"?"で1文字の任意の文字列を表す文字列です。
# 例:
# tiarra*  これはtiarraで始まる文字列を表す。
# +*!*tiarra@*.jp,-re:\d  これは*!*tiarra@*.jpにマッチして、かつ文字列中に数字を含まないものを表す。


- Auto::Alias {
  # ユーザエイリアス情報の管理を行ないます。

  # エイリアスは基本的にname,userの二つのフィールドから成っており、
  # それぞれユーザー名、ユーザーマスクを表します。

  # エイリアス定義ファイルのパスと、そのエンコーディング。
  # このファイルは次のようなフォーマットである。
  # 1. それぞれの行は「<キー>: <値>」の形式である。
  # 2. 空の行で、各ユーザーを区切る。
  # 3. <値>はカンマで区切られて複数の値とされる。
  #
  # エイリアス定義ファイルの例:
  #
  # name: sample
  # user: *!*sample@*.sample.net
  #
  # name: sample2,[sample2]
  # user: *!sample2@*.sample.net,*!sample2@*.sample2.net
  #
  alias: alias.txt
  alias-encoding: euc

  # この発言をした人のエイリアスが登録されていれば、それをprivで送る。
  confirm: エイリアス確認

  # 「<addで指定したキーワード> user *!*user@*.user.net」のようにして情報を追加。
  # 発言をした人のエイリアスが未登録だった場合は、userのみ受け付けて新規追加とする。
  add: エイリアス追加

  # 「<removeで指定したキーワード> name ユーザー」のようにして情報を削除。
  # userを全て削除されたエイリアスは他の情報(name等)も含めて消滅する。
  remove: エイリアス削除

  # メッセージが追加されたときの反応を指定します。
  # ランダムなメッセージを発言する際のフォーマットを指定します。
  # エイリアス置換が有効です。#(nick.now)、#(channel)は
  # それぞれ相手のnick、チャンネル名に置換されます。
  # #(key)、#(value)は、追加されたキーと値に置換されます。
  added-format: #(name|nick.now): エイリアス #(key) に #(value) を追加しました。
  add-failed-format: #(name|nick.now): エイリアス #(key) の追加に失敗しました。

  # メッセージが削除されたときの反応を指定します。
  # added-formatで指定できるものと同じです。
  removed-format: #(name|nick.now): エイリアス #(key) から #(value) を削除しました。
  remove-failed-format: #(name|nick.now): エイリアス #(key) からの削除に失敗しました。

  # エイリアスの追加や削除が許されている人。省略された場合は「*!*@*」と見做される。
  modifier: *!*@*
}

- Auto::Answer {
  # 特定の発言に反応して対応する発言をする。

  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。

  # 反応する発言と、それに対する返事を定義します。
  # エイリアス置換が有効です。#(nick.now)と$(channel)はそれぞれ
  # 相手の現在のnickとチャンネル名に置換されます。
  #
  # コマンド: reply
  # 書式: <反応する発言のマスク> <それに対する返事>
  # 例:
  #reply: こんにちは* こんにちは、#(name|nick.now)さん。
  # この例では誰かが「こんにちは」で始まる発言をすると、
  # 発言した人のエイリアスを参照して「こんにちは、○○さん。」のように発言します。
  #
  # コマンド: channel-reply
  # 書式: <反応するチャンネルのマスク> <反応する発言のマスク> <それに対する返事>
  # 例:
  #channel-reply: #あいさつ@ircnet こんにちは* こんにちは、#(name|nick.now)さん。
  # この例では#あいさつ@ircnetで誰かが「こんにちは」で始まる発言をすると、
  # 発言した人のエイリアスを参照して「こんにちは、○○さん。」のように発言します。
  #
  # コマンド: answer-to-myself
  # 書式: <真偽値>
  # 例:
  #answer-to-myself: on
  # 自分の発言にも反応するようになります。
  # デフォルトは off です。
}

- Auto::Calc {
  # Perlの式を計算させるモジュール。

  # 反応する発言を指定します。
  request: 計算

  # 使用を許可する人&チャンネルのマスク。
  # 例はTiarraモード時。 [default: なし]
  mask: * +*!*@*
  # [plum-mode] mask: +*!*@*

  # 結果が未定義だったときに置き換えられる文字列。省略されると undef 。
  #undef: (未定義)

  # 正常に計算できたときのフォーマット
  # method: 計算式, result: 結果, error: エラー, signal: シグナル
  reply-format: #(method): #(result)

  # エラーが起きたときのフォーマット
  # method: 計算式, result: 結果, error: エラー, signal: シグナル
  error-format: #(method): エラーです。(#(error))

  # シグナルが発生したときのフォーマット
  #signal-format: #(method): シグナルです。(#(signal))

  # signal-$SIGNALNAME-format 形式。
  # $SIGNALNAME には現状 alarm/sigfpe があります。
  # 該当がなければ signal-format にフォールバックします。

  # いくつかの例を挙げます。
  #signal-alarm-format: #(method): 時間切れです。
  #signal-sigfpe-format: #(method): 浮動小数点計算例外です。

  # タイムアウトする秒数を指定します。 alarm に渡されます。
  # 再帰を止めるのに使えますが、どうもメモリリークしていそうな雰囲気です。
  timeout: 1

  # サブルーチン定義を許可するかどうかを指定する。
  # 再帰定義が可能なので、許可する場合はこのモジュール専用の
  # Tiarra を動かすことをお勧めします。
  permit-sub: 0

  # 初期化する発言を指定します。
  # このモジュールでは現状変数や関数定義などを行えます。
  # このコマンドが発行されるとそれらをクリアします。
  init: 計算初期化

  # 初期化を許可する人&チャンネルのマスク。
  # 例はTiarraモード時。 [default: なし]
  init-mask: * +*!*@*
  # [plum-mode] mask: +*!*@*

  # 再初期化したときの発言を指定します。
  init-format: 初期化しました。

  # 別の shared-mode な System::WebClient からの発言に対応(yes/no).
  # 自分自身の発言は未対応.
  # [default: no]
  #support-shared-webclient: no
}

- Auto::ChannelWithoutOper {
  # チャンネルオペレータ権限がなくなってしまったときに発言する。

  # +で始まらない特定のチャンネルで、+aモードでも+rモードでもないのに
  # 誰もチャンネルオペレータ権限を持っていない状態になっている時、
  # そこに誰かがJOINする度に特定のメッセージを発言するモジュールです。

  # 書式: <チャンネル名> <メッセージ>
  #channel: #IRC談話室@ircnet なると消失しました。
}

- Auto::FetchTitle {
  # 発言に含まれるURLからタイトルを取得.

  # リクエストタイムアウトまでの時間(秒).
  timeout: 3

  # 有効にするチャンネルとオプションとURLの設定.
  # 書式: mask: <channel> [<&conf>...] <url>
  #
  # mask: #test@ircnet &test http://*
  # mask: * http://*
  mask: * http://*

  # &test と設定すると conf-test ブロックの中身が使われる.
  #conf-test {
  #  auth-test1 {
  #    url:  http://example.com/*
  #    url:  http://example.org/*
  #    user: test
  #    #pass: test
  #    pass: {BASE64}dGVzdAo=
  #  }
  #  filter-xx {
  #    url:  http://example.com/*/xx/*
  #    type: xx
  #  }
  #}

  # お返事の前や後ろにつける字句.
  reply-prefix: "(FetchTitle) "
  reply-suffix: " [AR]"

  # デバッグフラグ.
  #debug: 0
  #debug-mask: #debug-chan your_nick!~you@example.com
  #debug-dumpfile: fetchtitle.log

  # NOTE:
  #  利用するにはCodeReposから
  #  module/Tools/HTTPClient.pm     rev.8220
  #  main/Tiarra/Socket/Buffered.pm rev.8219
  #  以降が必要です.
}

- Auto::FetchTitle::Plugin::ExtractHeading {
  # 本文から見出しを抽出するFetchTitleプラグイン.

  # Auto::FetchTitle { ... } での設定.
  # + Auto::FetchTitle {
  #     plugins {
  #       ExtractHeading {
  #         extra: name1 name2 ...
  #         extra-name1 {
  #           url:        http://www.example.com/*
  #           recv_limit: 10*1024
  #           extract:    re:<div id="title">(.*?)</div>
  #         }
  #       }
  #    }
  #  }
}

- Auto::FetchTitle::Plugin::Mixi {
  # Mixiにログインして見出し抽出出来るようにするFetchTitleプラグイン.

  # Auto::FetchTitle { ... } での設定.
  #
  # + Auto::FetchTitle {
  #    mask: #* &mixi http://*
  #    plugins {
  #      Mixi {
  #        mixi-user: xxx
  #        mixi-pass: yyy
  #      }
  #    }
  #    conf-mixi {
  #      filter-mixi {
  #        url: http://mixi.jp/*
  #        url: http://news.mixi.jp/*
  #        type: mixi
  #        timeout: 10
  #        #閲覧可能なコミュニティの指定.
  #        #mixi-community: 0
  #        #閲覧可能なユーザの指定.
  #        #指定したユーザには足跡踏んで見に行きます.
  #        #mixi-friend:    0
  #        #閲覧可能にしていないページを表示したときのメッセージ.
  #        #要求されたページを #(url) で展開できます.
  #        #mixi-noperm-msg: not permitted #(url).
  #      }
  #    }
  #  }
  #
  # アカウント情報は plugins Mixi に記述.
  # mixi-pass には {B}bbbb でBASE64エンコード値も可能.
  #
  # newsだけしか使わない場合でも, ログイン処理が必要なので
  # mixi.jp 内のいくつかのURLはこのプラグインで処理する必要があります.
  #   url: http://news.mixi.jp/*
  #   url: http://mixi.jp/issue_ticket.pl?*
  #   url: http://mixi.jp/login.pl
  #   url: http://mixi.jp/check.pl?*
  # (それぞれ, ニュースページ, ログイン処理, エラー検出, 途中経路になります.)
}

- Auto::Im {
  # 名前が呼ばれると、その発言をim.kayac.comに送信する

  # 反応する人のマスクを指定します。
  # 省略すると全員に反応します。
  mask: * *!*@*

  # 反応するキーワードを正規表現で指定します。
  # 複数指定したい時は複数行指定してください。
  #regex-keyword: (?i:fugahoge)

  # 反応するキーワードを指定します。
  # 複数指定したい時は,(コンマ)で区切るか、複数行指定してください。
  keyword: hoge

  # im.kayac.com に送るメッセージのフォーマットを指定します。
  # デフォルト値: [tiarra][#(channel):#(nick.now)] #(text)
  # #(channel) のかわりに #(raw_channel) を利用するとネットワーク名がつきません。
  format: [tiarra][#(channel):#(nick.now)] #(text)

  # im.kayac.comで登録したユーザ名を入力します。
  # im.kayac.comについては http://im.kayac.com/#docs を参考にしてください。
  user: username

  # im.kayac.comで秘密鍵認証を選択した場合は設定してください。
  # 省略すると認証なしになります。
  #secret: some secret

  # im.kayac.comでパスワード認証を選択した場合は設定してください。
  # 省略すると認証なしになります。
  # secret と両方指定した場合は secret が優先されています。
  #password: some password
}

- Auto::Joined {
  # 特定のチャンネルに誰かがJOINする度に特定のメッセージを発言する。

  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。

  # 発言を行なうチャンネルと、その内容を定義します。
  # #(nick.now)と$(channel)は、それぞれ相手の現在のnickとチャンネル名に置換されます。
  #
  # 書式: <チャンネル名> <発言内容>
  #channel: #チャンネル@ircnet   「#ちゃんねる」に移転しました。
}

- 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

  # SMTPのユーザ。指定されれば SMTP Auth を行う [default: なし]
  #smtpuser: example1

  # SMTPのパスワード [default: 空パスワード('')]
  #smtppass: test-password

  # 送信するメールの既定件名(エイリアス使用不可) [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]は、
  #    * mailfrom(メールの送信者を指定しようとしてエラー)
  #    * rcptto(メールの送信先を指定しようとしてエラー)
  #    * norcptto(メールの送信先が全部無くなった)
  #    * data(メールの中身を送信しようとしてエラー)
  #    * finish(メールの中身を送信したらエラー)
  # がある。特に欲しくなければerror-[state]は指定しなくても構わない。
  # メッセージを出したくないなら中身の無いエントリを指定すれば良い。
  # error-[state]が指定されてない場合は代わりに error を使う。 [default: 未定義]

  #error-rcptto: 
  #error-norcptto: #(who)さんには送れませんでした。送信できるメールアドレスがありません。
  #error-data: メールが送信できません。DATAコマンドに失敗しました。#(line;サーバ応答:%s|;)
  #error: メール送信エラーです。#(line;サーバ応答:%s|;)#(state; on %s|;)

  # 致命的なエラー。メールに個別なエラーではないので送信者(のprefix)毎に1メッセージ送られる。
  # fatalerror-[state]
  # [state]:
  #    * first(接続エラー)
  #    * helo(SMTPセッションを開始出来ない)
  # がある。特に欲しくなければfatalerror-[state]は指定しなくても構わない。
  # メッセージを出したくないなら中身の無いエントリを指定すれば良い。
  # fatalerror-[state]が指定されてない場合は代わりに fatalerror を使う。 [default: 未定義]

  #fatalerror-first: SMTPサーバに接続できません。
  #fatalerror: SMTPセッションで致命的なエラーがありました。#(line; サーバ応答:%s|;)#(state; on %s|;)
}

- Auto::Notify {
  # 名前が呼ばれると、その発言をim.kayac.comに送信する

  # 反応する人のマスクを指定します。
  # 省略すると全員に反応します。
  mask: * *!*@*

  # 反応するキーワードを正規表現で指定します。
  # 複数指定したい時は複数行指定してください。
  #regex-keyword: (?i:fugahoge)

  # 反応するキーワードを指定します。
  # 複数指定したい時は,(コンマ)で区切るか、複数行指定してください。
  keyword: hoge

  # メッセージのフォーマットを指定します。
  # デフォルト値: [tiarra][#(channel):#(nick.now)] #(text)
  # #(channel) のかわりに #(raw_channel) を利用するとネットワーク名がつきません。
  format: [tiarra][#(channel):#(nick.now)] #(text)

  # 使用するブロックを指定します
  #blocks: im prowl

  im {

    # 通知先のタイプを指定します。
    type: im_kayac

    # im.kayac.comで登録したユーザ名を入力します。
    # im.kayac.comについては http://im.kayac.com/#docs を参考にしてください。
    user: username

    # im.kayac.comで秘密鍵認証を選択した場合は設定してください。
    # 省略すると認証なしになります。
    #secret: some secret

    # im.kayac.comでパスワード認証を選択した場合は設定してください。
    # 省略すると認証なしになります。
    # secret と両方指定した場合は secret が優先されています。
    #password: some password

  }

  prowl {

    # 通知先のタイプを指定します。
    type: prowl

    # 通知先ごとにフォーマットを指定できます。
    # この例では先頭に時刻を追加しています。
    #format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text)

    # Prowl で表示された apikey を入力します。
    # Prowl については http://prowl.weks.net/ を参考にしてください。
    #apikey: XXXXXX

    # http://forums.cocoaforge.com/viewtopic.php?f=45&t=20339
    priority: 0
    application: tiarra
    event: keyword

  }
}

- Auto::Oper {
  # 特定の文字列を発言した人を+oする。

  # Auto::Aliasを有効にしていれば、エイリアス置換を行ないます。

  # +oを要求する文字列(マスク)を指定します。
  request: なると寄越せ

  # チャンネルオペレータ権限を要求した人と要求されたチャンネルが
  # ここで指定したマスクに一致しなかった場合は
  # denyで指定した文字列を発言し、+oをやめます。
  # 省略された場合は誰にも+oしません。
  # 書式は「チャンネル 発言者」です。
  # マッチングのアルゴリズムは次の通りです。
  # 1. チャンネル名にマッチするmask定義を全て集める
  # 2. 集まった定義の発言者マスクを、定義された順にカンマで結合する
  # 3. そのようにして生成されたマスクで発言者のマッチングを行ない、結果を+o可能性とする。
  # 例1:
  # mask: *@2ch* *!*@*
  # mask: #*@ircnet* *!*@*.hoge.jp
  # この例ではネットワーク 2ch の全てのチャンネルで誰にでも +o し、
  # ネットワーク ircnet の # で始まる全てのチャンネルでホスト名 *.hoge.jp の人に+oします。
  # #*@ircnetだと「#hoge@ircnet:*.jp」などにマッチしなくなります。
  # 例2:
  # mask: #hoge@ircnet -*!*@*,+*!*@*.hoge.jp
  # mask: *            +*!*@*
  # 基本的に全てのチャンネルで誰にでも +o するが、例外的に#hoge@ircnetでは
  # ホスト名 *.hoge.jp の人にしか +o しない。
  # この順序を上下逆にすると、全てのチャンネルで全ての人を +o する事になります。
  # 何故なら最初の* +*!*@*が全ての人にマッチするからです。
  mask: * *!*@*

  # +oを要求した人を実際に+oする時、ここで指定した発言をしてから+oします。
  # #(name|nick)のようなエイリアス置換を行います。
  # エイリアス以外でも、#(nick.now)を相手のnickに、#(channel)を
  # そのチャンネル名にそれぞれ置換します。
  message: 了解

  # +oを要求されたが+oすべき相手ではなかった場合の発言。
  # 省略されたら何も喋りません。
  deny: 断わる

  # +oを要求されたが相手は既にチャンネルオペレータ権限を持っていた場合の発言。
  # 省略されたらdenyに設定されたものを使います。
  oper: 既に@を持っている

  # +oを要求されたが自分はチャンネルオペレータ権限を持っていなかった場合の発言。
  # 省略されたらdenyに設定されたものを使います。
  not-oper: @が無い

  # チャンネルに対してでなく自分に対して+oの要求を行なった場合の発言。
  # 省略されたらdenyに設定されたものを使います。
  private: チャンネルで要求せよ

  # チャンネルの外から+oを要求された場合の発言。+nチャンネルでは起こりません。
  # 省略されたらdenyに設定されたものを使います。
  out: チャンネルに入っていない
}

- Auto::Outputz {
  # チャンネルの発言文字数を outputz に送信する

  # 復活の呪文。
  key: some secret

  # 送信対象にするコマンドの設定。
  # 省略された場合は PRIVMSG 。
  # パラメータ1が送信先、パラメータ2が本文でなければ動作しないので、
  # 動作するコマンドは PRIVMSG/NOTICE/TOPIC/PART 程度。
  #command: PRIVMSG

  # 各チャンネルのURIの設定。
  # 記述された順序で検索されるので、全てのチャンネルにマッチする"*"などは最後に書かなければならない。
  # フォーマットは次の通り。
  # channel: <URI> (<チャンネル名> / 'priv')@<ネットワーク名>
  # #(channel) はチャンネル名に、 #(channel_short) はネットワークなしの
  # チャンネル名に、 #(network) はネットワーク名にそれぞれ置き換えられる。
  # また、危険な文字は自動的にエスケープされる。
  channel: http://#(network).irc.example.com/#(channel_short) *
}

- Auto::Random {
  # 特定の発言に反応してランダムな発言をします。

  # 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::Aliasを有効にしていれば、エイリアス置換を行ないます。

  # 使用するブロックの定義。
  # 省略すると std を使用.
  # 複数個の blocks の指定も可能.
  blocks: std

  std {
    # 1つの応答ブロックの定義.
    # 一応全ての項目が省略可能ではあるけれど,
    # 通常は最低限 file と file-encoding を使用する.
    # IRCで応答の追加削除等を行いたいときにはそれに更に設定を追加する形.
    # (IRC上で応答の追加削除は行うが保存はしない時に限ってfileを省略可能.)

    # 機能:
    # - 通常応答(mask)
    # - 登録数確認(count-query/mask)
    # - 反応確認(request/modifier)
    # - 反応追加(add/modifier)
    # - 反応削除(remove/modifier)
    # 通常応答以外は設定を省略することで機能を無効にできます。

    # データファイルと文字コードを指定します。
    # ファイルの中では一行に一つの"反応マスク:メッセージ"を書いて下さい。
    file: reply.txt
    file-encoding: euc

    # １つの発言で複数の反応マスクにマッチする場合,
    # どれにマッチするかは未定義です.
    # ただ, どちらか1つにのみマッチします.

    # 同じ反応マスクに複数個のメッセージが記述してあった場合の処理.
    # multivalue: random #==> ランダムに1つ選択.
    # multivalue: all    #==> 全て返す.
    # multivalue: seq    #==> 順番に1つずつ返す.
    # 省略時及び認識できなかったときは random.
    #multivalue: random
    # 返す最大行数.
    # multivalue: all の時のみ有効.
    # (それ以外の時は1行しか返さない)
    # デフォルトは 5 行まで.
    #multivalue-limit: 5

    # 反応する人のマスク。
    # 通常応答と登録数の返答時にチェックされる。
    mask: * *!*@*
    # plum: mask: *!*@*

    # マッチした１つの反応マスクが実際に発言に反応する確率を指定します。
    # 百分率です。省略された場合は100と見做されます。
    rate: 100

    # メッセージの登録数を返答するキーワードを指定します。
    # 省略するとこの機能は無効になります。
    # 指定したときだけこの機能が有効になります。
    # mask で許可された人(通常応答を返す人)が使えます。
    count-query: 反応登録数

    # メッセージの登録数を返答するときの反応を指定します。
    # formatで指定できるものと同じです。#(count)は登録数になります。
    # count-query を指定したときのみ必要。
    count-format: 反応は#(count)件登録されています。

    # メッセージを追加するキーワードを指定します。
    # ここで指定したキーワードを発言すると、新しいメッセージを追加します。
    # 実際の追加方法は「<addで指定したキーワード> <追加するメッセージ>」です。
    # 省略するとこの機能は無効になります。
    # 指定したときだけこの機能が有効になります。
    # modifier で許可された人だけ使えます。
    #add: 反応追加

    # 反応が追加されたときの反応を指定します。
    # formatで指定できるものと同じです。#(message)は追加されたメッセージになります。
    added-format: #(name|nick.now): #(key) に対する反応 #(message) を追加しました。

    # メッセージを削除するキーワードを指定します。
    # 実際の削除方法は「<removeで指定したキーワード> <削除するキーワード>」です。
    # 省略するとこの機能は無効になります。
    # 指定したときだけこの機能が有効になります。
    # modifier で許可された人だけ使えます。
    #remove: 反応削除

    # メッセージが削除されたときの反応を指定します。
    # formatで指定できるものと同じです。#(message)は削除されたメッセージになります。
    removed-format: #(name|nick.now): #(key) #(message;に対する反応 %s|;) を #(count) 件削除しました。

    # 反応の確認を行うためのキーワードを指定します。
    # 通常応答と違って, multivalue-limit の制限を受けずに全てのマッチした応答を返します。
    # 実際の指定方法は、「<requestで指定したキーワード> <チェックしたい発言>」です。
    # 省略するとこの機能は無効になります。
    # 指定したときだけこの機能が有効になります。
    # modifier で許可された人だけ使えます。
    request: 反応チェック

    # request に反応するときのフォーマットを指定します。
    # #(key) がキーワード、 #(message) が発言に置換されます。
    # request を指定したときのみ必要。
    reply-format: 「#(key)」という発言に「#(message)」と反応します。

    # request に反応する最大個数(反応マスクの数)を指定します。
    # (１つの反応マスクに対応するメッセージの数は制限されません。)
    # あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。
    # 通常の反応には関与しません。また、応答の行数ではありません。
    max-reply: 5

    # 編集系コマンド, add とremove と request を許可する人。
    # 省略された場合は「* *!*@*」(全員許可)と見做します。
    modifier: * *!*@*

    # 正規表現拡張を許可するか。省略された場合は禁止します。
    use-re: 1
  }
}

- Auto::Response {
  # データファイルの指定にしたがって反応する。

  # 大量の反応データを定義するのに向いています。

  # データファイルのフォーマット
  # | pattern: re:^(こん(に)?ちは)
  # | rate: 90
  # | mask: * *!*@*
  # | #plum: mask: *!*@*
  # | response: こんにちは。
  # | response: いらっしゃいませ。
  # |
  # | pattern: おやすみ
  # | rate: 20
  # | response: おやすみなさい。
  # 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::DCC::RewriteAddress {
  # クライアントが送信した CTCP DCC のアドレスを変換する。

  # CTCP DCC に指定されているアドレスを、 Tiarra で取得したものに
  # 書き換えます。(EXPERIMENTAL)
  #
  # IPv4 のみサポートしています。
  #
  # このモジュールは一旦 CTCP DCC メッセージを破棄するので、
  # 別のクライアントには送信されません。

  # 変換する DCC タイプ。 [デフォルト値: CHAT SEND]
  type: CHAT SEND

  # 変換用アドレスの取得方法を選択する。デフォルト値はありません。
  # 以下の取得方法(server-socket client-socket dns http)から
  # 必要なもの(複数可)を指定してください。
  resolver: client-socket server-socket dns http


  # 取得方法と設定
  # なにも設定がないときはブロック自体を省略することもできます。

  server-socket {
    # サーバソケットのローカルアドレスを取ります。
    # client <-> tiarra[this address] <-> server
  }

  client-socket {
    # クライアントソケットのリモートアドレスを取ります。
    # client [this address]<-> Tiarra <-> server
  }

  dns {
    # DNS を引いて決定します。IPアドレスの指定も可能です。
    host: example.com
  }

  http {
    # 現状では単純な GET しかサポートしていません。

    # アクセス先 URL
    url: http://checkip.dyndns.org/

    # IP アドレス取得用 regex
    regex: Current IP Address: (\d+\.\d+\.\d+\.\d+)
  }

  # リゾルバの選び方
  #
  #  * Tiarra を動作させているサーバとインターネットの間にルータ等があり、
  #    グローバルアドレスがない場合
  #      *-socket は役に立ちません。 http を利用してください。
  #      適当な DDNS を持っていればdns も良いでしょう。
  #
  #  * Tiarra がレンタルサーバなどLAN上にないサーバで動作している場合
  #      server-socket, http は役に立ちません。
  #      client-socket がお勧めです。
  #
  #  * Tiarra がLAN上にあり、グローバルアドレスのついているホストで
  #    動作している場合
  #      client-socket は役に立ちません。
  #      server-socket がお勧めです。
}

- 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

  # 凍結しているチャンネルが存在する時、一定時間毎にその旨を報告する事も可能。
  # この機能は凍結した事を忘れないようにする為にある。
  # 単位は分、デフォルトはゼロ(報告しない)。
  reminder-interval: 30
}

- Channel::Ignore {
  # 指定されたチャンネルの存在を、様々なメッセージから消去する。

  # 対象となったチャンネルのJOIN、PART、INVITE、QUIT、NICK、NAMES、NJOINは消去される。

  # 注意点
  # - この機能はまだ実装途中です。いろいろな不具合があるかもしれません。むしろきっとあります。
  # - サーバがわとの通信に割り込みますのでログにもとられません。
  # - この機能を使っている Tiarra より上流に multi-server-mode な Tiarra を置かないでください。

  # チャンネルの定義。
  # また、privの場合は「priv@ネットワーク名」という文字列をチャンネル名の代わりとしてマッチングを行なう。
  # 書式: mask: <チャンネルのマスク>
  mask: #example@example
}

- Channel::Join::Connect {
  # サーバーに初めて接続した時、指定したチャンネルに入るモジュール。

  # 書式: <チャンネル1>[,<チャンネル2>,...] [<チャンネル1のキー>,...]
  #     コンマの直後のスペースは無視されます。
  #
  # 例:
  #   「#aaaaa@ircnet」に「aaaaa」というキーで入る。
  #channel: #aaaaa@ircnet aaaaa
  #
  #   「#aaaaa@ircnet」、「#bbbbb@ircnet:*.jp」、「#ccccc@ircnet」、「#ddddd@ircnet」の4つのチャンネルに入る。
  #channel: #aaaaa@ircnet,#bbbbb@ircnet:*.jp, #ccccc@ircnet
  #channel: #ddddd@ircnet

  # join 送出の間隔(秒)
  # この設定は obsolete です。 general/join-interval を利用してください。
  # 設定されていた場合は general/join-interval に優先されます。
  #interval: 1
}

- Channel::Join::Invite {
  # 招待されたらそのチャンネルに入る。

  # 許可するユーザ/チャンネルのマスク。
  mask: * *!*@*
  # plum: *!*@*

  # 招待されたチャンネルに流すメッセージのフォーマット。
  #message: こんばんわ〜。
}

- Channel::Join::Kicked {
  # 特定のチャンネルからkickされた時に、自動で入りなおす。

  # 対象となるチャンネル名のマスク
  channel: *
}

- Channel::Mode::Get {
  # チャンネルにJOINした時、そのチャンネルのモードを取得します。

  # Channel::Mode::Set等が正しく動くためには
  # チャンネルのモードをTiarraが把握しておく必要があります。
  # 自動的にモードを取得するクライアントであれば必要ありませんが、
  # そうでなければこのモジュールを使うべきです。

  # 設定項目は無し。
}

- Channel::Mode::Oper::Grant {
  # 特定のチャンネルに特定の人間がjoinした時に、自分がチャンネルオペレータ権限を持っていれば+oする。

  # splitからの復帰などで+o対象の人が一度に大量に入って来ても+oは少しずつ実行します。
  # Excess Floodにはならない筈ですが、本格的な防衛BOTに使える程の物ではありません。

  # 対象の人間がjoinしてから実際に+oするまで何秒待つか。
  # 省略されたら待ちません。
  # 5-10 のように指定されると、その値の中でランダムに待ちます。
  wait: 2-5

  # チャンネルと人間のマスクを定義。Auto::Operと同様。
  #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 {
  # チャンネルオペレータ権限を無くしたとき、一人ならjoinし直す。

  # +チャンネルや+aされているチャンネル以外でチャンネルオペレータ権限を持たずに
  # 一人きりになった時、そのチャンネルの@を復活させるために自動的にjoinし直すモジュール。
  # トピック、モード、banリスト等のあらゆるチャンネル属性をも保存します。

  # +b,+I,+eリストの復旧を行なうかどうか。
  # あまりに長いリストを取得するとMax Send-Q Exceedで落とされるかも知れません。
  save-lists: 1
}

- Client::Cache {
  # データをキャッシュしてサーバに問い合わせないようにする

  # キャッシュを使用しても、使われるのは接続後最初の一度だけです。
  # 二度目からは通常通りにサーバに問い合わせます。
  # また、クライアントオプションの no-cache を指定すれば動きません。

  # mode キャッシュを使用するか
  use-mode-cache: 1

  # who キャッシュを使用するか
  use-who-cache: 1
}

+ Client::Conservative {
  # サーバが送信するような IRC メッセージを作成するようにする

  # サーバが実際に送信しているようなメッセージにあわせるようにします。
  # 多くのクライアントの設計ミスを回避でき(ると思われ)ます。
}

- Client::Cotton {
  # Cotton の行うおかしな動作のいくつかを無視する

  # 該当クライアントのオプション client-type に cotton や unknown と指定するか、
  # Client::GetVersion を利用してクライアントのバージョンを取得するように
  # してください。

  # part shield (rejoin 時に自動で行われる part の無視)を使用するか
  use-part-shield: 1
}

- Client::Eval {
  # クライアントから Perl 式を実行できるようにする。

  # eval を実行するコマンド名。省略されるとコマンドを追加しません。
  # この時コマンドはTiarraが握り潰すので、IRCプロトコル上で定義された
  # コマンド名を設定すべきではありません。
  command: eval

  # hex eval を実行するコマンド名。省略されるとコマンドを追加しません。
  # この時コマンドはTiarraが握り潰すので、IRCプロトコル上で定義された
  # コマンド名を設定すべきではありません。
  hex-command: hexeval

  # 表示する最大行数を指定します。省略するとすべての行を表示します。
  max-line: 30
}

+ Client::GetVersion {
  # クライアントに CTCP Version を発行してバージョン情報を得る

  # オプションはいまのところありません。
  # (開発者向け情報: 取得した情報は remark の client-version に設定され、
  #                  Client::Guess から使用されます。)
}

- Client::List {
  # Clientの一覧を取得.

  # 接続しているクライアントを一覧.
  # /clientlist を投げると, その時に接続しているクライアントの一覧を返す.
  # 出力例:
  # clientlist
  #   *** 1 client
  #   *** [1] 127.0.0.1:23695


  # 一覧を返すトリガーとするコマンド.
  #command: clientlist
}

- Client::PatchworkMessage {
  # IRC メッセージにちょっと変更を加えて、クライアントのバグを抑制する

  # 特に注意書きがない場合はデフォルトで有効です。
  # また、 Client::GetVersion も同時に入れておくと便利です。
  # とりあえず obsolete です。このモジュールで実装されていた機能は
  # Client::Conservative によって実現できます。
  # Client::Conservative で実装してはいけないようなものがあった場合のみ
  # このモジュールで対処します。

  # WoolChat:
  #  対応しているメッセージ:
  #   NICK(コロンが必須)
  #  説明:
  #   NICK は接続直後にも発行されるため、 Client::GetVersion での判別まで
  #   待てません。該当クライアントのオプション client-type に woolchat と
  #   指定してください。実名欄に $client-type=woolchat$ と書けば OK です。
  enable-woolchat: 1

  # X-Chat:
  #  対応しているメッセージ:
  #   RPL_WHOISUSER(コロンが必須)
  #  説明:
  #   WHOIS の realname にスペースが入っていないと最初の一文字が削られます。
  enable-xchat: 1
}

- Client::ProtectMyself {
  # 意図せず自分のニックが変わってしまうのを防止する

  # {nick,part,quit,join}-format: それぞれのメッセージのフォーマットを指定します。
  # {nick,user,host,prefix}.now などはどこでも使えます。
  # そのほかには
  #  target   : 表示するチャンネル(またはニック)。
  #  nick.new : nick-format のみ。新しいニック。
  #  message  : part と quit 。メッセージ。

  nick-format: Nick changed #(nick.now) -> #(nick.new)
  part-format: Part #(nick.now) (#(message)) from #(target)
  quit-format: Quit #(nick.now) (#(message))
  join-format: Join #(nick.now) (#(prefix.now)) to #(target)
}

- Client::Rehash {
  # 全チャンネル分の names の内部キャッシュをクライアントに送信する。

  # もともとはクライアントの再初期化目的に作ったのですが、 names を送信しても
  # 更新されないクライアントが多いので、主に multi-server-mode な Tiarra の
  # 下にさらに Tiarra をつないでいる人向けにします。

  # names でニックリストを更新してくれるクライアント:
  #   Tiarra
  # してくれないクライアント: (括弧内は確認したバージョンまたは注釈)
  #   LimeChat(1.18)

  # nick rehash に使うコマンドを指定します。
  # 第二パラメータとして現在クライアントが認識している nick を指定してください。
  command-nick: rehash-nick

  # names rehash に使うコマンドを指定します。
  command-names: rehash-names

  # チャンネルとチャンネルの間のウェイトを指定します。
  interval: 2
}

- Client::ShowNick {
  # show network

}

- Debug::Core {
  # Tiarra の内部構造の追跡.

  # Tiarra の内部構造を出力します.

  # トリガー用コマンド.
  # デフォルトは debugcore
  command: debugcore

  # [top commands]
  # help   - show this usage.
  # bbs    - show BulletinBoard info.
  # socket - show internal sockets.
  # module - show module info.

  # [sub commands]
  # help:
  # bbs:
  #   keys - show keys in BulletinBoard.
  # socket:
  #   help      - show this usage.
  #   list      - show installed socket.
  #   get       - show socket in detail.
  #   uninstall - uninstall detached socket.
  # module:
  #   help    - show this usage.
  #   summary - show module summary.
  #   list    - show module list in detail.
  #   dep     - show module dependency.
}

- Debug::RawLog {
  # 標準出力にクライアントやサーバとの通信をダンプする。

  # 0 または省略で表示しない。 1 で表示する。
  # クライアントオプションの logname によって、ダンプに使う名前を指定できます。

  # サーバからの入力
  enable-server-in: 1

  # サーバへの出力
  enable-server-out: 1

  # クライアントからの入力
  enable-client-in: 0

  # クライアントへの出力
  enable-client-out: 0

  # PING/PONG を無視する
  ignore-ping: 1

  # NumericReply の名前を解決して表示する(ちゃんとした dump では無くなります)
  resolve-numeric: 1
}

- Log::Channel {
  # チャンネルやprivのログを取るモジュール。

  # Log系のモジュールでは、以下のように日付や時刻の置換が行なわれる。
  # %% : %
  # %Y : 年(4桁)
  # %m : 月(2桁)
  # %d : 日(2桁)
  # %H : 時間(2桁)
  # %M : 分(2桁)
  # %S : 秒(2桁)

  # ログを保存するディレクトリ。Tiarraが起動した位置からの相対パス。~指定は使えない。
  directory: log

  # ログファイルの文字コード。省略されたらjis。
  charset: utf8

  # 各行のヘッダのフォーマット。省略されたら'%H:%M'。
  header: %H:%M:%S

  # ファイル名のフォーマット。省略されたら'%Y.%m.%d.txt'
  filename: %Y.%m.%d.txt

  # ログファイルのモード(8進数)。省略されたら600
  mode: 600

  # ログディレクトリのモード(8進数)。省略されたら700
  dir-mode: 700

  # ログを取るコマンドを表すマスク。省略されたら記録出来るだけのコマンドを記録する。
  command: privmsg,join,part,kick,invite,mode,nick,quit,kill,topic,notice

  # PRIVMSGとNOTICEを記録する際に、自分の発言と他人の発言でフォーマットを変えるかどうか。1/0。デフォルトで1。
  distinguish-myself: 1

  # 各ログファイルを開きっぱなしにするかどうか。
  # このオプションは多くの場合、ディスクアクセスを抑えて効率良くログを保存しますが
  # ログを記録すべき全てのファイルを開いたままにするので、50や100のチャンネルを
  # 別々のファイルにログを取るような場合には使うべきではありません。
  # 万一 fd があふれた場合、クライアントから(またはサーバへ)接続できない・
  # 新たなモジュールをロードできない・ログが全然できないなどの症状が起こる可能性が
  # あります。limit の詳細については OS 等のドキュメントを参照してください。
  #keep-file-open: 1

  # keep-file-open 時に各行ごとに flush するかどうか。
  # open/close の負荷は気になるが、ログは失いたくない人向け。
  # keep-file-open が有効でないなら無視され(1になり)ます。
  #always-flush: 0

  # keep-file-openを有効にした場合、発言の度にログファイルに追記するのではなく
  # 一定の分量が溜まってから書き込まれる。そのため、ファイルを開いても
  # 最近の発言はまだ書き込まれていない可能性がある。
  # syncを設定すると、即座にログをディスクに書き込むためのコマンドが追加される。
  # 省略された場合はコマンドを追加しない。
  sync: sync

  # 各チャンネルの設定。チャンネル名の部分はマスクである。
  # 個人宛てに送られたPRIVMSGやNOTICEはチャンネル名"priv"として検索される。
  # 記述された順序で検索されるので、全てのチャンネルにマッチする"*"などは最後に書かなければならない。
  # 指定されたディレクトリが存在しなかったら、Log::Channelはそれを勝手に作る。
  # フォーマットは次の通り。
  # channel: <ディレクトリ名> (<チャンネル名> / 'priv')
  # 例:
  # filename: %Y.%m.%d.txt
  # channel: IRCDanwasitu #IRC談話室@ircnet
  # channel: others *
  # この例では、#IRC談話室@ircnetのログはIRCDanwasitu/%Y.%m.%d.txtに、
  # それ以外(privも含む)のログはothers/%Y.%m.%d.txtに保存される。
  # #(channel) はチャンネル名に展開される。
  # (古いバージョンだと展開されずにそのままディレクトリ名になってしまいます。)
  # IRCのチャンネル名は大文字小文字が区別されず、サーバからは各送信者が指定した通りの
  # チャンネル名が送られてきます。そのため、大文字小文字が区別されるファイルシステムでは
  # 同じチャンネルが別々のディレクトリに作られることになります。
  # この問題を回避するため、チャンネル名を小文字に統一した #(lc_channel) が利用できます。
  channel: priv priv
  channel: #(lc_channel) *
  #channel: others *

  # ファイル名のエンコーディング.
  # 指定可能な値は, utf8, sjis, euc, jis, ascii.
  # ascii は実際には utf8 と同等で8bit部分が全てquoted-printableされる.
  # デフォルトはWindowsではsjis, それ以外では utf8.
  #filename-encoding: utf8
}

- Log::ChannelList {
  # チャンネルリストをテンプレートに沿って HTML 化します。

  # list コマンドが実行された際に動作します。

  # 出力したいファイル名、ネットワーク名、使う設定のブロックを指定します。。
  networks: ircnet.html ircnet ircnet


  ircnet {
    # テンプレートファイルを指定します。
    template: channellist.html.tmpl

    # 出力とテンプレートファイルの文字コードを指定します。
    charset: euc

    # 取得を開始/終了した時刻のフォーマットを指定します。
    fetch-starttime: %Y年%m月%d日 %H時%M分(日本時間)
    fetch-endtime: %Y年%m月%d日 %H時%M分(日本時間)

    # 表示するチャンネルの mask を指定します。
    mask: *
    mask: -re:^\&(AUTH|SERVICES|LOCAL|HASH|SERVERS|NUMERICS|CHANNEL|KILLS|NOTICES|ERRORS)

    # 出力するファイルのモードを指定します。
    mode: 644
  }
}

- Log::Raw {
  # サーバとの生の通信を保存する

  # Log系のモジュールでは、以下のように日付や時刻の置換が行なわれる。
  # %% : %
  # %Y : 年(4桁)
  # %m : 月(2桁)
  # %d : 日(2桁)
  # %H : 時間(2桁)
  # %M : 分(2桁)
  # %S : 秒(2桁)

  # ログを保存するディレクトリ。Tiarraが起動した位置からの相対パス。~指定は使えない。
  directory: rawlog

  # 各行のヘッダのフォーマット。省略されたら'%H:%M'。
  header: %H:%M:%S

  # ファイル名のフォーマット。省略されたら'%Y.%m.%d.txt'
  filename: %Y-%m-%d.txt

  # ログファイルのモード(8進数)。省略されたら600
  mode: 600

  # ログディレクトリのモード(8進数)。省略されたら700
  dir-mode: 700

  # 使っている文字コードがよくわからなかったときの文字コード。省略されたらutf8。
  # たぶんこの指定が生きることはないと思いますが……。
  charset: jis

  # NumericReply の名前を解決して表示する(ちゃんとした dump では無くなります)
  resolve-numeric: 1

  # ログを取るコマンドを表すマスク。省略されたら記録出来るだけのコマンドを記録する。
  command: *,-ping,-pong

  # 各ログファイルを開きっぱなしにするかどうか。
  # このオプションは多くの場合、ディスクアクセスを抑えて効率良くログを保存しますが
  # ログを記録すべき全てのファイルを開いたままにするので、50や100のチャンネルを
  # 別々のファイルにログを取るような場合には使うべきではありません。
  # 万一 fd があふれた場合、クライアントから(またはサーバへ)接続できない・
  # 新たなモジュールをロードできない・ログが全然できないなどの症状が起こる可能性が
  # あります。limit の詳細については OS 等のドキュメントを参照してください。
  #keep-file-open: 1

  # keep-file-open 時に各行ごとに flush するかどうか。
  # open/close の負荷は気になるが、ログは失いたくない人向け。
  # keep-file-open が有効でないなら無視され(1になり)ます。
  #always-flush: 0

  # keep-file-openを有効にした場合、発言の度にログファイルに追記するのではなく
  # 一定の分量が溜まってから書き込まれる。そのため、ファイルを開いても
  # 最近の発言はまだ書き込まれていない可能性がある。
  # syncを設定すると、即座にログをディスクに書き込むためのコマンドが追加される。
  # 省略された場合はコマンドを追加しない。
  sync: sync

  # 各サーバの設定。サーバ名の部分はマスクである。
  # 記述された順序で検索されるので、全てのサーバにマッチする"*"などは最後に書かなければならない。
  # 指定されたディレクトリが存在しなかったら、勝手に作られる。
  # フォーマットは次の通り。
  # channel: <ディレクトリ名> <サーバ名マスク>
  # 例:
  # filename: %Y-%m-%d.txt
  # server: ircnet ircnet
  # server: others *
  # この例では、ircnetのログはircnet/%Y.%m.%d.txtに、
  # それ以外のログはothers/%Y.%m.%d.txtに保存される。
  server: ircnet ircnet
  server: others *
}

- Log::Recent {
  # クライアントを接続した時に、保存しておいた最近のメッセージを送る。

  # クライアントオプションの no-recent-logs が指定されていれば送信しません。

  # 各行のヘッダのフォーマット。省略されたら'%H:%M'。
  header: %H:%M:%S

  # ログをチャンネル毎に何行まで保存するか。省略されたら10。
  line: 15

  # PRIVMSGとNOTICEを記録する際に、自分の発言と他人の発言でフォーマットを変えるかどうか。1/0。デフォルトで1。
  distinguish-myself: 1

  # どのメッセージを保存するか。省略されたら保存可能な全てのメッセージを保存する。
  command: privmsg,notice,topic,join,part,quit,kill
}

+ Network::Freenode {
  # Freenode サポート

  # 現状では ChanServ の検出以外の機能はありません。
  # drop による状況の変化についてもサポートしていません。

  # Channel::Rejoin では、このモジュールによってチャンネルが
  # ChanServ の管理下にあると検出した時には Rejoin 動作を
  # 行わなくなります。

  # 設定はありません。
  # また、 freenode 以外のネットワークでこのモジュールが
  # 有効になっていても不都合はないはずです。
}

- Skeleton {
  # Skeleton for tiarra-module.

  # モジュールの説明をこのあたりに書く.
  # 詳細はこのソースみれば分かると思われ.
  # 書式は tiarra.conf にそのままコピーできる形式.

  # もにゅもにゅ
  mask: *!*@*
  mask: ...
}

+ System::Error {
  # サーバーからのERRORメッセージをNOTICEに埋め込む

  # これをoffにするとクライアントにERRORメッセージがそのまま送られます。
  # クライアントとの間ではERRORメッセージは主に切断警告に使われており、
  # そのまま流してしまうとクライアントが混乱する可能性があります。
  #   設定項目はありません。

  # このモジュールを回避してERRORメッセージをクライアントに送りたい場合は、
  # remarkのsend-error-as-is-to-clientを指定してください。
}

- System::LivePatch {
  # Live Patch.

  # main/* に対する実行時パッチ
  # 起動/ロード時に確認は行われるが, 実際の適用は指示があるまで行われない.

  # 対応している箇所.
  # ModuleManager / reload_modules_if_modified / r3004 => r8809
  # LinedINETSocket / connect / r3004 => r8930
  # Configuration::Block / equals / r3004 => r11868

  # /livepatch check で確認.
  # /livepatch apply で適用.
  command: livepatch
}

- 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::NotifyIcon::Win32 {
  # タスクトレイにアイコンを表示する。

  # タスクトレイにアイコンを表示します。
  # クリックすると表示非表示を切り替えることができ、右クリックすると
  # Reload と Exit ができるコンテキストメニューを表示します。
  # 多少反応が鈍いかもしれませんがちょっと待てば出てくると思います。

  # Win32::GUI を必要とします。
  # コンテキストメニューは表示している間処理をブロックしています。

  # Win32 イベントループを処理する最大間隔を指定します。
  #interval: 2

  # 通知領域に表示するアイコンを指定します。
  # Win32::GUI の制限でちゃんとしたアイコンファイルしか指定できません。
  iconfile: guiperl.ico

  # モジュールが読み込まれたときにコンソールウィンドウを隠すかどうかを
  # 指定します。
  hide-console-on-load: 1
}

+ System::Pong {
  # サーバーからのPINGメッセージに対し、自動的にPONGを返す。

  # これをoffにするとクライアントが自らPINGに応答せざるを得なくなりますが、
  # クライアントからのPONGメッセージはデフォルトのサーバーへ送られるので
  # デフォルト以外のサーバーからはPing Timeoutで落とされるなど
  # 全く良い事がありません。
  #   設定項目はありません。
}

+ System::PrivTranslator {
  # クライアントからの個人的なprivが相手に届かなくなる現象を回避する。

  # このモジュールは個人宛てのprivmsgの送信者のnickにネットワーク名を付加します。
  # また、最後に声をかけられてから5分以内の nick 変更をクライアントに伝えます。
  # 設定項目はありませんが、 networks/channel-network-separator を ! や @ 以外に
  # 変更することをおすすめします。
}

- System::Raw {
  # マスクで指定したサーバーにIRCメッセージを加工せずに直接送る。

  # 例えばQUITを送る事で一時的な切断が可能。

  # この機能を利用するためのコマンド名。デフォルトは「raw」。
  # 「/raw ircnet quit」のようにして使う。
  # 一つ目のパラメータは送り先のネットワーク名。ワイルドカード使用可能。
  # CHOCOA の場合、 raw がクライアントで使われてしまうので、
  # コマンド名を変えるか、 /raw raw ircnet quit のようにする必要がある。
  command: raw
}

+ System::Reload {
  # confファイルやモジュールの更新をリロードするコマンドを追加する。

  # リロードを実行するコマンド名。省略されるとコマンドを追加しません。
  # 例えば"load"を設定すると、"/load"と発言しようとした時にリロードを実行します。
  # この時コマンドはTiarraが握り潰すので、IRCプロトコル上で定義された
  # コマンド名を設定すべきではありません。
  command: load

  # command と同じですが、サーバにもブロードキャストします。
  #broadcast-command: load-all

  # confファイルをリロードしたときに通知します。
  # モジュールの設定が変更されていた場合は、ここでの設定にかかわらず、
  # モジュールごとに表示されます。1または省略された場合は通知します。
  conf-reloaded-notify: 1
}

- System::RemoteControl {
  # 特定の発言が送られてきたとき、それに反応してIRCコマンドを実行します。

  # 実行を許可する人間を表すマスク。
  #mask: *!*example@example.net

  # 構文: + <nick> <IRC Message>
  # <nick>は反応するbotのnickを表すマスク。
  # <Tiarra::IRC::Message>はサーバーに向けて発行するIRCメッセージ。
  #
  # 例:
  # + hoge NICK [hoge]
  # hogeというBOTが[hoge]にnickを変更する。
}

- System::Shutdown {
  # Tiarraを終了させる。

  # クライアントから特定のコマンドが実行された時や、
  # 誰かから個人的に(privで)特定の発言が送られた時に
  # Tiarra を終了させます。

  # 追加するコマンド。省略された場合はコマンドでのシャットダウンは無効になります。
  #command: shutdown

  # Tiarraをシャットダウンさせるprivの発言。
  # 省略された場合はprivでのシャットダウンは無効になります。
  # パラメータとして shutdown メッセージを指定できます。
  #message: shutdown

  # privでのシャットダウンを許可する人。
  # 省略された場合はprivでのシャットダウンは無効になります。
  # 複数のマスクを指定した場合は、一つでもマッチするものがあればシャットダウンします。
  #mask: example!example@*.example.jp
}

- System::WebClient {
  # ブラウザ上でログを見たり発言したりできます.

  # WebClient を起動させる場所の指定.
  bind-addr: 127.0.0.1
  bind-port: 8667
  path: /irc
  css: /irc/style/style.css
  # 上の設定をapacheでReverseProxyさせる場合, httpd.conf には次のように設定.
  #  ProxyPass        /irc/ http://localhost:8667/irc/
  #  ProxyPassReverse /irc/ http://localhost:8667/irc/
  #  <Location /irc/>
  #  ...
  #  </Location>

  # ReverseProxy 利用時の追加設定.
  # 接続元が全部プロキシサーバになっちゃうのでその対応.
  # ReverseProxy 使わず直接公開の場合は不要.
  #extract-forwarded-for: 127.0.0.1

  # 利用する接続設定の一覧.
  #
  # 空白区切りで評価する順に記述.
  # 使われる設定は,
  # - 接続元 IP が一致する物.
  # - user/passが送られてきていない(認証前/anonymous):
  #   - 認証不要の設定があればその設定を利用.
  #   - 認証不要の設定がなければ 401 Unauthorized.
  # - user/passが送られてきている.
  #   - 一致する設定を利用.
  #   - 一致する設定がなければ 401 Unauthorized.
  allow: private public

  # 許可する接続の設定.
  allow-private {
    # 接続元IPアドレスの制限.
    host: 127.0.0.1
    # 認証設定.
    # auth: <user> <pass>
    # auth: :basic <user> <pass>
    # auth: :softbank <端末ID>
    # auth: :softbank <UID>
    # auth: :au <SUBNO>
    # 各値(<pass>等)には {MD5}xxxx や {B}xxx や {CRYPT}xxx を利用可能.
    # そのままべた書きも出来るけれど.
    auth: :basic user pass
    # 公開するチャンネルの指定.
    mask: #*@*
    mask: *@*
  }
  allow-public {
    host: *
    auth: :basic user2 pass2
    mask: #公開チャンネル@ircnet
  }

  # デバッグフラグ.
  #debug: 0

  # 保存する最大行数.
  #max-lines: 100

  # クライアントモード.
  # owner か shared.
  # mode: owner

  # ログの方向.
  # asc (旧->新) か desc (新->旧).
  # sort-order: asc

  # name-default 設定は VERSION 0.05 で廃止されました.
  # # 発言BOXで名前指定しなかったときのデフォルトの名前.
  # # mode: shared の時に使われる.
  # -name-default: (noname)

  # 外部にTiarraさんを使っているときに, そこのネットワークを切り出して表示する.
  # exteact-network: <netname> <remote-sep>
  # <netname> ::= このTiarraさんから見たときの外部Tiarraさんのネットワーク名.
  #               (このtiarra.confで指定しているネットワーク名)
  # <remote-sep> ::= 外部Tiarraさんで使っているセパレータ.
  #                  (こっちはこのtiarra.confのではないです)
  #                  省略すると @ と仮定.
  #exteact-network: tiarra
  #exteact-network: tiarra @
}

- User::Away::Client {
  # クライアントが一つも接続されていない時にAWAYを設定します。

  # どのようなAWAYメッセージを設定するか。省略された場合はAWAYを設定しません。
  #away: 居ない。
}

- User::Away::Nick {
  # ニックネーム変更に応じて AWAY を設定します。

  # ニックネームを変更したときに、そのニックネームに対応するAWAYが
  # 設定されていれば、そのAWAYを設定します。そうでなければAWAYを取り消します。

  # 書式: <nickのマスク> <設定するAWAYメッセージ>
  #
  # nickをhoge_zzzに変更すると、「寝ている」というAWAYを設定する。
  # hoge_workまたはhoge_zzzに変更した場合は、「仕事中」というAWAYを設定する。
  # それ以外のnickに変更した場合はAWAYを取り消す。
  # 後者は正規表現を利用して「away: re:hoge_(work|zzz) 仕事中」としても良い。
  #away: hoge_zzz           寝ている
  #away: hoge_work,hoge_zzz 仕事中
}

- User::Filter {
  # 指定された人物からのPRIVMSGやNOTICEを書き換える。

  # 人物のマスクと、置換パターンを定義。
  # 置換パターン中の#(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.BY.USER.VANISH"がKICKを実行した事にする。
  drop-kick-by-target: 1

  # Vanish対象を対象とするKICKを消去するかどうか。デフォルトで0。
  drop-kick-for-target: 0

  # Vanish対象が発行したTOPICを消去するかどうか。デフォルトで0。
  # 本当に消すのでは無いが、他の設定と同じ。
  drop-topic-by-target: 1

  # チャンネルとVanish対象の定義。
  # 特定のチャンネルでのみ対象とする、といった事が可能。
  # また、privの場合は「#___priv___@ネットワーク名」という文字列をチャンネル名の代わりとしてマッチングを行なう。
  # 書式: mask: <チャンネルのマスク> <ユーザーのマスク>
  mask: #example@example  example!exapmle@example.com
}

