Commit d081ace868092c0c984fd69c08d60c3b74868822

Authored by Adhidarma Hadiwinoto
1 parent 80fa2e5fed
Exists in master

perbaikan polling

Showing 1 changed file with 3 additions and 0 deletions Inline Diff

1 var telegram = require('node-telegram-bot-api'); 1 var telegram = require('node-telegram-bot-api');
2 var logger = require('./logger.js').start(); 2 var logger = require('./logger.js').start();
3 var http = require('http'); 3 var http = require('http');
4 var evo = require('./evo-im.js'); 4 var evo = require('./evo-im.js');
5 5
6 var config = require('./config.json'); 6 var config = require('./config.json');
7 7
8 var chat_ids = {}; 8 var chat_ids = {};
9 var botUsername = 'UNKNOWN'; 9 var botUsername = 'UNKNOWN';
10 10
11 var options = {}; 11 var options = {};
12 12
13 if (!Number(config.polling)) { 13 if (!Number(config.polling)) {
14 options.webHook = { 14 options.webHook = {
15 port: config.webhook_port, 15 port: config.webhook_port,
16 key: __dirname+'/key.pem', 16 key: __dirname+'/key.pem',
17 cert: __dirname+'/crt.pem' 17 cert: __dirname+'/crt.pem'
18 } 18 }
19 } else {
20 options.polling = true;
19 } 21 }
22
20 var bot = new telegram(config.token, options); 23 var bot = new telegram(config.token, options);
21 24
22 if (!Number(config.polling)) { 25 if (!Number(config.polling)) {
23 bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem'); 26 bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem');
24 } 27 }
25 28
26 function sendMessage(destination, message, retry) { 29 function sendMessage(destination, message, retry) {
27 if (retry === null || retry === undefined) { 30 if (retry === null || retry === undefined) {
28 retry = 10; 31 retry = 10;
29 } 32 }
30 33
31 var chat_id = getChatId(destination); 34 var chat_id = getChatId(destination);
32 35
33 if (!chat_id) { 36 if (!chat_id) {
34 logger.warn('Can not find approriate chat id for ' + destination + '. Abort sending message.'); 37 logger.warn('Can not find approriate chat id for ' + destination + '. Abort sending message.');
35 return; 38 return;
36 } 39 }
37 40
38 logger.info('Sending reply from ' + botUsername + ' to ' + destination + '(' + chat_id + '): ' + message); 41 logger.info('Sending reply from ' + botUsername + ' to ' + destination + '(' + chat_id + '): ' + message);
39 42
40 try { 43 try {
41 bot.sendMessage(chat_id, message); 44 bot.sendMessage(chat_id, message);
42 } 45 }
43 catch(e) { 46 catch(e) {
44 logger.warn('Exception on sendMessage ' + e, {destination: destination, message: message, retry: retry, error: e}); 47 logger.warn('Exception on sendMessage ' + e, {destination: destination, message: message, retry: retry, error: e});
45 if (retry) { 48 if (retry) {
46 setTimeout(sendMessage, 10000, destination, message, --retry); 49 setTimeout(sendMessage, 10000, destination, message, --retry);
47 } 50 }
48 } 51 }
49 } 52 }
50 53
51 54
52 evo.start({ 55 evo.start({
53 config: config, 56 config: config,
54 logger: logger, 57 logger: logger,
55 sendMessage: sendMessage 58 sendMessage: sendMessage
56 }); 59 });
57 60
58 61
59 function deleteChatId(from) { 62 function deleteChatId(from) {
60 delete chat_ids[from]; 63 delete chat_ids[from];
61 } 64 }
62 65
63 function updateChatId(from, chat_id) { 66 function updateChatId(from, chat_id) {
64 chat_ids[from.toLowerCase()] = chat_id; 67 chat_ids[from.toLowerCase()] = chat_id;
65 logger.verbose('Chat id ' + chat_id + ' ' + from); 68 logger.verbose('Chat id ' + chat_id + ' ' + from);
66 } 69 }
67 70
68 function getChatId(partner) { 71 function getChatId(partner) {
69 try { 72 try {
70 return chat_ids[partner.toLowerCase()]; 73 return chat_ids[partner.toLowerCase()];
71 } 74 }
72 catch(e) { 75 catch(e) {
73 return; 76 return;
74 } 77 }
75 } 78 }
76 79
77 function hasIgnoreKeywords(message) { 80 function hasIgnoreKeywords(message) {
78 if (message.trim().indexOf('/') == 0) { 81 if (message.trim().indexOf('/') == 0) {
79 return true; 82 return true;
80 } 83 }
81 84
82 return false; 85 return false;
83 } 86 }
84 87
85 bot.getMe().then(function (me) { 88 bot.getMe().then(function (me) {
86 logger.info('Hi my name is %s!', me.username); 89 logger.info('Hi my name is %s!', me.username);
87 botUsername = me.username; 90 botUsername = me.username;
88 }); 91 });
89 92
90 bot.on('text', function (msg) { 93 bot.on('text', function (msg) {
91 logger.info('Incoming message for ' + botUsername + ' (' + msg.chat.id + '): ' + msg.text, {message: msg}); 94 logger.info('Incoming message for ' + botUsername + ' (' + msg.chat.id + '): ' + msg.text, {message: msg});
92 95
93 if (!msg.from.username) { 96 if (!msg.from.username) {
94 var replyMessage = "Pesan anda diabaikan, anda belum memiliki username pada telegram: " + msg.text; 97 var replyMessage = "Pesan anda diabaikan, anda belum memiliki username pada telegram: " + msg.text;
95 logger.info(replyMessage, {msg: msg}); 98 logger.info(replyMessage, {msg: msg});
96 bot.sendMessage(msg.chat.id, replyMessage); 99 bot.sendMessage(msg.chat.id, replyMessage);
97 return; 100 return;
98 } 101 }
99 102
100 var from = msg.from.username.toUpperCase() + config.msisdn_suffix; 103 var from = msg.from.username.toUpperCase() + config.msisdn_suffix;
101 updateChatId(from, msg.chat.id); 104 updateChatId(from, msg.chat.id);
102 105
103 var now = Math.floor(new Date().getTime()/1000); 106 var now = Math.floor(new Date().getTime()/1000);
104 var age = now - msg.date; 107 var age = now - msg.date;
105 108
106 if (now - msg.date > config.message_max_age){ 109 if (now - msg.date > config.message_max_age){
107 var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text; 110 var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text;
108 logger.info(message, {msg: msg, age: age, max_age: config.message_max_age}); 111 logger.info(message, {msg: msg, age: age, max_age: config.message_max_age});
109 sendMessage(from, message); 112 sendMessage(from, message);
110 return; 113 return;
111 } 114 }
112 115
113 if (hasIgnoreKeywords(msg.text)) { 116 if (hasIgnoreKeywords(msg.text)) {
114 logger.info("Ignoring message"); 117 logger.info("Ignoring message");
115 return; 118 return;
116 } 119 }
117 120
118 var greeting_prefix = "Pesan anda telah diterima:"; 121 var greeting_prefix = "Pesan anda telah diterima:";
119 if (config.greeting_prefix) { 122 if (config.greeting_prefix) {
120 greeting_prefix = config.greeting_prefix; 123 greeting_prefix = config.greeting_prefix;
121 } 124 }
122 125
123 bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text); 126 bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text);
124 setTimeout( 127 setTimeout(
125 evo.onMessage, 128 evo.onMessage,
126 config.delay_on_message, 129 config.delay_on_message,
127 from, msg.text, msg.date * 1000 130 from, msg.text, msg.date * 1000
128 ); 131 );
129 }); 132 });
130 133
131 function dumpChatIds() { 134 function dumpChatIds() {
132 var i = 0; 135 var i = 0;
133 for (var key in chat_ids) { 136 for (var key in chat_ids) {
134 logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key]) 137 logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key])
135 } 138 }
136 139
137 logger.verbose('TOTAL ' + i + ' chat ids'); 140 logger.verbose('TOTAL ' + i + ' chat ids');
138 } 141 }
139 142
140 if (config.dump_chat_ids_interval) { 143 if (config.dump_chat_ids_interval) {
141 setInterval(dumpChatIds, config.dump_chat_ids_interval); 144 setInterval(dumpChatIds, config.dump_chat_ids_interval);
142 } 145 }
143 146