Commit 3d3a86f54fca8342e524ea7391649057d09df306

Authored by Adhidarma Hadiwinoto
0 parents
Exists in master

first commit

Showing 5 changed files with 180 additions and 0 deletions Inline Diff

File was created 1 node_modules/
2 logs/log.*
3
File was created 1 YM Center for ST24
2
File was created 1 var http = require('http');
2 var url = require('url');
3 var winston = require('winston');
4 var strftime = require('strftime');
5 var strptime = require('micro-strptime').strptime;
6 var request = require('request');
7 var striptags = require('striptags');
8 var fs = require('fs');
9 var ini = require('ini');
10
11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
12
13 var keepalive_interval = 60 * 1000;
14 var last_message_hash = '';
15 var log_level = 'info';
16
17 if (config.globals.log_level) {
18 log_level = config.globals.log_level;
19 }
20
21 var logger = new (winston.Logger)({
22 transports: [
23 new (winston.transports.Console)({
24 timestamp: function() {
25 return strftime('%F %T', new Date());
26 },
27 level: log_level
28 }),
29 new (winston.transports.DailyRotateFile)({
30 filename: __dirname + '/logs/log',
31 timestamp: function() {
32 return strftime('%F %T', new Date());
33 },
34 level: log_level
35 })
36 ]
37 });
38
39
40 var ym = require('yahoomessenger');
41 ym.newInstance();
42
43 function onReady(){
44 ym.login(config.globals.username, config.globals.password);
45 }
46
47 function onLoginSuccessful(data) {
48 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data});
49 }
50
51 function sendIgnoreResponse(destination, message) {
52 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message);
53 }
54
55 function onPm(data) {
56 logger.info('onPM()', {data: data});
57
58 var message = striptags(data.message);
59
60 var message_hash = data.sender + ': ' + data.message;
61 if (message_hash == last_message_hash) {
62 logger.info('Ignoring duplicate message', {data: data});
63 return;
64 }
65 last_message_hash = message_hash;
66
67 var greeting_prefix = "Pesan anda telah diterima dan akan segera diproses:";
68 if (config.globals.greeting_prefix) {
69 greeting_prefix = config.globals.greeting_prefix;
70 }
71
72 ym.sendPM(data.sender, greeting_prefix + ' ' + message);
73
74 forwardMessageToAAA(data.sender, message);
75 }
76
77 function onOfflinePM(data) {
78 logger.verbose('onOfflinePM()', {data: data});
79 sendIgnoreResponse(data.sender, data.message);
80 }
81
82 function onBuddyAddRequest(data) {
83 logger.info('onBuddyAddRequest()', {data: data});
84 ym.acceptAddBuddy(data.username);
85 logger.info('Accept buddy add request: ' + data.username, {data: data});
86 }
87
88 function onHttpIncomingMessage(request, response) {
89 var qs = url.parse(request.url, true).query;
90 logger.info("onHttpIncomingMessage()", {qs: qs});
91 response.end('OK');
92
93 logger.info('Sending message to ' + qs.PhoneNumber + ': ' + qs.text);
94 ym.sendPM(qs.to, qs.msg);
95
96 }
97
98 function formatTimestamp(ts) {
99 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z');
100 return strftime('%F %T', _ts);
101 }
102
103 function forwardMessageToAAA(sender, message) {
104 var request_opts = {
105 url: config.globals.aaa,
106 qs: {
107 PhoneNumber: sender,
108 Text: message,
109 Res_Port: config.globals.listen_port,
110 SMSCID: config.globals.smscid
111 }
112 };
113
114 request(request_opts, function(err, response, body) {
115 if (err) {
116 logger.info('Request error: ' + err);
117 return;
118 }
119
120 logger.info('Response: ' + response);
121 logger.info('Body: ' + body);
122
123 });
124 }
125
126 function createHttpServer() {
127 logger.verbose('createHttpServer()');
128
129 var httpServer = http.createServer(onHttpIncomingMessage);
130 httpServer.listen(config.globals.listen_port, function(){
131 logger.info("HTTP server listening on " + config.globals.listen_port);
132 });
133 }
134
135 createHttpServer();
136 ym.on('ready', onReady);
137 ym.on('loginSuccessful', onLoginSuccessful);
138 ym.on('pm', onPm);
139 ym.on('buddyAddRequest', onBuddyAddRequest);
140
141 setInterval(function() {
142 logger.info('Sending keepalive packet');
143 ym.keepAlive();
144 }, keepalive_interval);
145
File was created 1 {
2 "name": "evo-ym-center",
3 "version": "0.0.1",
4 "description": "EVO YM Center",
5 "main": "index.js",
6 "scripts": {
7 "test": "mocha test"
8 },
9 "repository": {
10 "type": "git",
11 "url": "http://gitlab.kodesumber.com/adhisimon/evo-ym-center.git"
12 },
13 "keywords": [
14 "evo",
15 "guchi",
16 "gentong",
17 "yahoo",
18 "ym",
19 "ppob"
20 ],
21 "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>",
22 "license": "BSD",
23 "dependencies": {
24 "ini": "~1.3.4",
25 "yahoomessenger": "~0.1.3-Beta",
26 "url": "~0.11.0",
27 "winston": "~1.1.1",
28 "strftime": "~0.9.2",
29 "micro-strptime": "~0.2.2",
30 "request": "~2.65.0",
31 "striptags": "~2.0.4"
32 }
33 }
34