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