index.js 2.34 KB
var http = require('http');
var url = require('url');
var winston = require('winston');
var strftime = require('strftime');
var fs = require('fs');
var ini = require('ini');
var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));

var last_message_hash;

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({
      timestamp: function() {
        return strftime('%F %T', new Date());
      }
    }),
    new (winston.transports.DailyRotateFile)({
      filename: __dirname + '/log',
      timestamp: function() {
        return strftime('%F %T', new Date());
      }
    })
  ]
});


var ym = require('yahoomessenger');
ym.newInstance();

function onReady(){
  ym.login(config.globals.username, config.globals.password);
}

function onLoginSuccessful(data) {
    logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.username + ')', {data: data});
}

function sendIgnoreResponse(destination, message) {
    ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message);
}

function onPm(data) {
    logger.info('onPM()', {data: data});
    
    var new_message_hash = data.sender + ': ' + data.message;
    
    if (last_message_hash == new_message_hash) {
        return;
    }
    
    last_message_hash = new_message_hash;
    ym.sendPM(data.sender, "Pesan anda telah diterima dan akan segera diproses: " + data.message);
}

function onOfflinePM(data) {
    logger.info('onOfflinePM()', {data: data});
    sendIgnoreResponse(data.sender, data.message);
}

function onBuddyAddRequest(data) {
    logger.info('onBuddyAddRequest()', {data: data});
    ym.acceptAddBuddy(data.username);
    logger.info('Accept buddy add request: ' + data.username, {data: data});
}

function onHttpIncomingMessage(request, response) {
    var qs = url.parse(request.url, true).query;
    logger.info("onHttpIncomingMessage()", {qs: qs});
}

function createHttpServer() {
    logger.verbose('createHttpServer()');
    
    var httpServer = http.createServer(onHttpIncomingMessage);
    httpServer.listen(config.globals.listen_port, function(){
        logger.info("HTTP server listening on " + config.globals.listen_port);
    });
}

ym.on('ready', onReady);
ym.on('loginSuccessful', onLoginSuccessful);
ym.on('pm', onPm);
ym.on('buddyAddRequest', onBuddyAddRequest);