Commit 6ea642a8b6f220a1ab7b74268af71cc057c1ed0e

Authored by Adhidarma Hadiwinoto
1 parent c430ad1efb
Exists in master

hapus kelebihan tutup kurung kurawal

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