package auto_answer; $_ = 'auto_answer';これで初期化部分は完成です。これだけでは何もしませんが、 plumにモジュールとして組み込むことも可能です。
package auto_answer; $_ = 'auto_answer'; sub ss_privmsg { local($serverno, $prefix, $cmd, $chan, $msg) = @_; # まだ作ってない部分 return ($prefix, $cmd, $chan, $msg); }サブルーチンの引数として渡されるものは、サーバのファイルNO、 発言者のプレフィクス、コマンド、発言したチャンネル、メッセージの5つです。 戻り値として返すものは後ろの4つです。
次に、発言がプロパティで指定されたものかどうかを調べる部分を作ります。 プロパティ名は「auto.answer.reply」にしたので、 その値と発言が等しいかどうかを調べます。 また、プロパティは複数設定できるようにしたので、 1つの発言についてすべてのプロパティとの比較が必要になります。
package auto_answer; $_ = 'auto_answer'; sub ss_privmsg { local($serverno, $prefix, $cmd, $chan, $msg) = @_; local($userno); $userno = $'userno[$serverno]; foreach $reply (&'property($userno, 'reply')) { # まだ作ってない部分 } return ($prefix, $cmd, $chan, $msg); }&'propertyは引数としてユーザNOが必要なので、$'userno[]という配列変数で この発言がどのユーザに属するものかを調べています。 また、サブルーチン内で使用する変数は必ずlocalを作って、 他のサブルーチンから見えないようにして下さい。
プロパティは空白で区切って、発言とそれに対する返事を書くようにしました。 そこで、それぞれのプロパティを空白で区切って、 発言と一致するかどうかを比較します。
package auto_answer; $_ = 'auto_answer'; sub ss_privmsg { local($serverno, $prefix, $cmd, $chan, $msg) = @_; local($userno, $str, $answer); $userno = $'userno[$serverno]; foreach $reply (&'property($userno, 'reply')) { ($str, $answer) = split(/\s+/, $reply, 2); if ($msg eq $str) { # まだ作ってない部分 } } return ($prefix, $cmd, $chan, $msg); }
ここまで来ればあと少しです。あとは対応する返事をするだけです。 返事は発言のあったチャンネルにすればいいのですが、 少し問題があって、自分あてのプライベートな発言の場合は、 $chanにはチャンネル名の変わりに自分のニックネームが入っています。 そこで、発言がチャンネルに対してのものなのか、 自分に対するものなのかを区別する必要があります。 チャンネル名は頭に必ず「#」、「&」、「+」、「-」のどれかがつくので、 そうでないものは無視します。
package auto_answer; $_ = 'auto_answer'; sub ss_privmsg { local($serverno, $prefix, $cmd, $chan, $msg) = @_; local($userno, $str, $answer); $userno = $'userno[$serverno]; if ($chan =~ /^[\#\&\+\-]/) { foreach $reply (&'property($userno, 'reply')) { ($str, $answer) = split(/\s+/, $reply, 2); if ($msg eq $str) { &'s_print($serverno, '', 'PRIVMSG', $chan, $answer); last; } } } return ($prefix, $cmd, $chan, $msg); }返事はサーバに対して行わなければなりません。 この場合は発言がされたサーバがわかっているので、 返事もそのサーバに対して行います。
これでとりあえず完成です。このモジュールを使用するためには plum.confに以下のように設定します。
+ auto/answer.plm auto.answer.reply: こんにちは こんにちは〜☆これで誰かが「こんにちは」と発言すると、「こんにちは〜☆」と返事をします。
auto/answer.plmというファイルはすでに存在していますが、 このモジュールは実際にこのチュートリアルを書きながら作ったものです。 ここで作ったものより多少機能が増えていますが、 ある程度わかってしまえばモジュールの改造も簡単です。