diff --git a/src/irc.ts b/src/irc.ts index 54ba55ac..7ba3e1ab 100644 --- a/src/irc.ts +++ b/src/irc.ts @@ -1407,9 +1407,11 @@ export class Client extends EventEmitter { if (typeof text === 'undefined') { return; } - await Promise.all(text.toString().split(/\r?\n/).filter((line) => - line.length > 0 - ).map((line) => this.say(channel, '\u0001ACTION ' + line + '\u0001'))); + await Promise.all( + this._splitMessage( + channel + '\u0001ACTION ' + '\u0001', text + ).map((line) => this.say(channel, '\u0001ACTION ' + line + '\u0001')) + ); } // E.g. isUserPrefixMorePowerfulThan("@", "&") @@ -1441,7 +1443,7 @@ export class Client extends EventEmitter { if (!text) { return []; } - return text.toString().split(/\r?\n/).filter((line) => line.length > 0) + return text.toString().split(/\r\n|\r|\n/).filter((line) => line.length > 0) .map((line) => splitLongLines(line, maxLength)) .reduce((a, b) => a.concat(b), []); } diff --git a/test/test-split-messages.js b/test/test-split-messages.js new file mode 100644 index 00000000..366ed290 --- /dev/null +++ b/test/test-split-messages.js @@ -0,0 +1,10 @@ +const { Client } = require('../lib/irc'); +const test = require('tape'); + +test('irc.Client.getSplitMessages', function(t) { + const client = new Client('localhost', 'test', { autoConnect: false }); + t.deepEqual(client.getSplitMessages('#chan', 'foo\nbar\nbaz'), ['foo', 'bar', 'baz']); + t.deepEqual(client.getSplitMessages('#chan', 'foo\r\nbar\r\nbaz'), ['foo', 'bar', 'baz']); + t.deepEqual(client.getSplitMessages('#chan', 'foo\rbar\rbaz'), ['foo', 'bar', 'baz']); + t.end(); +});