Commit a7924beb7b6a11384cd7823efa3e7da398042e76

Authored by Adhidarma Hadiwinoto
1 parent 80149efea9
Exists in master

penanganan pengirim tanpa username

Showing 1 changed file with 7 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 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 } 71 }
72 72
73 function hasIgnoreKeywords(message) { 73 function hasIgnoreKeywords(message) {
74 if (message.trim().indexOf('/') == 0) { 74 if (message.trim().indexOf('/') == 0) {
75 return true; 75 return true;
76 } 76 }
77 77
78 return false; 78 return false;
79 } 79 }
80 80
81 bot.getMe().then(function (me) { 81 bot.getMe().then(function (me) {
82 logger.info('Hi my name is %s!', me.username); 82 logger.info('Hi my name is %s!', me.username);
83 botUsername = me.username; 83 botUsername = me.username;
84 }); 84 });
85 85
86 bot.on('text', function (msg) { 86 bot.on('text', function (msg) {
87 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});
88 88
89 if (!msg.from.username) {
90 var replyMessage = "Pesan anda diabaikan, anda belum memiliki username pada telegram: " + msg.text;
91 logger.info(replyMessage, {msg: msg});
92 bot.sendMessage(msg.chat.id, replyMessage);
93 return;
94 }
95
89 var from = msg.from.username.toUpperCase() + config.msisdn_suffix; 96 var from = msg.from.username.toUpperCase() + config.msisdn_suffix;
90 updateChatId(from, msg.chat.id); 97 updateChatId(from, msg.chat.id);
91 98
92 var now = Math.floor(new Date().getTime()/1000); 99 var now = Math.floor(new Date().getTime()/1000);
93 var age = now - msg.date; 100 var age = now - msg.date;
94 101
95 if (now - msg.date > config.message_max_age){ 102 if (now - msg.date > config.message_max_age){
96 var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text; 103 var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text;
97 logger.info(message, {msg: msg, age: age, max_age: config.message_max_age}); 104 logger.info(message, {msg: msg, age: age, max_age: config.message_max_age});
98 sendMessage(from, message); 105 sendMessage(from, message);
99 return; 106 return;
100 } 107 }
101 108
102 if (hasIgnoreKeywords(msg.text)) { 109 if (hasIgnoreKeywords(msg.text)) {
103 logger.info("Ignoring message"); 110 logger.info("Ignoring message");
104 return; 111 return;
105 } 112 }
106 113
107 var greeting_prefix = "Pesan anda telah diterima:"; 114 var greeting_prefix = "Pesan anda telah diterima:";
108 if (config.greeting_prefix) { 115 if (config.greeting_prefix) {
109 greeting_prefix = config.greeting_prefix; 116 greeting_prefix = config.greeting_prefix;
110 } 117 }
111 118
112 bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text); 119 bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text);
113 setTimeout( 120 setTimeout(
114 evo.onMessage, 121 evo.onMessage,
115 config.delay_on_message, 122 config.delay_on_message,
116 from, msg.text, msg.date * 1000 123 from, msg.text, msg.date * 1000
117 ); 124 );
118 }); 125 });
119 126
120 function dumpChatIds() { 127 function dumpChatIds() {
121 var i = 0; 128 var i = 0;
122 for (var key in chat_ids) { 129 for (var key in chat_ids) {
123 logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key]) 130 logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key])
124 } 131 }
125 132
126 logger.verbose('TOTAL ' + i + ' chat ids'); 133 logger.verbose('TOTAL ' + i + ' chat ids');
127 } 134 }
128 135
129 if (config.dump_chat_ids_interval) { 136 if (config.dump_chat_ids_interval) {
130 setInterval(dumpChatIds, config.dump_chat_ids_interval); 137 setInterval(dumpChatIds, config.dump_chat_ids_interval);
131 } 138 }
132 139