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