Commit 41f4181c1a183c8870cefacb51f393611cbe1640

Authored by Adhidarma Hadiwinoto
1 parent 56a7a389a5
Exists in master

Pemanasan saat awal

Showing 1 changed file with 15 additions and 1 deletions Inline Diff

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 const LRU = require('lru-cache');
5 5
6 const config = require('komodo-sdk/config') 6 const config = require('komodo-sdk/config');
7 const logger = require('komodo-sdk/logger'); 7 const logger = require('komodo-sdk/logger');
8 8
9 let bot; 9 let bot;
10 let _callback; 10 let _callback;
11 11
12 let isReady = false;
13
12 const chats = LRU({ 14 const chats = LRU({
13 max: config.max_chats || 200, 15 max: config.max_chats || 200,
14 maxAge: 1000 * 3600 16 maxAge: 1000 * 3600
15 }); 17 });
16 18
17 function onMessage(msg) { 19 function onMessage(msg) {
18 //console.log(msg); 20 //console.log(msg);
19 21
22 if (!isReady) {
23 logger.info('Pesan diabaikan karena center belum siap (masih melakukan pemanasan)');
24 return;
25 }
26
20 const now = Math.floor(new Date().getTime()/1000); 27 const now = Math.floor(new Date().getTime()/1000);
21 const age = now - msg.date; 28 const age = now - msg.date;
22 29
23 if (now - msg.date > (config.message_max_age || 120 * 1000)){ 30 if (now - msg.date > (config.message_max_age || 120 * 1000)){
24 logger.info('Pesan diabaikan'); 31 logger.info('Pesan diabaikan');
25 return; 32 return;
26 } 33 }
27 34
28 const partner = ( msg.from.username + ( config.transport.username_suffix || '@telegram.org') ).toLowerCase(); 35 const partner = ( msg.from.username + ( config.transport.username_suffix || '@telegram.org') ).toLowerCase();
29 const incomingMessage = msg.text.trim(); 36 const incomingMessage = msg.text.trim();
30 37
31 chats.set(partner, msg.chat.id); 38 chats.set(partner, msg.chat.id);
32 logger.info('Incoming message', {partner: partner, msg: incomingMessage, msgObj: msg, chat_id: chats.get(partner)}); 39 logger.info('Incoming message', {partner: partner, msg: incomingMessage, msgObj: msg, chat_id: chats.get(partner)});
33 40
34 if (_callback && _callback.onIncomingMessage) { 41 if (_callback && _callback.onIncomingMessage) {
35 _callback.onIncomingMessage({ 42 _callback.onIncomingMessage({
36 me: "TELEGRAM", 43 me: "TELEGRAM",
37 partner: partner, 44 partner: partner,
38 msg: incomingMessage 45 msg: incomingMessage
39 }) 46 })
40 } 47 }
41 } 48 }
42 49
43 function init(cb) { 50 function init(cb) {
44 if (!cb) { 51 if (!cb) {
45 logger.warn('Callback is not defined'); 52 logger.warn('Callback is not defined');
46 console.trace(); 53 console.trace();
47 process.exit(1); 54 process.exit(1);
48 return; 55 return;
49 } 56 }
50 57
51 _callback = cb; 58 _callback = cb;
52 bot = new TelegramBot(config.transport.token, {polling: true}); 59 bot = new TelegramBot(config.transport.token, {polling: true});
53 60
54 bot.on('message', onMessage); 61 bot.on('message', onMessage);
62
63 setTimeout(
64 function() {
65 isReady = true;
66 },
67 60 * 1000
68 );
55 } 69 }
56 70
57 function send(partner, msg) { 71 function send(partner, msg) {
58 if (!partner) { 72 if (!partner) {
59 logger.warn('Invalid partner'); 73 logger.warn('Invalid partner');
60 return; 74 return;
61 } 75 }
62 76
63 if (!msg || (typeof msg !== 'string')) { 77 if (!msg || (typeof msg !== 'string')) {
64 logger.warn('Invalid message', {msg: msg}); 78 logger.warn('Invalid message', {msg: msg});
65 return; 79 return;
66 } 80 }
67 81
68 const chat_id = chats.get(partner.toLowerCase()); 82 const chat_id = chats.get(partner.toLowerCase());
69 if (!chat_id) { 83 if (!chat_id) {
70 logger.warn('Unknown chat id for partner:' + partner.toLowerCase()); 84 logger.warn('Unknown chat id for partner:' + partner.toLowerCase());
71 return; 85 return;
72 } 86 }
73 87
74 logger.verbose('Sending message via transport', {transport: 'telegram', chat_id: chat_id, partner: partner, msg: msg}); 88 logger.verbose('Sending message via transport', {transport: 'telegram', chat_id: chat_id, partner: partner, msg: msg});
75 89
76 bot.sendMessage(chat_id, msg); 90 bot.sendMessage(chat_id, msg);
77 } 91 }
78 92
79 exports.init = init; 93 exports.init = init;
80 exports.send = send; 94 exports.send = send;
81 95