Commit a4ed48afbab13c5a7fa057ee10754da75097e9b7
1 parent
8a941a951d
Exists in
master
keepalive_interval var
Showing 1 changed file with 5 additions and 14 deletions Inline Diff
index.js
1 | var http = require('http'); | 1 | var http = require('http'); |
2 | var url = require('url'); | 2 | var url = require('url'); |
3 | var winston = require('winston'); | 3 | var winston = require('winston'); |
4 | var strftime = require('strftime'); | 4 | var strftime = require('strftime'); |
5 | var strptime = require('micro-strptime').strptime; | 5 | var strptime = require('micro-strptime').strptime; |
6 | var request = require('request'); | 6 | var request = require('request'); |
7 | var striptags = require('striptags'); | 7 | var striptags = require('striptags'); |
8 | var fs = require('fs'); | 8 | var fs = require('fs'); |
9 | var ini = require('ini'); | 9 | var ini = require('ini'); |
10 | 10 | ||
11 | var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); | 11 | var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); |
12 | 12 | ||
13 | var last_message_hash; | 13 | var keepalive_interval = 2 * 60 * 1000; |
14 | 14 | ||
15 | var logger = new (winston.Logger)({ | 15 | var logger = new (winston.Logger)({ |
16 | transports: [ | 16 | transports: [ |
17 | new (winston.transports.Console)({ | 17 | new (winston.transports.Console)({ |
18 | timestamp: function() { | 18 | timestamp: function() { |
19 | return strftime('%F %T', new Date()); | 19 | return strftime('%F %T', new Date()); |
20 | } | 20 | } |
21 | }), | 21 | }), |
22 | new (winston.transports.DailyRotateFile)({ | 22 | new (winston.transports.DailyRotateFile)({ |
23 | filename: __dirname + '/logs/log', | 23 | filename: __dirname + '/logs/log', |
24 | timestamp: function() { | 24 | timestamp: function() { |
25 | return strftime('%F %T', new Date()); | 25 | return strftime('%F %T', new Date()); |
26 | } | 26 | } |
27 | }) | 27 | }) |
28 | ] | 28 | ] |
29 | }); | 29 | }); |
30 | 30 | ||
31 | 31 | ||
32 | var ym = require('yahoomessenger'); | 32 | var ym = require('yahoomessenger'); |
33 | ym.newInstance(); | 33 | ym.newInstance(); |
34 | 34 | ||
35 | function onReady(){ | 35 | function onReady(){ |
36 | ym.login(config.globals.username, config.globals.password); | 36 | ym.login(config.globals.username, config.globals.password); |
37 | } | 37 | } |
38 | 38 | ||
39 | function onLoginSuccessful(data) { | 39 | function onLoginSuccessful(data) { |
40 | logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); | 40 | logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); |
41 | } | 41 | } |
42 | 42 | ||
43 | function sendIgnoreResponse(destination, message) { | 43 | function sendIgnoreResponse(destination, message) { |
44 | ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); | 44 | ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); |
45 | } | 45 | } |
46 | 46 | ||
47 | function onPm(data) { | 47 | function onPm(data) { |
48 | logger.verbose('onPM()', {data: data}); | 48 | logger.verbose('onPM()', {data: data}); |
49 | 49 | ||
50 | var message = striptags(data.message); | 50 | var message = striptags(data.message); |
51 | /* | ||
52 | var new_message_hash = data.sender + ': ' + message; | ||
53 | |||
54 | if (last_message_hash == new_message_hash) { | ||
55 | return; | ||
56 | } | ||
57 | last_message_hash = new_message_hash; | ||
58 | */ | ||
59 | |||
60 | var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; | 51 | var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; |
61 | if (config.globals.greeting_suffix) { | 52 | if (config.globals.greeting_prefix) { |
62 | greeting_suffix = config.globals.greeting_suffix; | 53 | greeting_suffix = config.globals.greeting_prefix; |
63 | } | 54 | } |
64 | 55 | ||
65 | ym.sendPM(data.sender, greeting_suffix + ' ' + message); | 56 | ym.sendPM(data.sender, greeting_suffix + ' ' + message); |
66 | 57 | ||
67 | forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); | 58 | forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); |
68 | } | 59 | } |
69 | 60 | ||
70 | function onOfflinePM(data) { | 61 | function onOfflinePM(data) { |
71 | logger.verbose('onOfflinePM()', {data: data}); | 62 | logger.verbose('onOfflinePM()', {data: data}); |
72 | sendIgnoreResponse(data.sender, data.message); | 63 | sendIgnoreResponse(data.sender, data.message); |
73 | } | 64 | } |
74 | 65 | ||
75 | function onBuddyAddRequest(data) { | 66 | function onBuddyAddRequest(data) { |
76 | logger.info('onBuddyAddRequest()', {data: data}); | 67 | logger.info('onBuddyAddRequest()', {data: data}); |
77 | ym.acceptAddBuddy(data.username); | 68 | ym.acceptAddBuddy(data.username); |
78 | logger.info('Accept buddy add request: ' + data.username, {data: data}); | 69 | logger.info('Accept buddy add request: ' + data.username, {data: data}); |
79 | } | 70 | } |
80 | 71 | ||
81 | function onHttpIncomingMessage(request, response) { | 72 | function onHttpIncomingMessage(request, response) { |
82 | var qs = url.parse(request.url, true).query; | 73 | var qs = url.parse(request.url, true).query; |
83 | logger.info("onHttpIncomingMessage()", {qs: qs}); | 74 | logger.info("onHttpIncomingMessage()", {qs: qs}); |
84 | 75 | ||
85 | var destination = qs.to.replace(config.globals.msisdn_suffix, ''); | 76 | var destination = qs.to.replace(config.globals.msisdn_suffix, ''); |
86 | logger.info('Sending message to ' + destination + ': ' + qs.msg); | 77 | logger.info('Sending message to ' + destination + ': ' + qs.msg); |
87 | ym.sendPM(destination, qs.msg); | 78 | ym.sendPM(destination, qs.msg); |
88 | response.end('OK'); | 79 | response.end('OK'); |
89 | } | 80 | } |
90 | 81 | ||
91 | function formatTimestamp(ts) { | 82 | function formatTimestamp(ts) { |
92 | var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); | 83 | var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); |
93 | return strftime('%F %T', _ts); | 84 | return strftime('%F %T', _ts); |
94 | } | 85 | } |
95 | 86 | ||
96 | function forwardMessageToEvo(sender, message, ts) { | 87 | function forwardMessageToEvo(sender, message, ts) { |
97 | var msisdn = sender + config.globals.msisdn_suffix; | 88 | var msisdn = sender + config.globals.msisdn_suffix; |
98 | var opts = { | 89 | var opts = { |
99 | url: config.globals.evo_url, | 90 | url: config.globals.evo_url, |
100 | qs: { | 91 | qs: { |
101 | msg: message, | 92 | msg: message, |
102 | msisdn: msisdn, | 93 | msisdn: msisdn, |
103 | smsc: config.globals.smsc, | 94 | smsc: config.globals.smsc, |
104 | ts: ts | 95 | ts: ts |
105 | } | 96 | } |
106 | }; | 97 | }; |
107 | 98 | ||
108 | logger.info("Forwarding message to evo", {request_opts: opts}); | 99 | logger.info("Forwarding message to evo", {request_opts: opts}); |
109 | request(opts, function(err, response, body) { | 100 | request(opts, function(err, response, body) { |
110 | if (err) { | 101 | if (err) { |
111 | logger.warn('Error forwarding to evo: ' + err); | 102 | logger.warn('Error forwarding to evo: ' + err); |
112 | return; | 103 | return; |
113 | } | 104 | } |
114 | }); | 105 | }); |
115 | } | 106 | } |
116 | 107 | ||
117 | function createHttpServer() { | 108 | function createHttpServer() { |
118 | logger.verbose('createHttpServer()'); | 109 | logger.verbose('createHttpServer()'); |
119 | 110 | ||
120 | var httpServer = http.createServer(onHttpIncomingMessage); | 111 | var httpServer = http.createServer(onHttpIncomingMessage); |
121 | httpServer.listen(config.globals.listen_port, function(){ | 112 | httpServer.listen(config.globals.listen_port, function(){ |
122 | logger.info("HTTP server listening on " + config.globals.listen_port); | 113 | logger.info("HTTP server listening on " + config.globals.listen_port); |
123 | }); | 114 | }); |
124 | } | 115 | } |
125 | 116 | ||
126 | createHttpServer(); | 117 | createHttpServer(); |
127 | ym.on('ready', onReady); | 118 | ym.on('ready', onReady); |
128 | ym.on('loginSuccessful', onLoginSuccessful); | 119 | ym.on('loginSuccessful', onLoginSuccessful); |
129 | ym.on('pm', onPm); | 120 | ym.on('pm', onPm); |
130 | ym.on('buddyAddRequest', onBuddyAddRequest); | 121 | ym.on('buddyAddRequest', onBuddyAddRequest); |
131 | 122 | ||
132 | |||
133 | setInterval(function() { | 123 | setInterval(function() { |
124 | logger.info('Sending keepalive packet'); | ||
134 | ym.keepAlive(); | 125 | ym.keepAlive(); |
135 | }, 5 * 60 * 1000); | 126 | }, keepalive_interval); |