スキップしてメイン コンテンツに移動

bellum on ボットをつくろう!!2

bellum on ボットをつくろう!! 2

概要

前回 「bellum on ボットをつくろう!!」で作ったボットの返答が即答(さすがリアルタイムすごいはやいです)であったため、少し遅くなるようにしてみた。
まぁ今回は async の処理を追加して終わりなのだけどね

準備

今回は、async モジュールを使用しております。ので npm で取得しましょう
npm install async
npm install socket.io-client

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

このブログの人気の投稿

記述試験の書き方(仮)

記述試験の書き方(仮) 1,まえがき   法学部の試験では記述式の試験が出てくる。   その試験では、あるテーマについて自由に論ぜよとされている。 しかし、論ぜよと言われても、どのように論じればいいのか、すなわち、記述の仕方について教わったことがない(よくよく考えると、法的文章力を習得させる事だけが目的の授業はないと思われる)。   本稿では、私自身が法学畜になり、見聞きし、実際に活用している論述方法についてまとめている、はずである。その要点は、①条文、判例、学説を使う。②単なる事実と法的事実を区別する。③文章内に一貫性を持たせる。である。 法律と、プログラミング

本サイトの今後について

告知 本サイトは今後更新されることは、おそらくありません。 過去記事等はこのまま放置するつもりです。内容の陳腐化並びにその正確性等については保証はできません。自己責任で活用いただければと思います。 This site won't update in future. And Thank's everyone. new site -> sysrigar

node.js で SQLite3 を使用するコードを書くときの予備録

node.js で SQLite3 を使用するコードを書くとき、予備録 まず、非同期処理。 C言語や Perl のように上から下に処理が続くと決して思ってはいけない。 SQLite3 の each は SQL 文実行完了時に呼び出す関数を指定できる SQLite をインストールします、 npm install sqlite3 [test.js] var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(function() { db.run("CREATE TABLE lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i 結果 [ROW] 1: Ipsum 0 [ROW] 2: Ipsum 1 [ROW] 3: Ipsum 2 [ROW] 4: Ipsum 3 [ROW] 5: Ipsum 4 [ROW] 6: Ipsum 5 [ROW] 7: Ipsum 6 [ROW] 8: Ipsum 7 [ROW] 9: Ipsum 8 [ROW] 10: Ipsum 9 [BUF] 1: Ipsum 0 [BUF] 2: Ipsum 1 [BUF] 3: Ipsum 2 [BUF] 4: Ipsum 3 [BUF] 5: Ipsum 4 [BUF] 6: Ipsum 5 [BUF] 7: Ipsum 6 [BUF] 8: Ipsum 7 [BUF] 9: Ipsum 8 [BUF] 10: Ipsum 9 Finish. まぁ見れば分かる通り、each 関数の第三引数を指定しただけなんだけどね。 Database#each(sql, [param, ...], [callback], [complete]) https://github.com/mapbox/node-sqlite3...