Commit 02655b6bbbeadc4b790b1ded7f5719f9392e2642
1 parent
776e8a8525
Exists in
master
sendPM wrapper
Showing 1 changed file with 22 additions and 6 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 loggedPM = []; | 10 | var loggedPM = []; |
11 | 11 | ||
12 | var logger = require('winston'); | 12 | var logger = require('winston'); |
13 | logger.remove(logger.transports.Console); | 13 | logger.remove(logger.transports.Console); |
14 | logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }}); | 14 | logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }}); |
15 | 15 | ||
16 | var db = require('./db.js'); | 16 | var db = require('./db.js'); |
17 | db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger); | 17 | db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger); |
18 | 18 | ||
19 | function isAdmin(user) { | 19 | function isAdmin(user) { |
20 | var admins = config.yahoomessenger.admin.split(','); | 20 | var admins = config.yahoomessenger.admin.split(','); |
21 | 21 | ||
22 | return (admins.indexOf(user) >= 0); | 22 | return (admins.indexOf(user) >= 0); |
23 | } | 23 | } |
24 | 24 | ||
25 | function sendPM(destination, message) { | ||
26 | try { | ||
27 | logger.info("Sending to " + destination + ": " + message); | ||
28 | YahooMessenger.sendPM(destination, message); | ||
29 | } | ||
30 | catch (e) { | ||
31 | logger.info("Something wrong"); | ||
32 | logger.info(e); | ||
33 | logger.info("Try to reconnecting to yahoo messenger"); | ||
34 | YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); | ||
35 | return false; | ||
36 | } | ||
37 | |||
38 | return true; | ||
39 | |||
40 | } | ||
41 | |||
25 | function broadcast(destinations, message, exclude) { | 42 | function broadcast(destinations, message, exclude) { |
26 | var destinations = destinations.split(','); | 43 | var destinations = destinations.split(','); |
27 | var destinationCount = destinations.length; | 44 | var destinationCount = destinations.length; |
28 | 45 | ||
29 | for (var i=0; i < destinationCount; i++) { | 46 | for (var i=0; i < destinationCount; i++) { |
30 | destination = destinations[i]; | 47 | destination = destinations[i]; |
31 | if (destination == exclude) { | 48 | if (destination == exclude) { |
32 | continue; | 49 | continue; |
33 | } | 50 | } |
34 | 51 | ||
35 | logger.info('Sending message to ' + destination); | 52 | sendPM(destination, message); |
36 | YahooMessenger.sendPM(destination, message); | ||
37 | } | 53 | } |
38 | } | 54 | } |
39 | 55 | ||
40 | var _keepAliveLoop = function() { | 56 | var _keepAliveLoop = function() { |
41 | logger.info('Keep alive loop'); | 57 | logger.info('Keep alive loop'); |
42 | 58 | ||
43 | try { | 59 | try { |
44 | YahooMessenger.keepAlive(); | 60 | YahooMessenger.keepAlive(); |
45 | } | 61 | } |
46 | catch(e) { | 62 | catch(e) { |
47 | logger.error("Something wrong"); | 63 | logger.info("Something wrong"); |
48 | logger.error(e); | 64 | logger.info(e); |
49 | logger.info("Try to reconnecting to yahoo messenger"); | 65 | logger.info("Try to reconnecting to yahoo messenger"); |
50 | YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); | 66 | YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); |
51 | return; | 67 | return; |
52 | } | 68 | } |
53 | 69 | ||
54 | keepAliveLoop(); | 70 | keepAliveLoop(); |
55 | } | 71 | } |
56 | 72 | ||
57 | function keepAliveLoop() { | 73 | function keepAliveLoop() { |
58 | setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); | 74 | setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); |
59 | } | 75 | } |
60 | 76 | ||
61 | function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { | 77 | function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { |
62 | 78 | ||
63 | db_connection.query( | 79 | db_connection.query( |
64 | 'INSERT INTO messages SET ?', | 80 | 'INSERT INTO messages SET ?', |
65 | { | 81 | { |
66 | transport: 'YAHOO', | 82 | transport: 'YAHOO', |
67 | logger: logger_id, | 83 | logger: logger_id, |
68 | direction: direction, | 84 | direction: direction, |
69 | partner: partner, | 85 | partner: partner, |
70 | message: message, | 86 | message: message, |
71 | sentdate: sentdate, | 87 | sentdate: sentdate, |
72 | }, | 88 | }, |
73 | 89 | ||
74 | function(err) { | 90 | function(err) { |
75 | if (err != null) { | 91 | if (err != null) { |
76 | logger.error("Error on inserting messages to DB, error: " + err); | 92 | logger.error("Error on inserting messages to DB, error: " + err); |
77 | } | 93 | } |
78 | } | 94 | } |
79 | ); | 95 | ); |
80 | } | 96 | } |
81 | 97 | ||
82 | var striptags = require('striptags'); | 98 | var striptags = require('striptags'); |
83 | 99 | ||
84 | var YahooMessenger = require("yahoomessenger"); | 100 | var YahooMessenger = require("yahoomessenger"); |
85 | YahooMessenger.newInstance(); | 101 | YahooMessenger.newInstance(); |
86 | 102 | ||
87 | function onYmLoginSuccesful(data){ | 103 | function onYmLoginSuccesful(data){ |
88 | logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); | 104 | logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); |
89 | 105 | ||
90 | if (config.yahoomessenger.status) { | 106 | if (config.yahoomessenger.status) { |
91 | logger.info('Set status to: ' + config.yahoomessenger.status); | 107 | logger.info('Set status to: ' + config.yahoomessenger.status); |
92 | YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); | 108 | YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); |
93 | }; | 109 | }; |
94 | 110 | ||
95 | broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message); | 111 | broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message); |
96 | 112 | ||
97 | keepAliveLoop(); | 113 | keepAliveLoop(); |
98 | } | 114 | } |
99 | 115 | ||
100 | function onYmPM(data) { | 116 | function onYmPM(data) { |
101 | var direction = 'IN'; | 117 | var direction = 'IN'; |
102 | 118 | ||
103 | if (config.globals.debug == 1) { | 119 | if (config.globals.debug == 1) { |
104 | console.log(data); | 120 | console.log(data); |
105 | } | 121 | } |
106 | 122 | ||
107 | // check duplicate message | 123 | // check duplicate message |
108 | if (loggedPM.indexOf(data.message_id) >= 0) { | 124 | if (loggedPM.indexOf(data.message_id) >= 0) { |
109 | return; | 125 | return; |
110 | } | 126 | } |
111 | 127 | ||
112 | loggedPM.unshift(data.message_id); | 128 | loggedPM.unshift(data.message_id); |
113 | if (loggedPM.length > 30) { | 129 | if (loggedPM.length > 30) { |
114 | loggedPM = loggedPM.slice(0, 10); | 130 | loggedPM = loggedPM.slice(0, 10); |
115 | } | 131 | } |
116 | 132 | ||
117 | partner = data.sender; | 133 | partner = data.sender; |
118 | if (partner == data.user_id) { | 134 | if (partner == data.user_id) { |
119 | partner = data.target_user; | 135 | partner = data.target_user; |
120 | direction = 'OUT'; | 136 | direction = 'OUT'; |
121 | } | 137 | } |
122 | 138 | ||
123 | var message = striptags(data.message).trim(); | 139 | var message = striptags(data.message).trim(); |
124 | 140 | ||
125 | logger.info('New ' + direction + ' message from ' + data.sender + ' to ' + data.target_user + ': ' + message); | 141 | logger.info('New ' + direction + ' message from ' + data.sender + ' to ' + data.target_user + ': ' + message); |
126 | 142 | ||
127 | if (isAdmin(data.sender)) { | 143 | if (isAdmin(data.sender)) { |
128 | logger.info('Sender (' + data.sender + ') is an admin'); | 144 | logger.info('Sender (' + data.sender + ') is an admin'); |
129 | } | 145 | } |
130 | 146 | ||
131 | var sentdate = Date.parse(data.time); | 147 | var sentdate = Date.parse(data.time); |
132 | var strftime = require('strftime'); | 148 | var strftime = require('strftime'); |
133 | sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate); | 149 | sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate); |
134 | 150 | ||
135 | insertMessages( | 151 | insertMessages( |
136 | db_connection, | 152 | db_connection, |
137 | data.user_id, | 153 | data.user_id, |
138 | direction, | 154 | direction, |
139 | partner, | 155 | partner, |
140 | message, | 156 | message, |
141 | sentdate | 157 | sentdate |
142 | ); | 158 | ); |
143 | 159 | ||
144 | broadcast(config.yahoomessenger.report_to, '@' + data.sender + ': ' + message, partner); | 160 | broadcast(config.yahoomessenger.report_to, '@' + data.sender + ': ' + message, partner); |
145 | 161 | ||
146 | if ((direction == 'IN') && (isAdmin(partner))) { | 162 | if ((direction == 'IN') && (isAdmin(partner))) { |
147 | if (message.charAt(0) == '@') { | 163 | if (message.charAt(0) == '@') { |
148 | target = message.split(' ', 1).join(); | 164 | target = message.split(' ', 1).join(); |
149 | target = target.slice(1); | 165 | target = target.slice(1); |
150 | 166 | ||
151 | var messageToForward = message.replace('@' + target, '').trim(); | 167 | var messageToForward = message.replace('@' + target, '').trim(); |
152 | if (messageToForward == '') { | 168 | if (messageToForward == '') { |
153 | return; | 169 | return; |
154 | } | 170 | } |
155 | 171 | ||
156 | logger.info('Forward to ' + target + ': ' + messageToForward); | 172 | logger.info('Forward to ' + target + ': ' + messageToForward); |
157 | YahooMessenger.sendPM(target, '@' + partner + ': ' + messageToForward); | 173 | sendPM(target, '@' + partner + ': ' + messageToForward); |
158 | 174 | ||
159 | } else if (message.charAt(0) == '+') { | 175 | } else if (message.charAt(0) == '+') { |
160 | target = message.split(' ', 1).join(); | 176 | target = message.split(' ', 1).join(); |
161 | target = target.slice(1); | 177 | target = target.slice(1); |
162 | 178 | ||
163 | var messageToForward = message.replace('+' + target, '').trim(); | 179 | var messageToForward = message.replace('+' + target, '').trim(); |
164 | if (messageToForward == '') { | 180 | if (messageToForward == '') { |
165 | return; | 181 | return; |
166 | } | 182 | } |
167 | 183 | ||
168 | logger.info('Clean forward to ' + target + ': ' + messageToForward); | 184 | logger.info('Clean forward to ' + target + ': ' + messageToForward); |
169 | YahooMessenger.sendPM(target, messageToForward); | 185 | sendPM(target, messageToForward); |
170 | } | 186 | } |
171 | 187 | ||
172 | } | 188 | } |
173 | } | 189 | } |
174 | 190 | ||
175 | function onYmBuddyAddRequest(data) { | 191 | function onYmBuddyAddRequest(data) { |
176 | logger.info("Got request to add buddy from " + data.username); | 192 | logger.info("Got request to add buddy from " + data.username); |
177 | YahooMessenger.acceptAddBuddy(data.username); | 193 | YahooMessenger.acceptAddBuddy(data.username); |
178 | } | 194 | } |
179 | 195 | ||
180 | 196 | ||
181 | function onYmReady(){ | 197 | function onYmReady(){ |
182 | logger.info("Going to online on YM") | 198 | logger.info("Going to online on YM") |
183 | YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); | 199 | YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); |
184 | } | 200 | } |
185 | 201 | ||
186 | YahooMessenger.on('ready', onYmReady); | 202 | YahooMessenger.on('ready', onYmReady); |
187 | YahooMessenger.on('loginSuccessful', onYmLoginSuccesful); | 203 | YahooMessenger.on('loginSuccessful', onYmLoginSuccesful); |
188 | YahooMessenger.on('pm', onYmPM); | 204 | YahooMessenger.on('pm', onYmPM); |
189 | YahooMessenger.on('buddyAddRequest', onYmBuddyAddRequest); | 205 | YahooMessenger.on('buddyAddRequest', onYmBuddyAddRequest); |
190 | 206 | ||
191 | var http = require('http'); | 207 | var http = require('http'); |
192 | var url = require('url'); | 208 | var url = require('url'); |
193 | 209 | ||
194 | function onHttpRequest(request, response) { | 210 | function onHttpRequest(request, response) { |
195 | var pathname = url.parse(request.url).pathname; | 211 | var pathname = url.parse(request.url).pathname; |
196 | logger.info('Got HTTP request on ' + pathname); | 212 | logger.info('Got HTTP request on ' + pathname); |
197 | 213 | ||
198 | var queries = url.parse(request.url, true).query; | 214 | var queries = url.parse(request.url, true).query; |
199 | console.log(queries); | 215 | console.log(queries); |
200 | 216 | ||
201 | response.writeHead(200, {"Content-Type": "text/html"}); | 217 | response.writeHead(200, {"Content-Type": "text/html"}); |
202 | response.write("Hello"); | 218 | response.write("Hello"); |
203 | response.end(); | 219 | response.end(); |
204 | } | 220 | } |
205 | 221 | ||
206 | http.createServer(onHttpRequest).listen(config.httpserver.listen_port); | 222 | http.createServer(onHttpRequest).listen(config.httpserver.listen_port); |
207 | logger.info("HTTP server listening on " + config.httpserver.listen_port); | 223 | logger.info("HTTP server listening on " + config.httpserver.listen_port); |