Kデスクトップ環境

5.2. フック

.sircrc.plからと同様に、/load'edスクリプトから、指定されたイベントが発生する際コールされるsubsを定義することができます。これはircIIの/on'sと同等です。

フックを宣言するには、"hook_somename"と 呼ばれるサブルーチンを定義しなければなりません。これは"hook_type"タイプのフックがトリガーされる際に望むこ とは何でも実行し、&addhook("hook_type", "somename");をコールします。

フックを削除するには&remhook("hook_type", "somename");をコールし ます。

全て3桁で数なので、数字フックもまた利用することができます。それらのう ちの一つを宣言するには、"hook_somename"と 呼ばれるサブルーチンを定義します。このは、希望に添って行い、&addhook("xxx", "somename")をコールします。 xxxは、数字フックの返答数値です。

フックからコールされるSubsは、機能面で上記にリストされた同関数や変数、さらにいくつかの特別なもの(適用されるところならどこにでも)にアクセスします。

 $who		は、フックをトリガーしたニックです
 $user           は、ユーザ名に対応します
 $host		は、ホスト名に対応します

また、イベント用にディスプレイを(&printを使って)提供し、デフォルトを禁止しようとする場合、フックは変数$silentをセットすることもできます。これは、"raw_irc"の他は、ircII/on's"^"スィッチと直接的に同等です。

*マークが付いているフックは、特別な変数 $skipも設定し、クライアンによって行を無視させることができます。一般的にこれはよくない考えです。ですからできる限り$silentを使ってください。これは、実際付随的ないくつかの機能を提供するフックのみ持ちうる可能性です。"raw_irc"については、ircIIの/on raw_irc上の"^"スイッチと同等です。

