#! /usr/local/bin/perl ############################################# # Script written by Web新撰組 # # Created on: 96年12月30日 # # E-MAIL catwal@qa2.so-net.or.jp # #saport http://www.web-shinsengumi.com/ # ############################################# require './jcode.pl'; #####初期設定##### ############### $chat_file = 'dic.dat'; $tanu = "人工無能"; $title = '人工無能に言葉を教えて!'; $play = 'bot.cgi'; # ウインドウの最大。 $max = '10000'; #####初期設定##### ############### #####日時処理##### ############### ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } $month = ($mon + 1); $y0="日"; $y1="月"; $y2="火"; $y3="水"; $y4="木"; $y5="金"; $y6="土"; $youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6) [$wday]; $date_now = "$month月$mday日($youbi)$hour時$min分$sec秒"; #####日時処理##### ############### if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } if ($buffer eq "") { &html; } else { &an_r; if ($res eq "") { &html; } else { &an_w; &html; } } sub html { open(DB,"$chat_file") || die "error!\n"; @ines = ; close(DB); # CGIで出力されたデータをHTMLとして認識させる場合のヘッダ出力 print "Content-type: text/html\n\n"; print <<"EOF"; $title $title
 


お喋りをしに戻る


あなたのセンス良い登録をお待ちしております。

キーワードに教えたい項目を、
返事にキーワードに対する返事を入力して下さい。



キーワード(例:ピカチュウ)


返事(例:わしゃロボットじゃ!悪いか!)

EOF if ($kw ne "") { print "$kwに対する返事を、
$resと記憶しました。

\n"; } #HTML出力 foreach $line (@ines) { ($kw,$res) = split(/ \^: /,$line); $kw =~ s//>/g; $kw =~ s/"/"/g; $res =~ s//>/g; #$res =~ s/"/"/g; $res =~ s/img//ig; $res =~ s/imag//ig; $res =~ s/input//ig; $res =~ s/form//ig; $res =~ s/foformrm//ig; $res =~ s/script//ig; $res =~ s//form//ig; $res =~ s/applet//ig; $res =~ s/table//ig; $res =~ s/select//ig; $res =~ tr/+/ /; } print "(c)Web新撰組\n"; print "\n"; } sub an_r { @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\n//g; $value =~ s/^//g; &jcode'convert(*value,'euc'); $FORM{$name} = $value; } $kw = $FORM{'keyword'}; $res = $FORM{'response'}; } sub an_w { # c_nameはキーワードに入れるんじゃないよ &on_error('キーワードにc_nameを登録する事は無意味です。c_nameは、返事の方に半角小文字で記入して下さい。') if($kw =~ m/\c_name/ || $kw =~ m/\c_name/ || $kw =~ m/\C_NAME/ || $kw =~ m/\C_NAME/); # c_nameは半角小文字で登録してくれよ &on_error('c_nameは、半角小文字で記入して下さい。') if($res =~ m/\c_name/ || $res =~ m/\C_NAME/ || $res =~ m/\C_NAME/); # キーワード短すぎだよ &on_error('キーワードが短かすぎるので登録しませんでした。3文字より短いキーワードは不必要なヒットが多くなるため受け付けません。') if (length($kw) < 6); # おいおい。お返事カラだよ &on_error('返事が空白のままです。') if ($res eq ''); # 変な文字入れるなよ &on_error('キーワードの中に、スラッシュや括弧などの半角の記号類が含まれていたので登録しませんでした。') if ($kw =~ m/[\{\}\=\&\@\~\>\<\#\%\"\'\`\(\)\[\]\\\/\:\;\_\,]/); # わかってないなら正規表現使うなよ &on_error('^$は、使用する事は出来ません!!') if ($kw =~ m/\$.+/ || $kw =~ m/[^\^]+\^/); close (DATA); if (!open(DB,"$chat_file")) { &error(0); } @lines = ; close(DB); # 記録件数処理 $i = 0; foreach $line (@lines) { $i++; if ($i == $max) { last; } push(@new,$line); } $value = "$kw\:$res\n"; unshift(@new,$value); # 記録ファイルを上書きオープンして、配列<@new>を書き出す if (!open(DB,">$chat_file")) { &error(0); } print DB @new; close(DB); } # 渡されたエラーメッセージを表示して、終了するルーチン sub on_error { local($message) = @_; print< ERROR!! $message


ブラウザのBACKで戻ってください。 END exit(1); }