Commit ea199b14b32b9fd600c24c0884e245b6e32c0039

Authored by Adhidarma Hadiwinoto
1 parent a8daa20cee
Exists in master

update pemanggilan setWebHook

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