イタズラ防止というか、任意のキーワードに引っ掛かったかどうかをチェックして
それが一定のレベル繰り返された場合に自動的に外(任意のURL)に蹴り出す
方法です。
言葉に反応してパラメーターを溜めて、それに依って機能を発動させようという
予定の試作第一号なのでまだパラメーターもひとつしかありません。
まだCGI勉強途中でよくわかってないので、だれか興味ある人がいたら余分な
所とかヘボヘボな所をなおして機能的なモジュールにしてほしいです (^^;


(0)先ず、別途 emo.dat という名のファイルを(ここでは)用意します。 
  ファイルの中身には半角で" 0 "とだけ書いてください。(改行)
  次にdic_hit.datとdic_nul.datという辞書ファイル()を用意します。
  dic_hit.datには キー:返答 という通常の書式で、キーに、放り出しに
     したい言葉を設定し他モノを用意します。返答では、あまりこのキーに
     引っ掛かってると放り出すぞ!ってな内容を用意しておきましょう。
  dicnul.datはこのチェックを素通りさせる為のダミーです。空で構いません。


以下、bot.cgiへの記入です。

(1)初期設定の部分に以下の一行を追加します。

##########初期設定##################################
$emotion = './emo.dat'; #このファイル名のファイルを用意


(2)"sub dic { "の一番あたま(最初の辞書読み込みの前)に
 以下を追加。

#----------------ここから-----------------------------
$rand_limit = 100 ;
srand(time | $$) ;		# 乱数の初期化
$x = int(rand(1) * $rand_limit) + 1 ;
#蹴り出しルーチン
#常に引っかけたい時はチェック用語辞書を100%に設定する。
#この部分には以前にMLにアップしたランダムで複数の辞書を
#管理する方法をそのままつかってます。
	if(($x >= 1) && ($x < 51)){$dic_number = _hit ;} #チェック辞書
	if($x >= 51){$dic_number = _nul ;} #dic9.datは空のダミー辞書
	$selected_file = "./dic$dic_number.dat" ;
        if (!open(handle_dicx,$selected_file)) {
                $chat_tanu = "Dictionary file $selected_file cannot open.";
        } else { 
                @dic1=<handle_dicx>;
                close(handle_dicx);
                foreach (@dic1) {
                        chop;
                        ($in,$out)=split(/:/);
                        if ($chat =~ /$in/) {
                                push(@NEW1,$_);
                        }                                    
                }                                            
                if (@NEW1) {
&get_emotion;
#パラメーターの最高値を10に設定。
if(($c_anger >= 0) && ($c_anger < 10)){&plus_anger; &set_emotion;} 
if ($c_anger >= 10) { 
	($in,$out) = split(/:/,splice(@NEW1, rand @NEW1, 1));	
	$out =~ s/c_name/$name/g;
            $chat_tanu = "$out";
   open(DB,"$chat_file") || die "Open error!\n";
   @ines = <DB>;
   close(DB);
print <<"EOF";
#------------この部分に出力するHTMLを書く----------------
<HTML>
<HRAD>
<title>放り出されました!</title>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://飛ばしたい先の URL ">
</HEAD>
<BODY>
怒って放り出されました!
</BODY>
</HTML>
#------------------HTML部分ここまで----------------------
EOF
&zero_anger;
exit(0);
}
} else {&min_anger;
#---------------ここまで--------------------------------------


(3)で、"sub dic{ "のルーチンの最後に"}"を二つ追加して閉じます。
 場所は↓これ参照。

}}}	<-ここに2つ追加
#書き込み処理
sub write {



(4)以下を最後の行「exit(0);」の上に追加。

#-------------ここから---------------------------------------
sub get_emotion {
    if(!open(GET, "$emotion")) { &open_error; }
      @data = <GET>;
    close(GET);
    $c_anger     = $data[0];  $c_anger   =~ s/\n//g;   $c_anger   =~ s/\r//g;
}

sub set_emotion {
	open(IN,">$emotion");
	print IN "$c_anger\n";
	close(IN);
}

sub plus_anger{
&get_emotion;
if ($c_anger < 10){$c_anger += 3; #引っ掛かったらパラメーター+3
}else{
$c_anger = 10; #最大10まで
}
&set_emotion;
}

sub min_anger{
&get_emotion;
if ($c_anger > 0){$c_anger -= 1; #引っ掛からなかったらパラメーター-1
}else{
$c_anger = 0; #最低0まで
}
&set_emotion;
}

sub zero_anger{
&get_emotion;
$c_anger = 0; #爆発させたらパラメーターも0に戻る
&set_emotion;
}
#------------------ここまで------------------------------


放り出しの判定のバランス調節は、放り出しキーワードの入った辞書の選択率と、
キーワードに引っ掛かった場合にどれだけの割でパラメーターを増やし、
外れた場合にどれだけの割合で減らすか、およびパラメーターの最大値
を幾つにするかのバランスで調節してください。

ランダムジャンプのCGIとかを組み込めば予め登録した場所にランダムで
飛ばすのも出来ますよね。


#間違いその他苦情はワタシに御願いします。でも、勉強不足で
  余り力になれない可能性大ですが(^^;


.