transport-telegram.js
1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"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) {
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;
exports.send = send;