Skip to content

Commit

Permalink
feat(Util): allow array for StringOptions' char (#5566)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
5 people committed Jun 10, 2021
1 parent eb0291d commit fbcbb29
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/structures/interfaces/TextBasedChannel.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,8 @@ class TextBasedChannel {
* Options for splitting a message.
* @typedef {Object} SplitOptions
* @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} [append=''] Text to append to every piece except the last
*/
Expand Down
16 changes: 14 additions & 2 deletions src/util/Util.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,20 @@ class Util {
static splitMessage(text, { maxLength = 2000, char = '\n', prepend = '', append = '' } = {}) {
text = Util.verifyString(text, RangeError, 'MESSAGE_CONTENT_TYPE', false);
if (text.length <= maxLength) return [text];
const splitText = text.split(char);
if (splitText.some(chunk => chunk.length > maxLength)) throw new RangeError('SPLIT_MAX_LEN');
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.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 = [];
let msg = '';
for (const chunk of splitText) {
Expand Down
2 changes: 1 addition & 1 deletion typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3631,7 +3631,7 @@ declare module 'discord.js' {

interface SplitOptions {
maxLength?: number;
char?: string;
char?: string | string[] | RegExp | RegExp[];
prepend?: string;
append?: string;
}
Expand Down

0 comments on commit fbcbb29

Please sign in to comment.