{"version":3,"file":"slate-irc.modern.mjs","sources":["../lib/utils.js","../lib/plugins/names.js","../lib/plugins/whois.js","../index.js","../lib/plugins/away.js","../lib/plugins/disconnect.js","../lib/plugins/errors.js","../lib/plugins/invite.js","../lib/plugins/join.js","../lib/plugins/kick.js","../lib/plugins/mode.js","../lib/plugins/motd.js","../lib/plugins/nick.js","../lib/plugins/notice.js","../lib/plugins/part.js","../lib/plugins/pong.js","../lib/plugins/privmsg.js","../lib/plugins/quit.js","../lib/plugins/topic.js","../lib/plugins/welcome.js"],"sourcesContent":["/**\n * Parse channel list `str`.\n *\n * @param {String} str\n * @return {Array}\n * @api public\n */\n\nexport function channelList(str) {\n  return str.split(',').map(function (chan) {\n    return chan.toLowerCase()\n  })\n}\n\n/**\n * Parse nick from `msg`.\n *\n * @param {Object} msg\n * @return {String}\n * @api public\n */\n\nexport function nick(msg) {\n  return msg.prefix.split('!')[0]\n}\n\n/**\n * Parse hostmask from `msg`.\n *\n * @param {Object} msg\n * @return {Object}\n * @api public\n */\n\nexport function hostmask(msg) {\n  var hostmask = {}\n  var parts = msg.prefix.split('!')\n  hostmask.nick = parts[0]\n\n  try {\n    parts = parts[1].split('@')\n    hostmask.username = parts[0]\n    hostmask.hostname = parts[1]\n  } catch (e) {\n    // ..\n  }\n\n  hostmask.string = msg.prefix\n  return hostmask\n}\n\n/**\n * Merge the contents of two objects together into the first object.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexport function extend(a, b) {\n  for (var prop in b) {\n    a[prop] = b[prop]\n  }\n  return a\n}\n","/**\n * Module dependencies.\n */\n\nimport debugModule from 'debug'\nimport * as utils from '../utils'\n\nconst debug = debugModule('slate-irc:names')\n\n/**\n * NAMES plugin to emit `name event`.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    var map = {}\n    irc.names = names\n    irc.nameCallbacks = {}\n\n    irc.on('data', function (msg) {\n      switch (msg.command) {\n        case 'RPL_NAMREPLY':\n          var chan = msg.params.split(/ [=@*] /)[1].toLowerCase()\n          var names = msg.trailing.split(' ')\n          var users = []\n\n          names.forEach(function (n) {\n            var user = n.split(/([~&@%+])/)\n            var name = user.pop()\n            var mode = user.pop()\n            users.push({ name: name, mode: mode || '' })\n          })\n\n          map[chan] = (map[chan] || []).concat(users)\n          debug('add %s %j', chan, users)\n          break\n\n        case 'RPL_ENDOFNAMES':\n          var chan = msg.params.split(' ')[1].toLowerCase()\n          debug('emit \"names\" for %s', chan)\n          var e = { channel: chan, names: map[chan] || [] }\n          var cb = irc.nameCallbacks[chan]\n\n          if (cb) cb(e)\n          else irc.emit('names', e)\n\n          delete map[chan]\n          break\n      }\n    })\n  }\n}\n\n/**\n * Fetch names for `channel` and invoke `fn(err, names)`.\n *\n * @param {String} channel\n * @param {Function} fn\n * @api public\n */\n\nfunction names(channel, fn) {\n  var self = this\n  channel = channel.toLowerCase()\n\n  if (fn) {\n    this.nameCallbacks[channel] = function (e) {\n      delete self.nameCallbacks[channel]\n      fn(null, e.names)\n    }\n  }\n\n  this.write('NAMES ' + channel)\n}\n","/**\n * Module dependencies.\n */\n\nimport debugModule from 'debug'\nimport * as utils from '../utils'\n\nconst debug = debugModule('slate-irc:whois')\n\n/**\n * WHOIS plugin to emit \"whois\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    var map = {}\n    irc.whois = whois\n    irc.whoisCallbacks = {}\n\n    irc.on('data', function (msg) {\n      switch (msg.command) {\n        case 'RPL_WHOISUSER':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          map[target] = map[target] || {}\n          map[target].nickname = params[1]\n          map[target].username = params[2]\n          map[target].hostname = params[3]\n          map[target].realname = msg.trailing\n          map[target].channels = []\n          map[target].oper = false\n          break\n        case 'RPL_WHOISCHANNELS':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          var channels = msg.trailing.split(' ')\n          map[target].channels = map[target].channels.concat(channels)\n          break\n        case 'RPL_WHOISSERVER':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          map[target].server = params[2]\n          break\n        case 'RPL_AWAY':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          if (!map[target]) return\n          map[target].away = msg.trailing\n          break\n        case 'RPL_WHOISOPERATOR':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          map[target].oper = true\n          break\n        case 'RPL_WHOISIDLE':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          map[target].idle = params[2] // new Date(now - (n * 1000))\n          map[target].sign = params[3] // new Date(n * 1000)\n          break\n        case 'RPL_ENDOFWHOIS':\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          if (!map[target]) return\n          var cb = irc.whoisCallbacks[target]\n          if (cb) cb(err, map[target])\n          else irc.emit('whois', null, map[target])\n          map = {}\n          break\n        case 'ERR_NEEDMOREPARAMS':\n          var err = 'Not enough parameters'\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          if (target !== 'whois') return\n          var cb = irc.whoisCallbacks[target]\n          if (cb) cb(err, null)\n          else irc.emit('whois', err, null)\n          break\n        case 'ERR_NOSUCHSERVER':\n          var err = 'No such server'\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          var cb = irc.whoisCallbacks[target]\n          if (cb) cb(err, null)\n          else irc.emit('whois', err, null)\n          break\n        case 'ERR_NOSUCHNICK':\n          var err = 'No such nick/channel'\n          var params = msg.params.split(' ')\n          var target = params[1].toLowerCase()\n          var cb = irc.whoisCallbacks[target]\n          if (cb) cb(err, null)\n          else irc.emit('whois', err, null)\n          break\n      }\n    })\n  }\n}\n\n/**\n * Fetch whois data and invoke `fn(err, data)`.\n *\n * @param {String} target\n * @param {String} mask\n * @param {Function} fn\n * @api public\n */\n\nfunction whois(target, mask, fn) {\n  if ('function' == typeof mask) {\n    fn = mask\n    mask = ''\n  }\n\n  var self = this\n  target = target.toLowerCase()\n\n  if (fn) {\n    this.whoisCallbacks[target] = function (err, data) {\n      delete self.whoisCallbacks[target]\n      fn(err, data)\n    }\n  }\n\n  this.write(['WHOIS', target, mask].filter(Boolean).join(' '))\n}\n","/**\n * Module dependencies.\n */\n\nimport { EventEmitter as Emitter } from 'events'\nimport debugModule from 'debug'\nimport Parser from 'slate-irc-parser'\nimport replies from 'irc-replies'\n\nconst debug = debugModule('slate-irc')\n\n/**\n * Core plugins.\n */\n\nimport away from './lib/plugins/away'\nimport disconnect from './lib/plugins/disconnect'\nimport errors from './lib/plugins/errors'\nimport invite from './lib/plugins/invite'\nimport join from './lib/plugins/join'\nimport kick from './lib/plugins/kick'\nimport mode from './lib/plugins/mode'\nimport motd from './lib/plugins/motd'\nimport names from './lib/plugins/names'\nimport nick from './lib/plugins/nick'\nimport notice from './lib/plugins/notice'\nimport part from './lib/plugins/part'\nimport pong from './lib/plugins/pong'\nimport privmsg from './lib/plugins/privmsg'\nimport quit from './lib/plugins/quit'\nimport topic from './lib/plugins/topic'\nimport welcome from './lib/plugins/welcome'\nimport whois from './lib/plugins/whois'\n\n/**\n * Initialize a new IRC client with the\n * given duplex `stream`.\n *\n * @param {Stream} stream\n * @param {Parser} [parser]\n * @param {String} [encoding]\n * @api public\n */\n\nexport default function Client(stream, parser, encoding) {\n  if (!(this instanceof Client)) return new Client(stream, parser, encoding)\n  stream.setEncoding(encoding || 'utf8')\n  this.stream = stream\n  this.parser = parser || new Parser()\n  this.parser.on('message', this.onmessage.bind(this))\n  stream.pipe(this.parser)\n  this.setMaxListeners(100)\n  this.use(away())\n  this.use(disconnect())\n  this.use(errors())\n  this.use(invite())\n  this.use(join())\n  this.use(kick())\n  this.use(mode())\n  this.use(motd())\n  this.use(names())\n  this.use(nick())\n  this.use(notice())\n  this.use(part())\n  this.use(pong())\n  this.use(privmsg())\n  this.use(quit())\n  this.use(topic())\n  this.use(welcome())\n  this.use(whois())\n}\n\n/**\n * Inherit from `Emitter.prototype`.\n */\n\nClient.prototype.__proto__ = Emitter.prototype\n\n/**\n * Write `str` without checking for '\\r' or '\\n' and invoke `fn(err)`.\n *\n * @param {String} str\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.writeUnsafe = function (str, fn) {\n  this.stream.write(str + '\\r\\n', fn)\n}\n\n/**\n * Write `str` and invoke `fn(err)`.\n *\n * @param {String} str\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.write = function (str, fn) {\n  if (str.indexOf('\\n') != -1 || str.indexOf('\\r') != -1) {\n    fn &&\n      fn(\n        new Error(\n          \"The parameter to write() must not contain any '\\\\n' or '\\\\r'.\",\n        ),\n      )\n    return\n  }\n  this.writeUnsafe(str, fn)\n}\n\n/**\n * PASS <pass>\n *\n * @param {String} pass\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.pass = function (pass, fn) {\n  this.write('PASS ' + pass, fn)\n}\n\n/**\n * WEBIRC <password> <username> <hostname> <ip>\n * See https://www.irc.wiki/WebIRC\n *\n * @param {String} password\n * @param {String} username\n * @param {String} hostname\n * @param {String} ip\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.webirc = function (password, username, hostname, ip, fn) {\n  var message = [password, username, hostname, ip].join(' ')\n  this.write('WEBIRC ' + message, fn)\n}\n\n/**\n * NICK <nick>\n *\n * @param {String} nick\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.nick = function (nick, fn) {\n  this.write('NICK ' + nick, fn)\n}\n\n/**\n * USER <username> <realname>\n *\n * @param {String} username\n * @param {String} realname\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.user = function (username, realname, fn) {\n  this.write('USER ' + username + ' 0 * :' + realname, fn)\n}\n\n/**\n * Send an invite to `name`, for a `channel`.\n *\n * @param {String} name\n * @param {String} channel\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.invite = function (name, channel, fn) {\n  this.write('INVITE ' + name + ' ' + channel, fn)\n}\n\n/**\n * Send `msg` to `target`, where `target`\n * is a channel or user name.\n *\n * @param {String|Array} target\n * @param {String} msg\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.send = function (target, msg, fn) {\n  this.write('PRIVMSG ' + toArray(target).join(',') + ' :' + msg, fn)\n}\n\n/**\n * Send `msg` to `target` as an ACTION, where `target`\n * is a channel or user name.\n *\n * An action is a PRIVMSG with a syntax\n * like this:\n *\n *    PRIVMSG <target> :\\u0001ACTION <msg>\\u0001\n *\n * @param {String} target\n * @param {String} msg\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.action = function (target, msg, fn) {\n  this.send(target, '\\u0001' + 'ACTION ' + msg + '\\u0001', fn)\n}\n\n/**\n * Send `msg` to `target` as a NOTICE, where `target`\n * is a channel or user name.\n *\n * @param {String} target\n * @param {String} msg\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.notice = function (target, msg, fn) {\n  this.write('NOTICE ' + target + ' :' + msg, fn)\n}\n\n/**\n * Send `msg` to `target` as a CTCP notice, where `target`\n * is a user name.\n *\n * @param {String} target\n * @param {String} msg\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.ctcp = function (target, msg, fn) {\n  this.notice(target, '\\x01' + msg + '\\x01', fn)\n}\n\n/**\n * Join channel(s).\n *\n * @param {String|Array} channels\n * @param {String|Array|Function} [keys or fn]\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.join = function (channels, keys, fn) {\n  if ('function' == typeof keys) {\n    fn = keys\n    keys = ''\n  }\n\n  this.write(\n    'JOIN ' + toArray(channels).join(',') + ' ' + toArray(keys).join(','),\n    fn,\n  )\n}\n\n/**\n * Leave channel(s) with optional `msg`.\n *\n * @param {String|Array} channels\n * @param {String|Function} [msg or fn]\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.part = function (channels, msg, fn) {\n  if ('function' == typeof msg) {\n    fn = msg\n    msg = ''\n  }\n\n  var part = 'PART ' + toArray(channels).join(',')\n\n  if (msg) {\n    part += ' :' + msg\n  }\n\n  this.write(part, fn)\n}\n\n/**\n * Set the user's away message\n *\n * @param {String} [msg = 'Talk to you later!']\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.away = function (msg, fn) {\n  msg = msg || 'Talk to you later!'\n  this.write('AWAY :' + msg, fn)\n}\n\n/**\n * Remove user's away message\n *\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.back = function (fn) {\n  this.write('AWAY', fn)\n}\n\n/**\n * Get channel topic or set the topic to `topic`.\n *\n * @param {String} channel\n * @param {String|Function} [topic or fn]\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.topic = function (channel, topic, fn) {\n  if ('function' == typeof topic) {\n    fn = topic\n    topic = ''\n  }\n\n  if (topic) {\n    topic = ' :' + topic\n  }\n\n  this.write('TOPIC ' + channel + topic, fn)\n}\n\n/**\n * Kick nick(s) from channel(s) with optional `msg`.\n *\n * @param {String|Array} channels\n * @param {String|Array} nicks\n * @param {String|Function} [msg or fn]\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.kick = function (channels, nicks, msg, fn) {\n  if ('function' == typeof msg) {\n    fn = msg\n    msg = ''\n  }\n\n  var kick =\n    'KICK ' + toArray(channels).join(',') + ' ' + toArray(nicks).join(',')\n\n  if (msg) {\n    kick += ' :' + msg\n  }\n\n  this.write(kick, fn)\n}\n\n/**\n * Disconnect from the server with `msg`.\n *\n * @param {String} [msg]\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.quit = function (msg, fn) {\n  msg = msg || 'Bye!'\n  this.write('QUIT :' + msg, fn)\n}\n\n/**\n * Used to obtain operator privileges.\n * The combination of `name` and `password` are required\n * to gain Operator privileges.  Upon success, a `'mode'`\n * event will be emitted.\n *\n * @param {String} name\n * @param {String} password\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.oper = function (name, password, fn) {\n  this.write('OPER ' + name + ' ' + password, fn)\n}\n\n/**\n * Used to set a user's mode or channel's mode for a user;\n *\n * @param {String} [nick or channel]\n * @param {String} flags\n * @param {String} params [nick - if setting channel mode]\n * @param {Function} [fn]\n * @api public\n */\n\nClient.prototype.mode = function (target, flags, params, fn) {\n  if ('function' === typeof params) {\n    fn = params\n    params = ''\n  }\n  if (params) {\n    this.write('MODE ' + target + ' ' + flags + ' ' + params, fn)\n  } else {\n    this.write('MODE ' + target + ' ' + flags, fn)\n  }\n}\n\n/**\n * Use the given plugin `fn`.\n *\n * @param {Function} fn\n * @return {Client} self\n * @api public\n */\n\nClient.prototype.use = function (fn) {\n  fn(this)\n  return this\n}\n\n/**\n * Handle messages.\n *\n * Emit \"message\" (msg).\n *\n * @api private\n */\n\nClient.prototype.onmessage = function (msg) {\n  msg.command = replies[msg.command] || msg.command\n  debug('message %s %s', msg.command, msg.string)\n  this.emit('data', msg)\n}\n\n/**\n * Array helper.\n */\n\nfunction toArray(val) {\n  return Array.isArray(val) ? val : [val]\n}\n","/*\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * AWAY plugin to emit \"away\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if (\n        'RPL_AWAY' != msg.command &&\n        'RPL_NOWAWAY' != msg.command &&\n        'RPL_UNAWAY' != msg.command\n      )\n        return\n      var params = msg.params.split(' ')\n      var e = {}\n      if ('RPL_NOWAWAY' == msg.command || 'RPL_UNAWAY' == msg.command) {\n        e.nick = params[0]\n      } else {\n        e.nick = params[1]\n      }\n      e.message = msg.trailing\n      irc.emit('away', e)\n    })\n  }\n}\n","/**\n * DISCONNECT plugin to emit \"disconnect\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    var stream = irc.stream\n    var ms = 60 * 1000\n\n    stream.on('close', function () {\n      irc.emit('disconnect')\n    })\n\n    // Do nothing when given stream cannot perform setTimeout() operation\n    if (stream.setTimeout == null) {\n      return\n    }\n\n    stream.setTimeout(ms)\n\n    stream.on('timeout', function () {\n      var timeout = true\n      var time = new Date().getTime()\n\n      irc.write('PING :' + time)\n\n      irc.once('pong', function (res) {\n        if (res == time) {\n          timeout = false\n        }\n      })\n\n      setTimeout(function () {\n        if (timeout) {\n          stream.destroy()\n        }\n      }, 5000)\n    })\n  }\n}\n","/**\n * ERRORS plugin to emit \"errors\" events.\n *\n * List of possible errors:\n * https://github.com/williamwicks/irc-replies/blob/master/replies.json#L113-L170\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if (msg.command.indexOf('ERR_') !== 0) return\n      var e = {}\n      e.cmd = msg.command\n      e.message = msg.trailing\n      irc.emit('errors', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * INVITE plugin to emit \"invite\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('INVITE' != msg.command) return\n      var e = {}\n      e.from = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.to = msg.params.toLowerCase()\n      e.channel = msg.trailing\n      irc.emit('invite', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * JOIN plugin to emit \"join\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('JOIN' != msg.command) return\n      var e = {}\n      e.nick = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.channel = (msg.params || msg.trailing).toLowerCase()\n      irc.emit('join', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * KICK plugin to emit \"kick\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('KICK' != msg.command) return\n      var e = {}\n      var params = msg.params.split(' ')\n      e.nick = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.channel = params[0].toLowerCase()\n      e.client = params[1]\n      e.message = msg.trailing\n      irc.emit('kick', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * MODE plugin to emit \"mode\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('MODE' != msg.command) return\n      var params = msg.params.split(' ')\n      var e = {}\n      e.nick = utils.nick(msg)\n      e.target = params[0]\n      e.mode = params[1] || msg.trailing\n      e.client = params[2]\n      irc.emit('mode', e)\n    })\n  }\n}\n","/**\n * MOTD plugin to emit \"motd\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    var e = {}\n    e.motd = []\n\n    irc.on('data', function (msg) {\n      switch (msg.command) {\n        case 'RPL_MOTDSTART':\n          e.motd.length = 0\n        case 'RPL_ENDOFMOTD':\n        case 'RPL_MOTD':\n          e.motd.push(msg.trailing)\n          break\n      }\n\n      if (msg.command == 'RPL_ENDOFMOTD') {\n        irc.emit('motd', e)\n      }\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * NICK plugin to emit \"nick\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('NICK' != msg.command) return\n      var e = {}\n      e.nick = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.new = msg.trailing\n      if (!e.new) e.new = msg.params\n      if (e.nick == irc.me) irc.me = e.new\n      irc.emit('nick', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * NOTICE plugin to emit \"notice\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('NOTICE' != msg.command) return\n      var e = {}\n      e.from = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.to = msg.params.toLowerCase()\n      e.message = msg.trailing\n      irc.emit('notice', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * PART plugin to emit \"part\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('PART' != msg.command) return\n      var e = {}\n      e.nick = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.channels = utils.channelList(msg.params)\n      e.message = msg.trailing\n      irc.emit('part', e)\n    })\n  }\n}\n","/**\n * PONG plugin to reply to PING events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('PONG' == msg.command) irc.emit('pong', msg.trailing)\n      if ('PING' != msg.command) return\n      irc.write('PONG :' + msg.trailing)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * PRIVMSG plugin to emit \"message\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('PRIVMSG' != msg.command) return\n      var e = {}\n      e.from = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.to = msg.params.toLowerCase()\n      e.message = msg.trailing\n      irc.emit('message', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * QUIT plugin to emit \"quit\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('QUIT' != msg.command) return\n      var e = {}\n      e.nick = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.message = msg.trailing\n      irc.emit('quit', e)\n    })\n  }\n}\n","/**\n * Module dependencies.\n */\n\nimport * as utils from '../utils'\n\n/**\n * TOPIC plugin to emit \"topic\" events.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    var channel\n    irc.on('data', function (msg) {\n      switch (msg.command) {\n        case 'RPL_NOTOPIC':\n        case 'RPL_TOPIC':\n          channel = msg.params.split(' ')[1]\n          break\n\n        case 'TOPIC':\n          channel = msg.params\n          break\n\n        default:\n          return\n      }\n\n      var e = {}\n      if ('TOPIC' == msg.command) e.nick = utils.nick(msg)\n      e.hostmask = utils.hostmask(msg)\n      e.channel = channel.toLowerCase()\n      e.topic = msg.trailing\n      irc.emit('topic', e)\n    })\n  }\n}\n","/**\n * RPL_WELCOME plugin to set `irc.me`.\n *\n * @return {Function}\n * @api public\n */\n\nexport default function () {\n  return function (irc) {\n    irc.on('data', function (msg) {\n      if ('RPL_WELCOME' != msg.command) return\n      irc.me = msg.params\n      irc.emit('welcome', irc.me)\n    })\n  }\n}\n"],"names":["nick","msg","prefix","split","hostmask","parts","username","hostname","e","string","debug","debugModule","names","channel","fn","self","this","toLowerCase","nameCallbacks","write","whois","target","mask","whoisCallbacks","err","data","filter","Boolean","join","Client","stream","parser","encoding","setEncoding","Parser","on","onmessage","bind","pipe","setMaxListeners","use","irc","command","params","message","trailing","emit","setTimeout","timeout","time","Date","getTime","once","res","destroy","indexOf","cmd","from","utils","to","client","mode","motd","length","push","map","chan","users","forEach","n","user","name","pop","concat","cb","new","me","channels","topic","nickname","realname","oper","server","away","idle","sign","toArray","val","Array","isArray","prototype","__proto__","Emitter","writeUnsafe","str","Error","pass","webirc","password","ip","invite","send","action","notice","ctcp","keys","part","back","kick","nicks","quit","flags","replies"],"mappings":"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"}