Performant, streaming IRC message parser
JavaScript
Latest commit a87053c Aug 8, 2015 @sigkell Fix #18
Permalink
Failed to load latest commit information.
.gitignore Begin work on 3.0 Feb 20, 2015
.travis.yml Begin work on 3.0 Feb 20, 2015
LICENSE.md Bump license copyright Feb 21, 2015
README.md Clarify README Feb 21, 2015
index.js Fix #18 Aug 8, 2015
package.json Fix #18 Aug 8, 2015
test.js Fix #18 Aug 8, 2015

README.md

irc-message Build Status

Performant, streaming IRC message parser

irc-message provides an object stream capable of parsing RFC1459-compliant IRC messages, with support for IRCv3 message tags. This also includes server-to-server protocols such as TS6, Spanning Tree, and the UnrealIRCd protocol.

Installation

npm install irc-message

Usage

createStream(options)

Returns an object stream, taking in Buffers/Strings of raw IRC data. Data should not be line-buffered, this stream handles splitting and buffering automatically. and pushing objects containing the following keys.

  • raw - unparsed IRC message (string)
  • tags - IRCv3 message tags
  • prefix - message prefix/source
  • command - message command/verb
  • params - an array of middle and trailing parameters

Optional options object supports

  • parsePrefix - replace the prefix with an object generated by irc-prefix-parser. Defaults to false.
  • convertTimestamp - if the message has a time tag, convert it into a JavaScript Date object (see server-time spec for reference). Defaults to false.
var net = require('net')
var ircMsg = require('irc-message')

net.connect(6667, 'irc.freenode.net')
    .pipe(ircMsg.createStream())
    .on('data', function(message) {
        console.log(message)
    })

parse(data)

You can also access the message parser directly. The parser function expects a string without any CRLF sequences. If the string is malformed, null is returned. Otherwise, an object representing the message is returned (see createStream() for format).

var parse = require('irc-message').parse

console.log(parse(':hello!sir@madam PRIVMSG #test :Hello, world!'))
/* { 
 *   raw: ':hello!sir@madam PRIVMSG #test :Hello, world!',
 *   tags: {}, 
 *   prefix: 'hello!sir@madam', 
 *   command: 'PRIVMSG',
 *   params: ['#test', 'Hello, world!']
 * }
 */