configuration

### 設定

plumの設定はplum.confというファイルで行います。 plum.confでモジュールの組み込み関する設定と、 モジュールのプロパティの設定を行います。 plum.confは普通のテキストで、1行につき1つの設定を書きます。 どんなに長くなっても、必ず1行に書いて下さい。 また「#」で始まる行はコメントです。
実際の設定例として、plum-default.confという設定ファイルが用意されています。 とりあえず動くかどうかを確認したい場合は、この設定ファイルを使って下さい。 この設定ファイルでは、pircとほぼ同じ動作をするように設定してあります。 plum-default.confを使ってplumを実行するためには、

        perl plum default

のように実行して下さい。これで動くことが確認できたら、 このファイルを少しずつ変更していくのがいいと思います。

### モジュール

モジュールの組み込みに関する設定には以下のものがあります。

+ dir/module.plm
  dir/module.plmというモジュールを組み込みます。
= dir/module.plm
  dir/module.plmというモジュールを読み込みます。 モジュールの初期化は行われますが、組み込みは行われません。
- dir/module.plm
  モジュールの組み込みは行いません。

モジュールは前に書いてあるものから順に組み込まれます。 モジュールを組み込む順番によって、多少動作が変わるので注意して下さい。 同じモジュールに関して異なった設定を行った場合は、 最後の設定が有効になります。

### プロパティ

プロパティの設定は以下のような形式で指定します。

dir.module.key: value
  dir/module.plmというモジュールの、 keyというプロパティをvalueという値にします。 valueには数字でも文字列でもそのまま指定します。

同じプロパティを複数設定できるものとできないものがあります。 複数設定できないプロパティを複数設定した場合は、 最初に設定したものが有効になります。

### plumのプロパティ

plum自身のプロパティには以下のものがあります。 各モジュールで設定できるプロパティは それぞれのモジュールのドキュメントを参照して下さい。

plum.kanji* ({jis|euc|sjis})
  plum.confがどの漢字コードで書かれているかを指定します。 plum.confがJISで書かれているなら「jis」、 EUCで書かれているなら「euc」、 SJISで書かれているなら「sjis」をそれぞれ指定して下さい。 また、「jis」は別の漢字コードと組み合わせることができ、 「jis,euc」や、「jis,sjis」と指定すれば、 どちらの漢字コードで書かれていても正しく認識します。 plumをUNIXで実行するなら「jis,euc」、 WindowsやMacintoshで実行するなら「jis,sjis」と指定しておけば おそらく問題ないと思います。
plum.nick ニックネーム
  IRCでのニックネームを指定します。 ニックネームは9文字以内で、アルファベット、 数字と一部の記号が使用できます。漢字やカタカナは使用できません。 デフォルトではログイン名を使用します。
plum.user ユーザ名
  ニックネームとは別に、実際のユーザ名を指定します。 普通はログイン名を設定するようにして下さい。 デフォルトではログイン名を使用します。
plum.name 実名
  ユーザの実名を指定します。自分の名前を自由に設定できます。 ニックネームやユーザ名とは違って漢字なども使用できます。 文字数の制限はありませんが、 長くても20文字程度にしておいたほうがいいと思います。
plum.server* サーバ名[:(ポート番号)] [パスワード]
  接続するサーバを指定します。 サーバ名にはIPアドレスを指定することもできます。 ポート番号を複数指定した場合は、 接続のたびにその中の1つがランダムで選択されます。
plum.client* クライアントマスク[:ポート番号] [パスワード]
  接続を許可するクライアントを指定します。 クライアントマスクにマッチするマシンからの接続のみを許可します。 クライアントマスクには「*」と「?」の 2種類のワイルドカードが使用できます。 「*」は任意の長さの文字列とマッチし、 「?」は任意の一文字とマッチします。
