mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 12:03:31 +01:00
feat(Util): allow array for StringOptions' char (#5566)
Co-authored-by: Voltrex <62040526+VoltrexMaster@users.noreply.github.com> Co-authored-by: SpaceEEC <spaceeec@yahoo.com> Co-authored-by: Papaia <43409674+papaia@users.noreply.github.com> Co-authored-by: Noel <icrawltogo@gmail.com>
This commit is contained in:
@@ -102,7 +102,8 @@ class TextBasedChannel {
|
|||||||
* Options for splitting a message.
|
* Options for splitting a message.
|
||||||
* @typedef {Object} SplitOptions
|
* @typedef {Object} SplitOptions
|
||||||
* @property {number} [maxLength=2000] Maximum character length per message piece
|
* @property {number} [maxLength=2000] Maximum character length per message piece
|
||||||
* @property {string} [char='\n'] Character to split the message with
|
* @property {string|string[]|RegExp|RegExp[]} [char='\n'] Character(s) or Regex(s) to split the message with,
|
||||||
|
* an array can be used to split multiple times
|
||||||
* @property {string} [prepend=''] Text to prepend to every piece except the first
|
* @property {string} [prepend=''] Text to prepend to every piece except the first
|
||||||
* @property {string} [append=''] Text to append to every piece except the last
|
* @property {string} [append=''] Text to append to every piece except the last
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -64,8 +64,20 @@ class Util {
|
|||||||
static splitMessage(text, { maxLength = 2000, char = '\n', prepend = '', append = '' } = {}) {
|
static splitMessage(text, { maxLength = 2000, char = '\n', prepend = '', append = '' } = {}) {
|
||||||
text = Util.verifyString(text, RangeError, 'MESSAGE_CONTENT_TYPE', false);
|
text = Util.verifyString(text, RangeError, 'MESSAGE_CONTENT_TYPE', false);
|
||||||
if (text.length <= maxLength) return [text];
|
if (text.length <= maxLength) return [text];
|
||||||
const splitText = text.split(char);
|
let splitText = [text];
|
||||||
if (splitText.some(chunk => chunk.length > maxLength)) throw new RangeError('SPLIT_MAX_LEN');
|
if (Array.isArray(char)) {
|
||||||
|
while (char.length > 0 && splitText.some(elem => elem.length > maxLength)) {
|
||||||
|
const currentChar = char.shift();
|
||||||
|
if (currentChar instanceof RegExp) {
|
||||||
|
splitText = splitText.map(chunk => chunk.match(currentChar));
|
||||||
|
} else {
|
||||||
|
splitText = splitText.map(chunk => chunk.split(currentChar));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
splitText = text.split(char);
|
||||||
|
}
|
||||||
|
if (splitText.some(elem => elem.length > maxLength)) throw new RangeError('SPLIT_MAX_LEN');
|
||||||
const messages = [];
|
const messages = [];
|
||||||
let msg = '';
|
let msg = '';
|
||||||
for (const chunk of splitText) {
|
for (const chunk of splitText) {
|
||||||
|
|||||||
2
typings/index.d.ts
vendored
2
typings/index.d.ts
vendored
@@ -3631,7 +3631,7 @@ declare module 'discord.js' {
|
|||||||
|
|
||||||
interface SplitOptions {
|
interface SplitOptions {
|
||||||
maxLength?: number;
|
maxLength?: number;
|
||||||
char?: string;
|
char?: string | string[] | RegExp | RegExp[];
|
||||||
prepend?: string;
|
prepend?: string;
|
||||||
append?: string;
|
append?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user