Commit 32b39897aff7788a1e57af3516e1c47b77fd4009

Authored by Adhidarma Hadiwinoto
1 parent d52238d9fb
Exists in master

keluarkan ym dari index.js

Showing 2 changed files with 163 additions and 182 deletions Side-by-side Diff

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