diff --git a/package.json b/package.json index 6be04d4..6e587d2 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git", + "lru-cache": "^4.1.1", "node-telegram-bot-api": "^0.30.0", "request": "^2.83.0" } diff --git a/transport-telegram.js b/transport-telegram.js index d33d28a..7201a18 100644 --- a/transport-telegram.js +++ b/transport-telegram.js @@ -1,19 +1,45 @@ "use strict"; const TelegramBot = require('node-telegram-bot-api'); +const LRU = require('lru-cache'); const config = require('komodo-sdk/config') const logger = require('komodo-sdk/logger'); -const bot = new TelegramBot(config.transport.token, {polling: true}); +let bot; +let _callback; -bot.on('message', (msg) => { - const chatId = msg.chat.id; - - // send a message to the chat acknowledging receipt of their message - bot.sendMessage(chatId, 'Received your message'); +const chats = LRU({ + max: config.max_chats || 200, + maxAge: 1000 * 3600 }); +function onMessage(msg) { + //console.log(msg); + + const now = Math.floor(new Date().getTime()/1000); + const age = now - msg.date; + + if (now - msg.date > (config.message_max_age || 120 * 1000)){ + logger.info('Pesan diabaikan'); + return; + } + + const partner = ( msg.from.username + ( config.transport.username_suffix || '@telegram.org') ).toLowerCase(); + const incomingMessage = msg.text.trim(); + + chats.set(partner, msg.chat.id); + logger.info('Incoming message', {partner: partner, msg: incomingMessage, msgObj: msg, chat_id: chats.get(partner)}); + + if (_callback && _callback.onIncomingMessage) { + _callback.onIncomingMessage({ + me: "TELEGRAM", + partner: partner, + msg: incomingMessage + }) + } +} + function init(cb) { if (!cb) { logger.warn('Callback is not defined'); @@ -23,17 +49,31 @@ function init(cb) { } _callback = cb; + bot = new TelegramBot(config.transport.token, {polling: true}); - bot.connect({ - jid: config.username, - password: config.password, - host: config.xmpp_host - }); + bot.on('message', onMessage); } function send(partner, msg) { - logger.verbose('Sending message via transport', {transport: 'telegram', partner: partner, msg: msg}); - //bot.send(partner, msg); + if (!partner) { + logger.warn('Invalid partner'); + return; + } + + if (!msg) { + logger.warn('Invalid message'); + return; + } + + const chat_id = chats.get(partner.toLowerCase()); + if (!chat_id) { + logger.warn('Unknown chat id for partner:' + partner.toLowerCase()); + return; + } + + logger.verbose('Sending message via transport', {transport: 'telegram', chat_id: chat_id, partner: partner, msg: msg}); + + bot.sendMessage(chat_id, msg); } exports.init = init;