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

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 < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); var listInfo = new Array(); db.each("SELECT rowid AS id, info FROM lorem", function(err, row) { var tmp = new Object(); tmp.id = row.id; tmp.info = row.info; console.log("[ROW]\t" + row.id + ": " + row.info); listInfo.push(tmp); }, function() { // Each 完了時に呼び出される for (var i = 0; i < listInfo.length; i++) { console.log("[BUF]\t" + listInfo[i].id + ": " + listInfo[i].info); } console.lo