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 Inline Diff

1 { 1 {
2 "name": "komodo-center-telegram", 2 "name": "komodo-center-telegram",
3 "version": "0.9.0", 3 "version": "0.9.0",
4 "description": "Komodo Center using Telegram transport", 4 "description": "Komodo Center using Telegram transport",
5 "main": "index.js", 5 "main": "index.js",
6 "scripts": { 6 "scripts": {
7 "test": "mocha" 7 "test": "mocha"
8 }, 8 },
9 "repository": { 9 "repository": {
10 "type": "git", 10 "type": "git",
11 "url": "git@gitlab.kodesumber.com:komodo/komodo-center-telegram.git" 11 "url": "git@gitlab.kodesumber.com:komodo/komodo-center-telegram.git"
12 }, 12 },
13 "keywords": [ 13 "keywords": [
14 "ppob", 14 "ppob",
15 "komodo", 15 "komodo",
16 "telegram" 16 "telegram"
17 ], 17 ],
18 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", 18 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
19 "license": "ISC", 19 "license": "ISC",
20 "devDependencies": { 20 "devDependencies": {
21 "should": "^13.2.1" 21 "should": "^13.2.1"
22 }, 22 },
23 "dependencies": { 23 "dependencies": {
24 "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git", 24 "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
25 "lru-cache": "^4.1.1",
25 "node-telegram-bot-api": "^0.30.0", 26 "node-telegram-bot-api": "^0.30.0",
26 "request": "^2.83.0" 27 "request": "^2.83.0"
27 } 28 }
28 } 29 }
29 30
transport-telegram.js
1 "use strict"; 1 "use strict";
2 2
3 const TelegramBot = require('node-telegram-bot-api'); 3 const TelegramBot = require('node-telegram-bot-api');
4 const LRU = require('lru-cache');
4 5
5 const config = require('komodo-sdk/config') 6 const config = require('komodo-sdk/config')
6 const logger = require('komodo-sdk/logger'); 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) => { 12 const chats = LRU({
11 const chatId = msg.chat.id; 13 max: config.max_chats || 200,
12 14 maxAge: 1000 * 3600
13 // send a message to the chat acknowledging receipt of their message
14 bot.sendMessage(chatId, 'Received your message');
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 function init(cb) { 43 function init(cb) {
18 if (!cb) { 44 if (!cb) {
19 logger.warn('Callback is not defined'); 45 logger.warn('Callback is not defined');
20 console.trace(); 46 console.trace();
21 process.exit(1); 47 process.exit(1);
22 return; 48 return;
23 } 49 }
24 50
25 _callback = cb; 51 _callback = cb;
52 bot = new TelegramBot(config.transport.token, {polling: true});
26 53
27 bot.connect({ 54 bot.on('message', onMessage);
28 jid: config.username,
29 password: config.password,
30 host: config.xmpp_host
31 });
32 } 55 }
33 56
34 function send(partner, msg) { 57 function send(partner, msg) {
35 logger.verbose('Sending message via transport', {transport: 'telegram', partner: partner, msg: msg}); 58 if (!partner) {
36 //bot.send(partner, msg); 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