Commit bfd6b2b9856490442df8403cce2adb146c8acb5c

Authored by Adhidarma Hadiwinoto
1 parent 3f8c030761
Exists in master

logging when ignoring message

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