var iniparser = require('iniparser'); var config = iniparser.parseSync('./config.ini'); if (config.yahoomessenger.keepalive_interval == null) { config.yahoomessenger.keepalive_interval = 60; } var strftime = require('strftime'); var loggedPM = []; var logger = require('winston'); logger.remove(logger.transports.Console); logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }}); var db = require('./db.js'); db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger); function isAdmin(user) { var admins = config.yahoomessenger.admin.split(','); return (admins.indexOf(user) >= 0); } function broadcast(destinations, message) { var destinations = destinations.split(','); var destinationCount = destinations.length; for (var i=0; i < destinationCount; i++) { destination = destinations[i] logger.info('Sending message to ' + destination); YahooMessenger.sendPM(destination, message); } } var _keepAliveLoop = function() { logger.info('Keep alive loop'); YahooMessenger.keepAlive(); keepAliveLoop(); } function keepAliveLoop() { setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); } function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { db_connection.query( 'INSERT INTO messages SET ?', { transport: 'YAHOO', logger: logger_id, direction: direction, partner: partner, message: message, sentdate: sentdate, }, function(err) { if (err != null) { logger.error("Error on inserting messages to DB, error: " + err); } } ); } var striptags = require('striptags'); var YahooMessenger = require("yahoomessenger"); YahooMessenger.newInstance(); function onYmLoginSuccesful(data){ logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); if (config.yahoomessenger.status) { logger.info('Set status to: ' + config.yahoomessenger.status); YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); }; broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message); keepAliveLoop(); } function onYmPM(data) { if (config.globals.debug == 1) { console.log(data); } // check duplicate message if (loggedPM.indexOf(data.message_id) >= 0) { return; } loggedPM.unshift(data.message_id); if (loggedPM.length > 30) { loggedPM = loggedPM.slice(0, 10); } direction = 'IN'; partner = data.sender; if (partner = data.sender) { partner = data.target_user; direction = 'OUT'; } var message = striptags(data.message) logger.info('New ' + direction + ' message from ' + data.sender + ' to ' + data.target_user + ': ' + message); if (isAdmin(data.sender)) { logger.info('Sender (' + data.sender + ') is an admin'); } var sentdate = Date.parse(data.time); var strftime = require('strftime'); sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate); insertMessages( db_connection, data.user_id, direction, partner, message, sentdate ); broadcast(config.yahoomessenger.report_to, '@' + data.sender + ': ' + message); } function onYmBuddyAddRequest(data) { logger.info("Got request to add buddy from " + data.username); YahooMessenger.acceptAddBuddy(data.username); } function onYmReady(){ logger.info("Going to online on YM") YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); } YahooMessenger.on('ready', onYmReady); YahooMessenger.on('loginSuccessful', onYmLoginSuccesful); YahooMessenger.on('pm', onYmPM); YahooMessenger.on('buddyAddRequest', onYmBuddyAddRequest); var http = require('http'); var url = require('url'); function onHttpRequest(request, response) { var pathname = url.parse(request.url).pathname; logger.info('Got HTTP request on ' + pathname); var queries = url.parse(request.url, true).query; console.log(queries); response.writeHead(200, {"Content-Type": "text/html"}); response.write("Hello"); response.end(); } http.createServer(onHttpRequest).listen(config.httpserver.listen_port); logger.info("HTTP server listening on " + config.httpserver.listen_port);