plum.directory* ディレクトリ
  モジュールの存在するディレクトリを指定します。 ここで指定したディレクトリは、デフォルトでモジュールを探す ディレクトリよりも優先されます。

プロパティ名の最後に「*」がついているものは、 同じプロパティを複数指定することができます。 プロパティ名に「*」は含まれないので注意して下さい。 また、プロパティの値の見方は以下のようになっています。

value
  valueをそのまま指定します。
値
  「値」そのものではなく、相当する値を指定します。
[value]
  valueは省略することができます。
{value1|value2|value3}
  「|」で区切られたうちのどれか1つを指定します。
(value)
  value1,value2,value3のように「,」で区切って複数指定できます。

これ以外の記号は、空白も含めてそのまま指定して下さい。

### 日付・時間のフォーマット

モジュールの中にはプロパティに日付や時間のフォーマットを 指定できるものがあります。 これらは「%」とそれに続くアルファベット1文字という形式で指定し、 それぞれ以下のように展開されます。

%%
  「%」
%Y
  年 (1970〜)
%y
  年の下2桁 (00〜99)
%m
  月 (01〜12)
%b
  月 (Jan〜Dec)
%d
  日 (01〜31)
%j
  日 (001〜366)
%w
  曜日 (0〜6)
%a
  曜日 (Sun〜Sat)
%H
  時間 (00〜23)
%p
  午前、午後 (AM,PM)
%I
  時間 (01〜12)
%k
  時間 ( 0〜23)
%l
  時間 ( 1〜12)
%M
  分 (00〜59)
%S
  秒 (00〜61)
%{+|-}秒数o
  時刻を指定された秒数だけ進める
%{+|-}時間O
  時刻を指定された時間だけ進める

### 文字列展開のフォーマット

モジュールのいくつかには文字列のフォーマットを指定することが できるものがあります。これらのフォーマットは以下のような 形式で指定します。

#(name)
  nameで表される値で置き換えます。値が定義されていなければ 空文字列で置き換えます。
#(name1|name2)
  name1で表される値が定義されていれば、その値で置き換えます。 また、name1で表される値が定義されておらず、name2で表される 値が定義されていれば、その値で置き換えます。 どちらも定義されていなければ空文字列で置き換えます。
#(name;%sさん)
  nameで表される値を「%sさん」という形式で置き換えます。 この形式はprintfで利用できるものです。 nameで表される値が定義されていなければ空文字列で置き換えます。
#(name1,name2)
  name1で表される値とname2で表される値の両方が定義されていれば、 それらの値を並べたもので置き換えます。どちらか片方でも 定義されていなければ空文字列で置き換えます。
#(name1;%sさま|name2;%sさん)
  name1で表される値が定義されていれば、その値を「%sさま」という 形式で置き換えます。name1で表すされる値が定義されておらず、 name2で表される値が定義されていれば、その値を「%sさん」という 形式で置き換えます。どちらも定義されていなければ 空文字列で置き換えます。
#(name1,name2|name1|name2)
  name1で表される値とname2で表される値の両方が定義されていれば、 それらの値を並べたもので置き換えます。また、name1で表される 値かname2で表される値のどちらかが定義されていればその値で 置き換えます。どちらも定義されていなければ空文字列で置き換えます。
#(name1,name2;%sの%sさん)
  name1で表される値とname2で表される値の両方が定義されていれば、 それらの値を「%sの%sさん」という形式で置き換えます。 どちらか片方でも定義されていなければ、空文字列で置き換えます。
#(name1,name2;%sの%sさん|name2;%sさん)
  name1で表される値とname2で表される値の両方が定義されていれば、 それらの値を「%sの%sさん」という形式で置き換えます。 name2で表される値だけが定義されていれば、その値を「%sさん」という 形式で置き換えます。それ以外の場合は空文字列で置き換えます。
#(name|;名前不明)
  nameで表される値が定義されていればその値で置き換えます。 定義されていなければ、「名前不明」で置き換えられます。