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

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

このブログの人気の投稿

node.js で SQLite を async を使用して同期的に使用する

node.js で SQLite を async を使用して同期的に使用する node.js で SQLite を使うと何が怖いって非同期処理って所。
どのようにコードが動くのか分かり辛い。

そこで同期処理っぽくしてみたい。


async というライブラリを使用するとそれっぽいことができるそうなのでサンプルを書いた。

記述試験の書き方(仮)

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