index.js 2.08 KB
var telegram = require('node-telegram-bot-api');
var logger = require('./logger.js').start();
var http = require('http');
var evo = require('./evo-im.js');

var config = require('./config.json');

evo.start({
    config: config,
    logger: logger
});

var chat_ids = {};

var options = {
  webHook: {
    port: config.webhook_port,
    key: __dirname+'/key.pem',
    cert: __dirname+'/crt.pem'
  }
};

var bot = new telegram(config.token, options);
bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem');

function deleteChatId(from) {
	delete chat_ids[from];
}

function sendMessage(destination, message) {
    var chat_id = chat_ids[destination];

    if (!chat_id) {
        logger.warn('Can not find approriate chat id for ' + destination + '. Abort sending message.');
        return;
    }

    logger.info('Sending reply to ' + destination + '(' + chat_id + '): ' + message);

    bot.sendMessage(chat_id, message);
}

bot.getMe().then(function (me) {
  logger.info('Hi my name is %s!', me.username);
});

bot.on('text', function (msg) {
	logger.info(msg);

    var from = msg.from.username.toUpperCase() + config.msisdn_suffix;

	var now = Math.floor(new Date().getTime()/1000);

	if (now - msg.date > config.message_max_age){
		var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text;
		logger.info(message, {msg: msg})
		//bot.sendMessage(msg.chat.id, message);
        sendMessage(from, message);
		return;
	}

	chat_ids[from] = msg.chat.id;

    var greeting_prefix = "Pesan anda telah diterima:";
    if (config.greeting_prefix) {
        greeting_prefix = config.greeting_prefix;
    }

	bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text);
    setTimeout(
        evo.onMessage,
        300,
        from, msg.text, msg.date * 1000, sendMessage
    );
});

function  dumpChatIds() {
    var i = 0;
    for (var key in chat_ids) {
        logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key])
    }
}

if (config.dump_chat_ids_interval) {
    setInterval(dumpChatIds, config.dump_chat_ids_interval * 1000);
}