Commit 6ea642a8b6f220a1ab7b74268af71cc057c1ed0e
1 parent
c430ad1efb
Exists in
master
hapus kelebihan tutup kurung kurawal
Showing 1 changed file with 1 additions and 2 deletions Inline Diff
index.js
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 |