- }
- websocket.emit('message', {event: 'options', server: '', "options": ircSocket.IRC.options});
- break;
- case ircNumerics.RPL_WHOISUSER:
- case ircNumerics.RPL_WHOISSERVER:
- case ircNumerics.RPL_WHOISOPERATOR:
- case ircNumerics.RPL_ENDOFWHOIS:
- case ircNumerics.RPL_WHOISCHANNELS:
- case ircNumerics.RPL_WHOISMODES:
- websocket.emit('message', {event: 'whois', server: '', nick: msg.params.split(" ", 3)[1], "msg": msg.trailing});
- break;
- case ircNumerics.RPL_WHOISIDLE:
- params = msg.params.split(" ", 4);
- rtn = {event: 'whois', server: '', nick: params[1], idle: params[2]};
- if (params[3]) {
- rtn.logon = params[3];
- }
- websocket.emit('message', rtn);
- break;
- case ircNumerics.RPL_MOTD:
- websocket.emit('message', {event: 'motd', server: '', "msg": msg.trailing});
- break;
- case ircNumerics.RPL_NAMEREPLY:
- params = msg.params.split(" ");
- nick = params[0];
- chan = params[2];
- users = msg.trailing.split(" ");
- prefixes = _.values(ircSocket.IRC.options.PREFIX);
- nicklist = {};
- i = 0;
- _.each(users, function (user) {
- if (_.include(prefix, user.charAt(0))) {
- prefix = user.charAt(0);
- user = user.substring(1);
- nicklist[user] = prefix;
- } else {
- nicklist[user] = '';
- }
- if (i++ >= 50) {
- websocket.emit('message', {event: 'userlist', server: '', "users": nicklist, channel: chan});
- nicklist = {};
- i = 0;
- }
- });
- if (i > 0) {
- websocket.emit('message', {event: 'userlist', server: '', "users": nicklist, channel: chan});
- } else {
- console.log("oops");
- }
- break;
- case ircNumerics.RPL_ENDOFNAMES:
- websocket.emit('message', {event: 'userlist_end', server: '', channel: msg.params.split(" ")[1]});
- break;
- case ircNumerics.ERR_LINKCHANNEL:
- params = msg.params.split(" ");
- websocket.emit('message', {event: 'channel_redirect', from: params[1], to: params[2]});
- break;
- case ircNumerics.ERR_NOSUCHNICK:
- //TODO: shit
- break;
- case 'JOIN':
- websocket.emit('message', {event: 'join', nick: msg.nick, ident: msg.ident, hostname: msg.hostname, channel: msg.trailing});
- if (msg.nick === ircSocket.IRC.nick) {
- ircSocket.write('NAMES ' + msg.trailing + '\r\n');
- }
- break;
- case 'PART':
- websocket.emit('message', {event: 'part', nick: msg.nick, ident: msg.ident, hostname: msg.hostname, channel: msg.params.trim(), message: msg.trailing});
- break;
- case 'KICK':
- params = msg.params.split(" ");
- websocket.emit('message', {event: 'kick', kicked: params[1], nick: msg.nick, ident: msg.ident, hostname: msg.hostname, channel: params[0].trim(), message: msg.trailing});
- break;
- case 'QUIT':
- websocket.emit('message', {event: 'quit', nick: msg.nick, ident: msg.ident, hostname: msg.hostname, message: msg.trailing});
- break;
- case 'NOTICE':
- if ((msg.trailing.charAt(0) === '\001') && (msg.trailing.charAt(msg.trailing.length - 1) === '\001')) {
- // It's a CTCP response
- websocket.emit('message', {event: 'ctcp_response', nick: msg.nick, ident: msg.ident, hostname: msg.hostname, channel: msg.params.trim(), msg: msg.trailing.substr(1, msg.trailing.length - 2)});
- } else {
- websocket.emit('message', {event: 'notice', nick: msg.nick, ident: msg.ident, hostname: msg.hostname, channel: msg.params.trim(), msg: msg.trailing});
- }
- break;
- case 'NICK':
- websocket.emit('message', {event: 'nick', nick: msg.nick, ident: msg.ident, hostname: msg.hostname, newnick: msg.trailing});
- break;
- case 'TOPIC':
- websocket.emit('message', {event: 'topic', nick: msg.nick, channel: msg.params, topic: msg.trailing});
- break;
- case ircNumerics.RPL_TOPIC:
- websocket.emit('message', {event: 'topic', nick: '', channel: msg.params.split(" ")[1], topic: msg.trailing});
- break;
- case 'MODE':
- opts = msg.params.split(" ");
- params = {event: 'mode', nick: msg.nick};
- switch (opts.length) {
- case 1:
- params.effected_nick = opts[0];
- params.mode = msg.trailing;
- break;
- case 2:
- params.channel = opts[0];
- params.mode = opts[1];
- break;
- default:
- params.channel = opts[0];
- params.mode = opts[1];
- params.effected_nick = opts[2];