bellum on ボットをつくろう!! 2
概要
前回 「bellum on ボットをつくろう!!」で作ったボットの返答が即答(さすがリアルタイムすごいはやいです)であったため、少し遅くなるようにしてみた。まぁ今回は async の処理を追加して終わりなのだけどね
準備
今回は、async モジュールを使用しております。ので npm で取得しましょうnpm install async npm install socket.io-client
ソースコード
bot2.js
今回も前回と同様に http://www.risdy.net/ を対象にボットを稼働させておりますので bellum をインストールなされたお方は動作のご確認にでもご使用ください。
bot2.js
"use strict";
/*
* ボットの性能を向上させるのです!
* 2014 / 9 / 27
* jskny
*/
var async = require('async');
var io = require('socket.io-client');
var jsSHA = require("./sha512");
// サーバーのアドレス
var SERVER_URL = "http://bellum-server.herokuapp.com/";
// このアドレスのルームとして接続する。
var ATTACK_URL = process.argv[2]; // 「node bot1.js www.risdy.net/」 で動く
var g_sock = Connect();
setInterval(Kasikoi, 10000);
console.log("Bot running.");
//----------------------------------------------------------
function Connect()
{
var socket = io.connect(SERVER_URL);
// サーバーへつながったよ
socket.on("connect", function() {
// 入室する部屋番号とか送信する
// セキュリティーとか問題になっているからサーバーに送るアドレスはハッシュ化しておく。
var url = ATTACK_URL;
url = (new jsSHA(url,'ASCII')).getHash('SHA-512','HEX');
// 初期化コマンド送信
socket.json.emit("init", { "room": url });
});
// サーバーから切断された
socket.on("disconnect", function(client) {
});
// メッセージ受信
socket.on("S_to_C_message", function(data) {
// 定型文応対
var retStr = "[BOT2]";
if (data.value == "こんにちは") { retStr += "こんにちは~(=_=)"; }
if (data.value == "おはよう") { retStr += "おはよう~(+_+)"; }
if (data.value == "おやすみ") { retStr += "おやすみ~(@_@)"; }
if (data.value == "しんちょく") { retStr += "(・_・)?"; }
if (data.value == "進捗") { retStr += "(・△・)ア?"; }
if (retStr.length <= 6) {
// 反応しなくても良い場合
return;
}
async.waterfall([
function (callback) {
// とりあえず、待ち時間を求める
// 送信してきた一文字につき 400 ミリ秒待つ。
setTimeout(function() { callback(null); }, 400 * data.value.length)
},
function (callback) {
socket.json.emit("C_to_S_broadcast", {value:retStr});
callback(null);
}
], function (err, result) {
if (err) {
console.log("[ERROR]\t" + err);
return;
}
// console.log("waterfall all done. : " + result);
});
return;
});
return (socket);
}
var g_counter = 0;
function Kasikoi()
{
// ついでに破壊する
var mesgs = [
"[BOT2]ひまーーー",
"[BOT2]ぐるぐるぐるぐる",
"[BOT2]わきゃー"
];
g_sock.json.emit("C_to_S_broadcast", {value:mesgs[g_counter % mesgs.length], secure:false});
g_counter++;
}
お疲れ様です。今回も前回と同様に http://www.risdy.net/ を対象にボットを稼働させておりますので bellum をインストールなされたお方は動作のご確認にでもご使用ください。
