Commit ea199b14b32b9fd600c24c0884e245b6e32c0039
1 parent
a8daa20cee
Exists in
master
update pemanggilan setWebHook
Showing 1 changed file with 1 additions and 1 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 | } 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 |