Commit 8c3caf6be9b939c7b81ea34e5454fc6939ccd793
1 parent
27a8745e1f
Exists in
master
ready to run
Showing 2 changed files with 54 additions and 13 deletions Side-by-side Diff
package.json
transport-telegram.js
1 | 1 | "use strict"; |
2 | 2 | |
3 | 3 | const TelegramBot = require('node-telegram-bot-api'); |
4 | +const LRU = require('lru-cache'); | |
4 | 5 | |
5 | 6 | const config = require('komodo-sdk/config') |
6 | 7 | const logger = require('komodo-sdk/logger'); |
7 | 8 | |
8 | -const bot = new TelegramBot(config.transport.token, {polling: true}); | |
9 | +let bot; | |
10 | +let _callback; | |
9 | 11 | |
10 | -bot.on('message', (msg) => { | |
11 | - const chatId = msg.chat.id; | |
12 | - | |
13 | - // send a message to the chat acknowledging receipt of their message | |
14 | - bot.sendMessage(chatId, 'Received your message'); | |
12 | +const chats = LRU({ | |
13 | + max: config.max_chats || 200, | |
14 | + maxAge: 1000 * 3600 | |
15 | 15 | }); |
16 | 16 | |
17 | +function onMessage(msg) { | |
18 | + //console.log(msg); | |
19 | + | |
20 | + const now = Math.floor(new Date().getTime()/1000); | |
21 | + const age = now - msg.date; | |
22 | + | |
23 | + if (now - msg.date > (config.message_max_age || 120 * 1000)){ | |
24 | + logger.info('Pesan diabaikan'); | |
25 | + return; | |
26 | + } | |
27 | + | |
28 | + const partner = ( msg.from.username + ( config.transport.username_suffix || '@telegram.org') ).toLowerCase(); | |
29 | + const incomingMessage = msg.text.trim(); | |
30 | + | |
31 | + chats.set(partner, msg.chat.id); | |
32 | + logger.info('Incoming message', {partner: partner, msg: incomingMessage, msgObj: msg, chat_id: chats.get(partner)}); | |
33 | + | |
34 | + if (_callback && _callback.onIncomingMessage) { | |
35 | + _callback.onIncomingMessage({ | |
36 | + me: "TELEGRAM", | |
37 | + partner: partner, | |
38 | + msg: incomingMessage | |
39 | + }) | |
40 | + } | |
41 | +} | |
42 | + | |
17 | 43 | function init(cb) { |
18 | 44 | if (!cb) { |
19 | 45 | logger.warn('Callback is not defined'); |
... | ... | @@ -23,17 +49,31 @@ function init(cb) { |
23 | 49 | } |
24 | 50 | |
25 | 51 | _callback = cb; |
52 | + bot = new TelegramBot(config.transport.token, {polling: true}); | |
26 | 53 | |
27 | - bot.connect({ | |
28 | - jid: config.username, | |
29 | - password: config.password, | |
30 | - host: config.xmpp_host | |
31 | - }); | |
54 | + bot.on('message', onMessage); | |
32 | 55 | } |
33 | 56 | |
34 | 57 | function send(partner, msg) { |
35 | - logger.verbose('Sending message via transport', {transport: 'telegram', partner: partner, msg: msg}); | |
36 | - //bot.send(partner, msg); | |
58 | + if (!partner) { | |
59 | + logger.warn('Invalid partner'); | |
60 | + return; | |
61 | + } | |
62 | + | |
63 | + if (!msg) { | |
64 | + logger.warn('Invalid message'); | |
65 | + return; | |
66 | + } | |
67 | + | |
68 | + const chat_id = chats.get(partner.toLowerCase()); | |
69 | + if (!chat_id) { | |
70 | + logger.warn('Unknown chat id for partner:' + partner.toLowerCase()); | |
71 | + return; | |
72 | + } | |
73 | + | |
74 | + logger.verbose('Sending message via transport', {transport: 'telegram', chat_id: chat_id, partner: partner, msg: msg}); | |
75 | + | |
76 | + bot.sendMessage(chat_id, msg); | |
37 | 77 | } |
38 | 78 | |
39 | 79 | exports.init = init; |