custom-ping.js 2.85 KB
const MODULE_NAME = 'CUSTOM-PING';

const uniqid = require('uniqid');
const config = require('komodo-sdk/config');
const logger = require('tektrans-logger');

let bot;

const allowedFromPartnerList = (
    (config.custom_ping && config.custom_ping.allowed_from_partners) || []
)
    .filter((item) => typeof item === 'string')
    .map((item) => (item || '').trim().toUpperCase())
    .filter((item) => item);

const setBot = (botFromCaller) => {
    logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`);
    bot = botFromCaller;
};
exports.setBot = setBot;

const isPingMessage = (msg) => {
    if (!msg) return false;
    if (typeof msg !== 'string') return false;

    return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0);
};
exports.isPingMessage = isPingMessage;

const isPongMessage = (msg) => {
    if (!msg) return false;
    if (typeof msg !== 'string') return false;

    return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0);
};
exports.isPongMessage = isPongMessage;

const isAllowedPartner = (partner) => {
    if (!config.custom_ping) return false;
    if (config.custom_ping.disable_pong) return false;

    if (config.custom_ping.allowed_from_all) return true;
    return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0;
};
exports.isAllowedPartner = isAllowedPartner;

const sendPong = (xid, partner, pingMessage) => {
    if (!bot) return;
    if (!partner || typeof partner !== 'string' || !partner.trim()) return;

    const tokens = pingMessage.trim().split(/ +/);

    const pongMessage = [
        'PONG',
        (tokens && tokens[1]) || null,
    ].filter((item) => item)
        .join(' ');

    if (config.custom_ping && config.custom_ping.verbose) {
        logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, {
            xid, partner, pongMessage,
        });
    }

    bot.send(partner.trim(), pongMessage);
};
exports.sendPong = sendPong;

const pingSender = () => {
    const xid = uniqid();
    if (
        !bot
        || !config.custom_ping
        || !config.custom_ping.send_to
        || !Array.isArray(config.custom_ping.send_to)
        || !config.custom_ping.send_to.length
    ) return;

    config.custom_ping.send_to.forEach((partner) => {
        const msg = `PING ${xid}`;
        if (config.custom_ping.verbose) {
            logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, {
                xid,
                partner,
                msg,
            });
        }

        bot.send(partner, msg);
    });
};

if (config.custom_ping && config.custom_ping.send_to) {
    const intervalMs = config.custom_ping.interval_ms || (25 * 1000);
    logger.verbose(`${MODULE_NAME} 324034EE: Registering ping sender`, {
        intervalMs,
        partners: config.custom_ping.send_to,
    });

    setInterval(() => {
        pingSender();
    }, intervalMs);
}