custom-ping.js
3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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 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 sleepMs = (ms) => new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, ms);
});
const pingSender = async () => {
const xid = uniqid();
if (bot) {
const msg = `PING ${xid}`;
bot.send(config.username, msg);
if (
config.custom_ping
&& config.custom_ping.send_to
&& Array.isArray(config.custom_ping.send_to)
) {
const partnerCount = config.custom_ping.send_to.length;
for (let i = 0; i < partnerCount; i += 1) {
// eslint-disable-next-line no-await-in-loop
await sleepMs(1000);
const partner = config.custom_ping.send_to[i];
if (config.custom_ping.verbose) {
logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, {
xid,
partner,
msg,
});
}
bot.send(partner, msg);
}
}
}
await sleepMs(3 * 1000);
pingSender();
};
const setBot = (botFromCaller) => {
logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`);
bot = botFromCaller;
pingSender();
};
exports.setBot = setBot;