次のフックが有効で、以下の引数でコールされます。

 action		ctcpアクションによって起動されます。
 		第1 argは送られるだろうニックもしくはチャンネルです。
 		第2 argはメッセージです。
 
 command	     *	コマンド入力するユーザよって起動されます。(/commandで
 		あるかテキストの一行であるかには関係しません。)
 		第1 argはユーザの行です。
 		このフックは、("print"や"status"のように)特別で、
                 これは、コマンドが解釈する内容を変えるために
                 その引数($_[0])を修正できます。
 		フックに$skip=1をセットすると、sircは
                 コマンドを無視します。
 
 chat_disconnect	dccチャットが消えた時起動します。(ユーザーがDCC CLOCE CHATを
 		使って閉じた場合は別です。)
 		第1 argはチャットと関連するニックです。
 
 ctcp	     *	あらゆるctcpで起動します。つまりクライアントが解釈する前で
                 結果としてctcpに答えます。
 		第1 argは送られるだろうニックやチャンネルです。
 		第2 argはctcpコマンドです。
 		第3 argは引数です。
 
 ctcp_reply	ctcpの応答で起動します。
 		第1 argは送られるだろニックもしくはチャンネルです。
 		第2 argはctcpコマンドです。
 		第3 argは引数です。
 
 dcc_chat	dccチャットで受信されたテキストによって起動します。
 		第1 argはニックです。
 		第2 argはテキストです。
 
 
 dcc_disconnect	dcc getやdcc sendが終了、または閉じた時実行します。
 		(ユーザーがDCC CLOSE GET/SENDを使って閉じた場合も含まれます。)
 		第1 argはチャットと関連するニックです。
 		第2 argはファイル名です。
 		第3 argは転送したバイト数です。
 		第4 argは転送に要した秒数です。
 
 dcc_request	受け取られるdccチャットや送信リクエストで起動します。
 		これはクライアントがリクエストを処理した後です。
 		あらゆる種類のauto-dccを実装したい場合に用いられるフックです。
 		第1 argはタイプ("CHAT" または "SEND")です。
 		第2 argはマシンアドレス(32ビット整数)です。
 		第3 argはポートです。
 		SENDが提供するDCC用に:
 		  第4 argはファイル名です。
 		  第5 argはファイルの長さです。
 
 disconnect	サーバへの接続を失ったり、/disconnectを使って中断すると
                 起動します。(/serverを使った際は別です。)
 		引数は渡されません。
 
 input	     *	クライアントがユーザに&getuserlineを使って一行用ユーザ
                 を必要とする際常に起動します。(つまり切断したり、
                 新しいニックを必要としたり、あるスクリプトが&getuserline
 		をコールしたときです。)
 		第1 argは"long"プロンプトです。
 		第2 argは"short"プロンプトです。
 		フックが$skipを設定している場合、&getuserlineは
                 ユーザになにも要求せず、$_の内容が返されます。
 
 invite		招待によって起動します。
 		第1 argは招待されたチャンネルです。
 
 join		参加によって起動します。
 		第1 argは$whoが参加しているチャンネルです。
 
 kick		キックによって起動します。
 		第1 argはキックされた人のニックです。
 		第2 argはキックアウトされたチャンネルです。
 		第3 argは理由です。
 
 leave		partsによって起動します。
 		第1 argは$whoが残っっているチャンネルです。
 
 mode		モードの変更によって起動します。
 		第1 argはチャンネルまたは変更が当てはまるユーザです。
 		第2 argはそれ自体モード変更です。
 
 msg		msgsによって起動します。
 		第1 argはメッセージです。
 
 nick		ニックを変更で起動します。
 		第1 argは$whoの新しいニックです。
 
 notice		通知によって起動します。
 		第1 argは送られるだろうニックやチャンネルです。
 		第2 argはメッセージです。
 
 server_notice	サーバからの通知で起動します。
 		第1 argは送られるだろうニックやチャンネルです。
 		第2 argはメッセージです。
 
 notify_signon	signon通知によって起動します。
 		第1 argはニックです。
 		$userや$hostは、意味あることは何も設定されません。
 
 notify_signoff	signoff通知によって起動します。
 		第1 argはニックです。
 		$userや$hostは、意味あることは何も設定されません。
 
 print	     *	画面にある行を表示すると起動します。
 		第1 argは出力される行です。
 		このフックは("status"や"command"のように)特別です。
 		出力される行の内容を変更するために引数($_[0])を
 		修正できます。
 		フックを$skip=1に設定すると、実際の出力は行われなく
 		なります。
 
 public		チャンネルへのnon-ctcpメッセージによって起動します。
 		第1 argはチャンネルです。
 		第2 argはメッセージです。
 
 raw_irc	     *	サーバラインによって起動します。
 		$who	は発信元(ユーザもしくはサーバ)です。
 		$user	はその人の名前です。(それがサーバからの場合は''です。)
 		$host	はその人のホスト名です。(上述と同様。)
 		第1 argはコマンドです。
 		第2 argは引数です。
 
 send_action	/meまたは/deを送ると起動します。
 		($who、$user、$hostはここでは適用しません。)
 		第1 argはニック/チャンネルです。
 		第2 argはアクションです。
 
 send_ctcp	ctcpを送ると起動します。
 		第1 argはctcpが送られているニックもしくはチャンネルです。
 		第2 argは完全なctcpテキストです。(タイプと引数)
 
 send_dcc_chat	dccチャットでテキストを送信すると起動します。
 		($who、$user、$hostはここでは適用されません。)
 		第1 argは送っているニックです。
 		第2 argはテキストです。
 
 send_text	/msgを送ったり、チャンネルで話したりすると起動します。
 		($who、$user、$hostはここでは適用されません。)
 		第1 argはニック/チャンネルです。
 		第2 argはmsgです。
 
 send_notice	通知を送ると起動します。
 		($who、$user、$hostはここでは適用されません)
 		第1 argはニック/チャンネルです。
 		第2 argは通知です。
 
 signoff		誰かが終了すると起動します。
 		第1 argは終了コメントです。
 
 status		sircが状況表示行を書き直すと起動します。(&dostatusが
 		コールされた結果のように、内部またはスクリプトのどちらかに
 		よってです。)
 		第1 argは指定した状況表示行です。
                 このフックは("print"や"command"のように)特別です。
                 状況表示行の内容を変更するために引数($_[0])を
                 修正できます。
 
 topic		誰かがトピックを変更すると起動します。
 		第1 argはチャンネルです。
 		第2 argは新しいトピックです。
 
 <3-digit nb>  * 特定のサーバの数値応答によって起動ます。
 		      第1 argはサーバが数値後に送り、解釈されなかったことです。
 		      (これは最後の引数の前に:がまだあるということです。)
 

例はファイルに入れられ、キックされたチャンネルに再加入するフックの /load'edディレクトリです。

 # auto-rejoin hook (自動再加入フック)
 
 sub hook_kicked {
   local($kicked, $where_from, $reason)=@_;
   					# argを用いたローカル vars
   if (&eq($kicked, $nick)) {		# キックされたら
     &sl("JOIN $where_from");		# JOIN をサーバに送信
   }
 }
 &addhook("kick", "kicked");	  	# フックの起動

その他の例としては、各々のメッセージでユーザ名やホスト名を表示す るためのものがあります。(/set printuhでよく行れます。)

 # userhost-on message hook
 
 sub hook_uhmsg {
   &tell("[\cb${who}!${user}\@${host}\cb] $_[0]");  # 全表示
   $silent=1;			# デフォルト画面の禁止
 }
 &addhook("msg", "uhmsg");	  	# フックの起動