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 をインストールなされたお方は動作のご確認にでもご使用ください。