"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'); let bot; let _callback; 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'); console.trace(); process.exit(1); return; } _callback = cb; bot = new TelegramBot(config.transport.token, {polling: true}); bot.on('message', onMessage); } function send(partner, msg) { if (!partner) { logger.warn('Invalid partner'); return; } if (!msg || (typeof msg !== 'string')) { logger.warn('Invalid message', {msg: msg}); 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; exports.send = send;