var config = require("./config.json"); var ym = require("yahoomessenger"); var redis = require('redis'); var redisClient; function sendPM(destination, message) { console.log("SEND " + destination + ": " + message); if (!config.test) { ym.sendPM(destination, message); } } function parseBalance(partner, message) { try { var re = new RegExp(partner.regex_pattern); var match = message.match(re); var balance = match[partner.regex_match_index].replace(/\./g, '').replace(/,/g, ''); return balance; } catch(err) { console.log("Exception on parseBalance: " + err); return; } } function onPM(data) { console.log("RECEIVE " + data.sender + ': ' + data.message); var partner = getPartnerFromMessage(data.sender); if (!partner) { console.log('Invalid sender'); return; } console.log("Message is from known sender: " + data.sender + "(" + partner.name + ")"); var balance = parseBalance(partner, data.message); if (balance) { console.log("Balance di " + partner.name + ": " + balance); saveBalanceToRedis(partner, balance); } } function saveBalanceToRedis(partner, balance) { var key = 'balance.gw:' + partner.name; redisClient.set(key, Number(balance)); redisClient.expire(key, 3600*24*7); } function getPartnerFromMessage(sender) { var partner_count = config.partners.length; for (var i = 0; i < partner_count; i++) { var partner = config.partners[i]; var ym_ids = partner.ym_ids; var ym_count = ym_ids.length; for (var j = 0; j < ym_count; j++) { if (sender == ym_ids[j]) { return partner; } } } return; } function checkAllBalance() { var count = config.partners.length; for (var i = 0; i < count; i++) { var partner = config.partners[i]; console.log("Checking balance for " + partner.name); var ym_idx = Math.round(Math.random() * (partner.ym_ids.length - 1)); sendPM(partner.ym_ids[ym_idx], partner.command); } } try { redisClient = redis.createClient(config.redis.port, config.redis.host); } catch(err) { logger.info("Error creating redis client"); } ym.newInstance(); ym.on("ready", function() { ym.login(config.ym_account.userid, config.ym_account.password); }); ym.on('loginSuccessful', function(data) { console.log("Login successful as: " + data.firstname + " " + data.lastname + " (" + data.user_id + ")"); checkAllBalance(); var sleepTime = config.interval_in_seconds * 1000; if (config.test) { sleepTime = 1000; } setInterval(checkAllBalance, sleepTime); }); ym.on('buddyAddRequest', function(data) { ym.acceptAddBuddy(data.username); console.log("Add budy: " + data.username); }); ym.on('pm', onPM);