Local splitmessage

This commit is contained in:
Dragon Fire
2024-03-19 23:17:50 -04:00
parent 5ff9136441
commit 429d7b2e10
2 changed files with 32 additions and 3 deletions
+3 -3
View File
@@ -2,7 +2,7 @@
const util = require('util');
const discord = require('discord.js');
const tags = require('common-tags');
const { escapeRegex } = require('../../util/Util');
const { escapeRegex, splitMessage } = require('../../util/Util');
const Command = require('../../framework/Command');
const nl = '!!NL!!';
@@ -88,14 +88,14 @@ module.exports = class EvalCommand extends Command {
const prepend = `\`\`\`javascript\n${prependPart}\n`;
const append = `\n${appendPart}\n\`\`\``;
if (input) {
return discord.splitMessage(tags.stripIndents`
return splitMessage(tags.stripIndents`
*Executed in ${hrDiff[0] > 0 ? `${hrDiff[0]}s ` : ''}${hrDiff[1] / 1000000}ms.*
\`\`\`javascript
${inspected}
\`\`\`
`, { maxLength: 1900, prepend, append });
} else {
return discord.splitMessage(tags.stripIndents`
return splitMessage(tags.stripIndents`
*Callback executed after ${hrDiff[0] > 0 ? `${hrDiff[0]}s ` : ''}${hrDiff[1] / 1000000}ms.*
\`\`\`javascript
${inspected}
+29
View File
@@ -408,4 +408,33 @@ module.exports = class Util {
if (spoilers !== 0 && (spoilers && (spoilers % 2))) clean += '||';
return clean;
}
static splitMessage(text, { maxLength = 2000, char = '\n', prepend = '', append = '' } = {}) {
text = Util.verifyString(text);
if (text.length <= maxLength) return [text];
let splitText = [text];
if (Array.isArray(char)) {
while (char.length > 0 && splitText.some(elem => elem.length > maxLength)) {
const currentChar = char.shift();
if (currentChar instanceof RegExp) {
splitText = splitText.flatMap(chunk => chunk.match(currentChar));
} else {
splitText = splitText.flatMap(chunk => chunk.split(currentChar));
}
}
} else {
splitText = text.split(char);
}
if (splitText.some(elem => elem.length > maxLength)) throw new RangeError('SPLIT_MAX_LEN');
const messages = [];
let msg = '';
for (const chunk of splitText) {
if (msg && (msg + char + chunk + append).length > maxLength) {
messages.push(msg + append);
msg = prepend;
}
msg += (msg && msg !== prepend ? char : '') + chunk;
}
return messages.concat(msg).filter(m => m);
}
};