UNPKG

coffea

Version:

event based and extensible nodejs irc client library with multi-network support

57 lines (48 loc) 1.92 kB
/*jslint node: true*/ "use strict"; var utils = require('../utils'); module.exports = function () { return function (irc) { irc.capLs = function capLs(network, fn) { irc.write("CAP LS", network, fn); }; irc.capList = function capList(network, fn) { irc.write("CAP LIST", network, fn); }; irc.capReq = function capReq(capabilities, network, fn) { capabilities = utils.toArray(capabilities); for(var capab in capabilities) { if (capabilities.hasOwnProperty(capab)) { irc.write("CAP REQ " + capabilities[capab], network, fn); } } }; irc.capClear = function capClear(network, fn) { irc.write("CAP CLEAR", network, fn); irc.capabilities = []; }; irc.capEnd = function capEnd(network, fn) { irc.write("CAP END", network, fn); }; irc.on('data', function (err, msg) { var network = msg.network; if (msg.command === "CAP" && msg.params === "* LS") { utils.emit(irc, network, 'cap_list', { 'capabilities': msg.trailing.split(' '), "tags": msg.tags ? msg.tags : [] }); } else if (msg.command === "CAP" && msg.params.split(" ")[1] === "ACK") { utils.emit(irc, network, 'cap_ack' ,{ 'capabilities': msg.trailing, "tags": msg.tags ? msg.tags : [] }); irc.capabilities.push(msg.trailing.trim()); } else if (msg.command === "CAP" && msg.params.split(" ")[1] === "NAK") { utils.emit(irc, network, 'cap_nak' ,{ 'capabilities': msg.trailing, "tags": msg.tags ? msg.tags : [] }); } }); }; };