From dcbdd261df3fddc30515a19c7c17be5489215791 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <adhisimon@gmail.com>
Date: Fri, 12 Nov 2021 18:04:00 +0700
Subject: [PATCH] Create sender module

---
 lib/custom-ping.js | 12 ++++++++----
 lib/sender.js      | 40 ++++++++++++++++++++++++++++++++++++++++
 lib/transport.js   | 14 +++++++-------
 3 files changed, 55 insertions(+), 11 deletions(-)
 create mode 100644 lib/sender.js

diff --git a/lib/custom-ping.js b/lib/custom-ping.js
index d2db165..9ab44b6 100644
--- a/lib/custom-ping.js
+++ b/lib/custom-ping.js
@@ -4,6 +4,8 @@ const uniqid = require('uniqid');
 const config = require('komodo-sdk/config');
 const logger = require('tektrans-logger');
 
+const sender = require('./sender');
+
 let bot;
 
 const allowedFromPartnerList = (
@@ -56,7 +58,7 @@ const sendPong = (xid, partner, pingMessage) => {
         });
     }
 
-    bot.send(partner.trim(), pongMessage);
+    sender.send(partner.trim(), pongMessage);
 };
 exports.sendPong = sendPong;
 
@@ -72,7 +74,7 @@ const pingSender = async () => {
     if (bot) {
         const msg = `PING ${xid}`;
 
-        bot.send(config.username, msg);
+        sender.send(config.username, msg);
 
         if (
             config.custom_ping
@@ -81,8 +83,10 @@ const pingSender = async () => {
         ) {
             const partnerCount = config.custom_ping.send_to.length;
             for (let i = 0; i < partnerCount; i += 1) {
+                const additionalDelay = Math.random() * 1000;
+
                 // eslint-disable-next-line no-await-in-loop
-                await sleepMs(1000);
+                await sleepMs(1000 + additionalDelay);
 
                 const partner = config.custom_ping.send_to[i];
 
@@ -94,7 +98,7 @@ const pingSender = async () => {
                     });
                 }
 
-                bot.send(partner, msg);
+                sender.send(partner, msg, xid);
             }
         }
     }
diff --git a/lib/sender.js b/lib/sender.js
new file mode 100644
index 0000000..ce658d0
--- /dev/null
+++ b/lib/sender.js
@@ -0,0 +1,40 @@
+const MODULE_NAME = 'SENDER';
+
+const logger = require('tektrans-logger');
+
+let bot;
+
+const init = (botFromCaller) => {
+    logger.verbose(`${MODULE_NAME} D74B30FF: Sender initialized`);
+    bot = botFromCaller;
+};
+exports.init = init;
+
+const send = (partner, msg, xid) => {
+    if (!bot) {
+        logger.verbose(`${MODULE_NAME} 78B04B3B: Not sending message because bot has not been initialized`, {
+            xid,
+            partner,
+            msg,
+        });
+
+        return;
+    }
+
+    logger.verbose(`${MODULE_NAME} 648A5F17: Sending message`, {
+        xid,
+        partner,
+        msg,
+    });
+
+    try {
+        bot.send(partner, msg);
+    } catch (e) {
+        logger.warn(`${MODULE_NAME} C50237D8: Exception on sending message`, {
+            xid,
+            eCode: e.code,
+            eMessage: e.message || e,
+        });
+    }
+};
+exports.send = send;
diff --git a/lib/transport.js b/lib/transport.js
index b3a8453..0c01df3 100644
--- a/lib/transport.js
+++ b/lib/transport.js
@@ -9,12 +9,15 @@ const uniqid = require('uniqid');
 
 const customPing = require('./custom-ping');
 const killOnIdle = require('./kill-on-idle');
+const sender = require('./sender');
 
 let isReady;
 
 bot.on('online', (data) => {
     logger.info(`XMPP transport connected, JID: ${data.jid.user}`);
 
+    sender.init(bot);
+
     if (config.custom_ping) {
         customPing.setBot(bot);
     }
@@ -43,7 +46,7 @@ bot.on('chat', (partner, msg) => {
         return;
     }
 
-    if (partner === config.username.replace(/\/.*$/, '')) {
+    if ((partner || '').toLowerCase() === config.username.toLowerCase().replace(/\/.*$/, '')) {
         return;
     }
 
@@ -136,11 +139,8 @@ bot.on('error', (err) => {
     }
 });
 
-function send(partner, msg) {
-    logger.verbose('Sending message via XMPP transport', {
-        transport: 'xmpp', me: config.username, partner, msg,
-    });
-    bot.send(partner, msg);
+function send(partner, msg, xid) {
+    sender.send(partner, msg, xid);
 }
 
 bot.on('subscribe', (from) => {
@@ -150,7 +150,7 @@ bot.on('subscribe', (from) => {
 });
 
 function ping() {
-    if (isReady) bot.send(config.username, 'PING!');
+    if (isReady) send(config.username, `PING ${uniqid()}`);
 }
 
 function init() {
-- 
1.9.0