MSN@寄せ辺β 仮復帰
学習機能オフでとりあえず、仮復帰。
α版の頃の会話内容を、β版の学習機能を使って再学習させてあります。
Perl MSNモジュールは(・∀・)イイ!!Memo:【Perl】MSN Messengerプログラミング を参考にしました。
以下一部ソース晒し
#!/usr/local/bin/perl package main; use strict; use warnings; use Encode qw/encode decode/; use Encode::EUCJPMS; use lib qw('ユーザLib領域'); use MSN; use JN::MSN; #MSN@寄せ辺 コアモジュール $| = 1; #寄せ辺設定取得 my $JNM_obj = JN::MSN->new(); #DB設定 $JNM_obj->set_MyDB(); $JNM_obj->DB_connect(); #MSN接続設定〜接続 my $msn = MSN->new(Handle => 'メッセンジャーID', Password => 'パスワード' ); $msn->setHandler('Message' => \&handler_message); $msn->setHandler('Connected' => \&Connected); $msn->connect(); my $run = 1; #接続時の表示名、画像、文字色の指定 sub Connected{ $msn->setName("寄せなべりん"); $msn->setDisplayPicture('/path/to/hogehoge.png'); $msn->setMessageStyle( Color => "053679"); } while($run) { $msn->do_one_loop(); } exit(0); #/話しかけられた時の対応 sub handler_message { my ($self, $username, $name, $message) = @_; my $now = time; #6時間連続稼動時に再起動 &restart () if $now - $start_time > 3600 * 6; my @t = localtime($now); my $yyyymmdd_24hmiss = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $t[5] + 1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]); #my $sleeping = $JNM_obj->get_SleepFlg()||0; return if(!defined $message or $message eq '' or common::trim($message) eq '');#空行はなにもしない #trim $message =~ s/^\s+//; $message =~ s/\s+$//; {#文字コード変換 Encode::from_to($message, "utf8", "eucJP-ms"); Encode::from_to($name, "utf8", "eucJP-ms"); $message =~ s/\s//; } # my $responce = ""; #JosseNabe mainLogic $responce = $JNM_obj->do_action($message);#コア部、ユーザの発言をごにょごにょ人工無能っぽいことして、発言内容を決める(メソッド名は適当です) {#回答を取得 $responce =~ s/\s//; $responce = 'none' if($responce eq $message and int(rand(50)) != 1);#ユーザの発言とJNの回答が一致したら、高い確率で返信しない。 eval{ $responce =~ s/$message// if($responce =~ /$message/ and int(rand(5)) == 1);#JNの回答にユーザの発言含まれていたら、時々重複部分を削除する。 }; } if($responce ne 'none'){#実際の返答 Encode::from_to($responce, "eucJP-ms", "utf8"); $self->sendMessage($responce) if($responce ne 'none'); } }
人工無能っぽいことしているところと、
自動再起動とかの、一部制御部分は割愛しています。
あと、寄せ辺DBがeuc-jpで、MSN Messengerのデータがutf-8なので、ソースコード中で文字コード変更しています。ソースファイル自体はutf-8です。