読者です 読者をやめる 読者になる 読者になる

NeverBlog::Likk::Unexistable;

見なかったことにして下さい

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です。