Commit 1c11675f048a008f1bab625755fa8a2a29f27e6f
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
index.js
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 |