Commit 1c11675f048a008f1bab625755fa8a2a29f27e6f

Authored by Adhidarma Hadiwinoto
1 parent c1f9bb5eaf
Exists in master

fix on pm when sending from another session

Showing 1 changed file with 11 additions and 3 deletions Inline Diff

1 var iniparser = require('iniparser'); 1 var iniparser = require('iniparser');
2 var config = iniparser.parseSync('./config.ini'); 2 var config = iniparser.parseSync('./config.ini');
3 3
4 if (config.yahoomessenger.keepalive_interval == null) { 4 if (config.yahoomessenger.keepalive_interval == null) {
5 config.yahoomessenger.keepalive_interval = 60; 5 config.yahoomessenger.keepalive_interval = 60;
6 } 6 }
7 7
8 var strftime = require('strftime'); 8 var strftime = require('strftime');
9 9
10 var pollingTimer; 10 var pollingTimer;
11 11
12 var lastDataOnPM; 12 var lastDataOnPM;
13 13
14 var logger = require('winston'); 14 var logger = require('winston');
15 logger.remove(logger.transports.Console); 15 logger.remove(logger.transports.Console);
16 logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }}); 16 logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }});
17 17
18 var db = require('./db.js'); 18 var db = require('./db.js');
19 db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger); 19 db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger);
20 20
21 function isAdmin(user) { 21 function isAdmin(user) {
22 var admins = config.yahoomessenger.admin.split(','); 22 var admins = config.yahoomessenger.admin.split(',');
23 23
24 return (admins.indexOf(user) >= 0); 24 return (admins.indexOf(user) >= 0);
25 } 25 }
26 26
27 function broadcast(destinations, message) { 27 function broadcast(destinations, message) {
28 var destinations = destinations.split(','); 28 var destinations = destinations.split(',');
29 var destinationCount = destinations.length; 29 var destinationCount = destinations.length;
30 30
31 for (var i=0; i < destinationCount; i++) { 31 for (var i=0; i < destinationCount; i++) {
32 destination = destinations[i] 32 destination = destinations[i]
33 logger.info('Sending message to ' + destination); 33 logger.info('Sending message to ' + destination);
34 YahooMessenger.sendPM(destination, message); 34 YahooMessenger.sendPM(destination, message);
35 } 35 }
36 } 36 }
37 37
38 var keepAliveLoop = function() { 38 var keepAliveLoop = function() {
39 logger.info('Keep alive loop'); 39 logger.info('Keep alive loop');
40 40
41 YahooMessenger.keepAlive(); 41 YahooMessenger.keepAlive();
42 pollingTimer = setTimeout(keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); 42 pollingTimer = setTimeout(keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000);
43 } 43 }
44 44
45 function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { 45 function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) {
46 46
47 db_connection.query( 47 db_connection.query(
48 'INSERT INTO messages SET ?', 48 'INSERT INTO messages SET ?',
49 { 49 {
50 transport: 'YAHOO', 50 transport: 'YAHOO',
51 logger: logger_id, 51 logger: logger_id,
52 direction: direction, 52 direction: direction,
53 partner: partner, 53 partner: partner,
54 message: message, 54 message: message,
55 sentdate: sentdate, 55 sentdate: sentdate,
56 }, 56 },
57 57
58 function(err) { 58 function(err) {
59 if (err != null) { 59 if (err != null) {
60 logger.error("Error on inserting messages to DB, error: " + err); 60 logger.error("Error on inserting messages to DB, error: " + err);
61 } 61 }
62 } 62 }
63 ); 63 );
64 } 64 }
65 65
66 var striptags = require('striptags'); 66 var striptags = require('striptags');
67 67
68 var YahooMessenger = require("yahoomessenger"); 68 var YahooMessenger = require("yahoomessenger");
69 YahooMessenger.newInstance(); 69 YahooMessenger.newInstance();
70 70
71 function onYmLoginSuccesful(data){ 71 function onYmLoginSuccesful(data){
72 logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); 72 logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')');
73 73
74 if (config.yahoomessenger.status) { 74 if (config.yahoomessenger.status) {
75 logger.info('Set status to: ' + config.yahoomessenger.status); 75 logger.info('Set status to: ' + config.yahoomessenger.status);
76 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); 76 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status);
77 }; 77 };
78 78
79 broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message); 79 broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message);
80 80
81 keepAliveLoop(); 81 keepAliveLoop();
82 } 82 }
83 83
84 function onYmPM(data) { 84 function onYmPM(data) {
85 85
86 if (config.globals.debug == 1) { 86 if (config.globals.debug == 1) {
87 console.log(data); 87 console.log(data);
88 } 88 }
89 89
90 if (lastDataOnPM != null) { 90 if (lastDataOnPM != null) {
91 if ((lastDataOnPM.sender == data.sender) && (lastDataOnPM.message == data.message)) { 91 if ((lastDataOnPM.sender == data.sender) && (lastDataOnPM.message == data.message)) {
92 return; 92 return;
93 } 93 }
94 } 94 }
95 95
96 lastDataOnPM = data; 96 lastDataOnPM = data;
97 97
98 direction = 'IN';
99
100 partner = data.sender;
101 if (partner = data.sender) {
102 partner = data.target_user;
103 direction = 'OUT';
104 }
105
98 var message = striptags(data.message) 106 var message = striptags(data.message)
99 107
100 logger.info('New message received from ' + data.sender + ': ' + message); 108 logger.info('New ' + direction + ' message from ' + data.sender + ' to ' + data.target_user + ': ' + message);
101 109
102 if (isAdmin(data.sender)) { 110 if (isAdmin(data.sender)) {
103 logger.info('Sender (' + data.sender + ') is an admin'); 111 logger.info('Sender (' + data.sender + ') is an admin');
104 } 112 }
105 113
106 var sentdate = Date.parse(data.time); 114 var sentdate = Date.parse(data.time);
107 var strftime = require('strftime'); 115 var strftime = require('strftime');
108 sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate); 116 sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate);
109 117
110 insertMessages( 118 insertMessages(
111 db_connection, 119 db_connection,
112 data.user_id, 120 data.user_id,
113 'IN', 121 direction,
114 data.sender, 122 partner,
115 message, 123 message,
116 sentdate 124 sentdate
117 ); 125 );
118 126
119 broadcast(config.yahoomessenger.report_to, data.sender + '-> ' + message); 127 broadcast(config.yahoomessenger.report_to, data.sender + '-> ' + message);
120 } 128 }
121 129
122 function onYmBuddyAddRequest(data) { 130 function onYmBuddyAddRequest(data) {
123 logger.info("Got request to add buddy from " + data.username); 131 logger.info("Got request to add buddy from " + data.username);
124 YahooMessenger.acceptAddBuddy(data.username); 132 YahooMessenger.acceptAddBuddy(data.username);
125 } 133 }
126 134
127 function onYmReady(){ 135 function onYmReady(){
128 logger.info("Going to online on YM") 136 logger.info("Going to online on YM")
129 YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); 137 YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password);
130 } 138 }
131 139
132 YahooMessenger.on('ready', onYmReady); 140 YahooMessenger.on('ready', onYmReady);
133 YahooMessenger.on('loginSuccessful', onYmLoginSuccesful); 141 YahooMessenger.on('loginSuccessful', onYmLoginSuccesful);
134 YahooMessenger.on('pm', onYmPM); 142 YahooMessenger.on('pm', onYmPM);
135 YahooMessenger.on('buddyAddRequest', onYmBuddyAddRequest); 143 YahooMessenger.on('buddyAddRequest', onYmBuddyAddRequest);
136 144
137 var http = require('http'); 145 var http = require('http');
138 var url = require('url'); 146 var url = require('url');
139 147
140 function onHttpRequest(request, response) { 148 function onHttpRequest(request, response) {
141 var pathname = url.parse(request.url).pathname; 149 var pathname = url.parse(request.url).pathname;
142 logger.info('Got HTTP request on ' + pathname); 150 logger.info('Got HTTP request on ' + pathname);
143 151
144 var queries = url.parse(request.url, true).query; 152 var queries = url.parse(request.url, true).query;
145 console.log(queries); 153 console.log(queries);
146 154
147 response.writeHead(200, {"Content-Type": "text/html"}); 155 response.writeHead(200, {"Content-Type": "text/html"});
148 response.write("Hello"); 156 response.write("Hello");
149 response.end(); 157 response.end();
150 } 158 }
151 159
152 http.createServer(onHttpRequest).listen(config.httpserver.listen_port); 160 http.createServer(onHttpRequest).listen(config.httpserver.listen_port);
153 logger.info("HTTP server listening on " + config.httpserver.listen_port); 161 logger.info("HTTP server listening on " + config.httpserver.listen_port);
154 162