Commit 8c3caf6be9b939c7b81ea34e5454fc6939ccd793
1 parent
27a8745e1f
Exists in
master
ready to run
Showing 2 changed files with 54 additions and 13 deletions Inline Diff
package.json
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 |