Commit 8c3caf6be9b939c7b81ea34e5454fc6939ccd793

Authored by Adhidarma Hadiwinoto
1 parent 27a8745e1f
Exists in master

ready to run

Showing 2 changed files with 54 additions and 13 deletions Side-by-side Diff

... ... @@ -22,6 +22,7 @@
22 22 },
23 23 "dependencies": {
24 24 "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
  25 + "lru-cache": "^4.1.1",
25 26 "node-telegram-bot-api": "^0.30.0",
26 27 "request": "^2.83.0"
27 28 }
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;