"use strict"; const DEFAULT_EXPIRED_MS = 60; const Telegraf = require('telegraf'); const moment = require('moment'); const messagingService = require('komodo-center-messaging-client-lib'); const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger') const addressbook = require('./addressbook'); const bot = new Telegraf(config.telegram.token); bot.start((ctx) => ctx.reply('Selamat datang. Silahkan ketik "HELP" untuk bantuan.')); bot.command('help', (ctx) => { sendToMessagingService( ctx.from.username + ( config.username_suffix || '@telegram.org' ), 'help' ) }) bot.catch((err) => { logger.warn('Error catched', {err: err}); }) bot.on('text', async (ctx) => { const me = ctx.botInfo.username; const from = ctx.from.username + ( config.username_suffix || '@telegram.org' ); const msg = ctx.message.text; const delaySecs = Math.floor(new Date() / 1000 - ctx.message.date); if (!from || !msg) { logger.verbose('Ignoring messages with empty from / msg'); return; } const isExpired = delaySecs > (config.expired_secs || DEFAULT_EXPIRED_MS); if (isExpired) { logger.verbose( 'Ignoring expired messages', { transport: 'telegram', ts: moment(ctx.date).format('YYYY-MM-DD HH:mm:ss'), delay_secs: delaySecs, is_expired: isExpired, chat_id: ctx.chat.id, me: me, from: from, msg: msg } ); return; } logger.info( 'Incoming message from Telegram transport', { transport: 'telegram', ts: moment(ctx.date).format('YYYY-MM-DD HH:mm:ss'), delay_secs: delaySecs, is_expired: isExpired, chat_id: ctx.chat.id, me: me, from: from, msg: msg } ); addressbook.put(from, ctx.chat.id); if (messagingService && messagingService.onIncomingMessage) { messagingService.onIncomingMessage({ me: me, partner: from, msg: msg.trim() }) } }) async function send(partner, msg) { const me = bot.context.botInfo.username; if (!partner || !msg) { return; } const chatId = await addressbook.get(partner); if (!chatId) { logger.info('Not sending message because partner does not exist on address book', {transport: 'telegram', me: me, partner: partner, msg: msg }); } logger.info('Sending message via Telegram transport', { transport: 'telegram', me: me, partner: partner, msg: msg }); bot.telegram.sendMessage(chatId, msg); } function sendToMessagingService(partner, msg) { if (!msg || (typeof msg === 'string' && !msg.trim())) { return; } if (messagingService && messagingService.onIncomingMessage) { messagingService.onIncomingMessage({ me: bot.context.botInfo.username, partner: partner, msg: msg.trim() }) } } bot.launch().then(() => { logger.info(`Connected to Telegram Bot API as "@${ bot.context.botInfo.username }"`); }); messagingService.setTransport(exports); exports.send = send;