diff --git a/.jules/bolt.md b/.jules/bolt.md index e79ba97..e279110 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -1,3 +1,6 @@ ## 2024-05-17 - O(N) lookup optimizations for Discord.js **Learning:** Found two O(N) operations in bot.js and module Tipper scripts when looking up members or guild count. **Action:** Replaced `bot.guilds.array().length` with `bot.guilds.size` (O(1)) and `message.guild.members.find('id', recipient)` with `message.guild.members.get(recipient)` (O(1)). +## 2024-06-13 - Avoid intermediate array allocations in token extraction +**Learning:** Chaining `.trim().split(' ').filter(...)` for parsing command arguments creates unnecessary intermediate arrays, especially in high-traffic message processors. This is an anti-pattern. +**Action:** Use `.match(/\S+/g) || []` to directly extract non-whitespace tokens in a single pass without intermediate array allocations. diff --git a/bot/modules/bot-uptime.js b/bot/modules/bot-uptime.js index 7df747a..69a2f8a 100644 --- a/bot/modules/bot-uptime.js +++ b/bot/modules/bot-uptime.js @@ -6,20 +6,20 @@ exports.commands = ['uptime']; exports.uptime = { usage: '', description: 'gets Uptime for Bot', - process: function(bot, msg, suffix) { + process: function (bot, msg, suffix) { if (suffix != pm2Name) { return; } msg.channel.send( 'i have been Online for ' + - Math.round(bot.uptime / (1000 * 60 * 60 * 24)) + - ' days, ' + - Math.round(bot.uptime / (1000 * 60 * 60)) + - ' hours, ' + - Math.round(bot.uptime / (1000 * 60)) % 60 + - ' minutes, and ' + - Math.round(bot.uptime / 1000) % 60 + - ' seconds' + Math.round(bot.uptime / (1000 * 60 * 60 * 24)) + + ' days, ' + + Math.round(bot.uptime / (1000 * 60 * 60)) + + ' hours, ' + + (Math.round(bot.uptime / (1000 * 60)) % 60) + + ' minutes, and ' + + (Math.round(bot.uptime / 1000) % 60) + + ' seconds', ); - } + }, }; diff --git a/bot/modules/dogeTipper.js b/bot/modules/dogeTipper.js index 54258df..a4bdb01 100644 --- a/bot/modules/dogeTipper.js +++ b/bot/modules/dogeTipper.js @@ -18,13 +18,9 @@ exports.tipdoge = { '**\n **!tipdoge** : Displays This Message\n **!tipdoge balance** : get your balance\n **!tipdoge deposit** : get address for your deposits\n **!tipdoge withdraw
** : withdraw coins to specified address\n **!tipdoge <@user> ** :mention a user with @ and then the amount to tip them\n **!tipdoge private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Dogecoin (DOGE) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/exampleTipper.js b/bot/modules/exampleTipper.js index 25be559..87fe8d0 100644 --- a/bot/modules/exampleTipper.js +++ b/bot/modules/exampleTipper.js @@ -27,13 +27,9 @@ exports.tipltc = { description: '__**Litecoin (LTC) Tipper**__\nTransaction Fees: **' + paytxfee + '**\n **!tipltc** : Displays This Message\n **!tipltc balance** : get your balance\n **!tipltc deposit** : get address for your deposits\n **!tipltc withdraw
** : withdraw coins to specified address\n **!tipltc <@user> ** :mention a user with @ and then the amount to tip them\n **!tipltc private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function(bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function(n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Litecoin (LTC) Tipper**__\nTransaction Fees: **' + paytxfee + '**\n **!tipltc** : Displays This Message\n **!tipltc balance** : get your balance\n **!tipltc deposit** : get address for your deposits\n **!tipltc withdraw
** : withdraw coins to specified address\n **!tipltc <@user> ** :mention a user with @ and then the amount to tip them\n **!tipltc private ** : put private before Mentioning a user to tip them privately.\n\n **<> : Replace with appropriate value.**', diff --git a/bot/modules/ftcTipper.js b/bot/modules/ftcTipper.js index 22bb0b9..ecec605 100644 --- a/bot/modules/ftcTipper.js +++ b/bot/modules/ftcTipper.js @@ -18,13 +18,9 @@ exports.tipftc = { '**\n **!tipftc** : Displays This Message\n **!tipftc balance** : get your balance\n **!tipftc deposit** : get address for your deposits\n **!tipftc withdraw
** : withdraw coins to specified address\n **!tipftc <@user> ** :mention a user with @ and then the amount to tip them\n **!tipftc private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Feathercoin (FTC) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/helpTipper.js b/bot/modules/helpTipper.js index 95041c9..f87ef49 100644 --- a/bot/modules/helpTipper.js +++ b/bot/modules/helpTipper.js @@ -11,27 +11,41 @@ exports.commands = ['tiphelp']; exports.tiphelp = { usage: '', description: 'This commands has been changed to currency specific commands!', - process: function(bot, message) { + process: function (bot, message) { message.author.send( - '__**Ravencoin (RVN) Tipper**__\nTransaction Fees: **' + ravenFee + '**\n **!tiprvn balance** : get your balance\n **!tiprvn deposit** : get address for your deposits\n **!tiprvn withdraw
** : withdraw coins to specified address\n **!tiprvn <@user> ** :mention a user with @ and then the amount to tip them\n **!tiprvn private ** : put private before Mentioning a user to tip them privately.\n' + '__**Ravencoin (RVN) Tipper**__\nTransaction Fees: **' + + ravenFee + + '**\n **!tiprvn balance** : get your balance\n **!tiprvn deposit** : get address for your deposits\n **!tiprvn withdraw
** : withdraw coins to specified address\n **!tiprvn <@user> ** :mention a user with @ and then the amount to tip them\n **!tiprvn private ** : put private before Mentioning a user to tip them privately.\n', ); message.author.send( - '__**Dogecoin (DOGE) Tipper**__\nTransaction Fees: **' + dogeFee + '**\n **!tipdoge balance** : get your balance\n **!tipdoge deposit** : get address for your deposits\n **!tipdoge withdraw
** : withdraw coins to specified address\n **!tipdoge <@user> ** :mention a user with @ and then the amount to tip them\n **!tipdoge private ** : put private before Mentioning a user to tip them privately.\n' + '__**Dogecoin (DOGE) Tipper**__\nTransaction Fees: **' + + dogeFee + + '**\n **!tipdoge balance** : get your balance\n **!tipdoge deposit** : get address for your deposits\n **!tipdoge withdraw
** : withdraw coins to specified address\n **!tipdoge <@user> ** :mention a user with @ and then the amount to tip them\n **!tipdoge private ** : put private before Mentioning a user to tip them privately.\n', ); message.author.send( - '__**LBRY Credit (LBC) Tipper**__\nTransaction Fees: **' + lbryFee + '**\n **!tiplbc balance** : get your balance\n **!tiplbc deposit** : get address for your deposits\n **!tiplbc withdraw
** : withdraw coins to specified address\n **!tiplbc <@user> ** :mention a user with @ and then the amount to tip them\n **!tiplbc private ** : put private before Mentioning a user to tip them privately.\n' + '__**LBRY Credit (LBC) Tipper**__\nTransaction Fees: **' + + lbryFee + + '**\n **!tiplbc balance** : get your balance\n **!tiplbc deposit** : get address for your deposits\n **!tiplbc withdraw
** : withdraw coins to specified address\n **!tiplbc <@user> ** :mention a user with @ and then the amount to tip them\n **!tiplbc private ** : put private before Mentioning a user to tip them privately.\n', ); message.author.send( - '__**Proton (PROTON) Tipper**__\nTransaction Fees: **' + protonFee + '**\n **!tipproton balance** : get your balance\n **!tipproton deposit** : get address for your deposits\n **!tipproton withdraw
** : withdraw coins to specified address\n **!tipproton <@user> ** :mention a user with @ and then the amount to tip them\n **!tipproton private ** : put private before Mentioning a user to tip them privately.\n' + '__**Proton (PROTON) Tipper**__\nTransaction Fees: **' + + protonFee + + '**\n **!tipproton balance** : get your balance\n **!tipproton deposit** : get address for your deposits\n **!tipproton withdraw
** : withdraw coins to specified address\n **!tipproton <@user> ** :mention a user with @ and then the amount to tip them\n **!tipproton private ** : put private before Mentioning a user to tip them privately.\n', ); message.author.send( - '__**Uniform Fiscal Object (UFO) Tipper**__\nTransaction Fees: **' + ufoFee + '**\n **!tipufo balance** : get your balance\n **!tipufo deposit** : get address for your deposits\n **!tipufo withdraw
** : withdraw coins to specified address\n **!tipufo <@user> ** :mention a user with @ and then the amount to tip them\n **!tipufo private ** : put private before Mentioning a user to tip them privately.\n' + '__**Uniform Fiscal Object (UFO) Tipper**__\nTransaction Fees: **' + + ufoFee + + '**\n **!tipufo balance** : get your balance\n **!tipufo deposit** : get address for your deposits\n **!tipufo withdraw
** : withdraw coins to specified address\n **!tipufo <@user> ** :mention a user with @ and then the amount to tip them\n **!tipufo private ** : put private before Mentioning a user to tip them privately.\n', ); message.author.send( - '__**Phoenixcoin (PXC) Tipper**__\nTransaction Fees: **' + phoenixFee + '**\n **!tippxc balance** : get your balance\n **!tippxc deposit** : get address for your deposits\n **!tippxc withdraw
** : withdraw coins to specified address\n **!tippxc <@user> ** :mention a user with @ and then the amount to tip them\n **!tippxc private ** : put private before Mentioning a user to tip them privately.\n' + '__**Phoenixcoin (PXC) Tipper**__\nTransaction Fees: **' + + phoenixFee + + '**\n **!tippxc balance** : get your balance\n **!tippxc deposit** : get address for your deposits\n **!tippxc withdraw
** : withdraw coins to specified address\n **!tippxc <@user> ** :mention a user with @ and then the amount to tip them\n **!tippxc private ** : put private before Mentioning a user to tip them privately.\n', ); message.author.send( - '__**Feathercoin (FTC) Tipper**__\nTransaction Fees: **' + featherFee + '**\n **!tipftc balance** : get your balance\n **!tipftc deposit** : get address for your deposits\n **!tipufo withdraw
** : withdraw coins to specified address\n **!tipftc <@user> ** :mention a user with @ and then the amount to tip them\n **!tipftc private ** : put private before Mentioning a user to tip them privately.\n\n **<> : Replace with appropriate value.**' + '__**Feathercoin (FTC) Tipper**__\nTransaction Fees: **' + + featherFee + + '**\n **!tipftc balance** : get your balance\n **!tipftc deposit** : get address for your deposits\n **!tipufo withdraw
** : withdraw coins to specified address\n **!tipftc <@user> ** :mention a user with @ and then the amount to tip them\n **!tipftc private ** : put private before Mentioning a user to tip them privately.\n\n **<> : Replace with appropriate value.**', ); - } + }, }; diff --git a/bot/modules/lbcTipper.js b/bot/modules/lbcTipper.js index 09ff576..c6b5fe9 100644 --- a/bot/modules/lbcTipper.js +++ b/bot/modules/lbcTipper.js @@ -18,13 +18,9 @@ exports.tiplbc = { '**\n **!tiplbc** : Displays This Message\n **!tiplbc balance** : get your balance\n **!tiplbc deposit** : get address for your deposits\n **!tiplbc withdraw
** : withdraw coins to specified address\n **!tiplbc <@user> ** :mention a user with @ and then the amount to tip them\n **!tiplbc private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**LBRY Credit (LBC) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/protonTipper.js b/bot/modules/protonTipper.js index 53da2cd..b2b515e 100644 --- a/bot/modules/protonTipper.js +++ b/bot/modules/protonTipper.js @@ -18,13 +18,9 @@ exports.tipproton = { '**\n **!tipproton** : Displays This Message\n **!tipproton balance** : get your balance\n **!tipproton deposit** : get address for your deposits\n **!tipproton withdraw
** : withdraw coins to specified address\n **!tipproton <@user> ** :mention a user with @ and then the amount to tip them\n **!tipproton private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Proton (PROTON) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/pxcTipper.js b/bot/modules/pxcTipper.js index db95dc4..af15a07 100644 --- a/bot/modules/pxcTipper.js +++ b/bot/modules/pxcTipper.js @@ -18,13 +18,9 @@ exports.tippxc = { '**\n **!tippxc** : Displays This Message\n **!tippxc balance** : get your balance\n **!tippxc deposit** : get address for your deposits\n **!tippxc withdraw
** : withdraw coins to specified address\n **!tippxc <@user> ** :mention a user with @ and then the amount to tip them\n **!tippxc private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Phoenixcoin (PXC) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/rvnTipper.js b/bot/modules/rvnTipper.js index 814abc4..16b6314 100644 --- a/bot/modules/rvnTipper.js +++ b/bot/modules/rvnTipper.js @@ -18,13 +18,9 @@ exports.tiprvn = { '**\n **!tiprvn** : Displays This Message\n **!tiprvn balance** : get your balance\n **!tiprvn deposit** : get address for your deposits\n **!tiprvn withdraw
** : withdraw coins to specified address\n **!tiprvn <@user> ** :mention a user with @ and then the amount to tip them\n **!tiprvn private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Ravencoin (RVN) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/ufoTipper.js b/bot/modules/ufoTipper.js index 74c1cd5..cdc921e 100644 --- a/bot/modules/ufoTipper.js +++ b/bot/modules/ufoTipper.js @@ -18,13 +18,9 @@ exports.tipufo = { '**\n **!tipufo** : Displays This Message\n **!tipufo balance** : get your balance\n **!tipufo deposit** : get address for your deposits\n **!tipufo withdraw
** : withdraw coins to specified address\n **!tipufo <@user> ** :mention a user with @ and then the amount to tip them\n **!tipufo private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Uniform Fiscal Object (UFO) Tipper**__\nTransaction Fees: **' + diff --git a/bot/modules/vtlTipper.js b/bot/modules/vtlTipper.js index 040a3fa..d4dff7c 100644 --- a/bot/modules/vtlTipper.js +++ b/bot/modules/vtlTipper.js @@ -18,13 +18,9 @@ exports.tipvtl = { '**\n **!tipvtl** : Displays This Message\n **!tipvtl balance** : get your balance\n **!tipvtl deposit** : get address for your deposits\n **!tipvtl withdraw
** : withdraw coins to specified address\n **!tipvtl <@user> ** :mention a user with @ and then the amount to tip them\n **!tipvtl private ** : put private before Mentioning a user to tip them privately.\n\n has a default txfee of ' + paytxfee, process: async function (bot, msg, suffix) { + // Optimized token extraction: avoids intermediate array allocations let tipper = msg.author.id.replace('!', ''), - words = msg.content - .trim() - .split(' ') - .filter(function (n) { - return n !== ''; - }), + words = msg.content.match(/\S+/g) || [], subcommand = words.length >= 2 ? words[1] : 'help', helpmsg = '__**Vertical (VTL) Tipper**__\nTransaction Fees: **' +