Commit c430ad1efb58b5949e3d94d30eaac0052c705188

Authored by Adhidarma Hadiwinoto
1 parent c3d5ffa759
Exists in master

polling config

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