squelch-client
Version:
An IRC client for Node.js
124 lines (119 loc) • 3.83 kB
JavaScript
// Generated by CoffeeScript 1.10.0
(function() {
var getSender, userToLetter;
getSender = require('../../util').getSender;
userToLetter = function(users, letter) {
return users.map(function() {
return letter;
}).join('');
};
module.exports = function() {
return function(client) {
client.mode = function(chan, modeStr) {
return this.raw("MODE " + chan + " " + modeStr);
};
client.ban = function(chan, hostmask) {
return this.mode(chan, "+b " + hostmask);
};
client.unban = function(chan, hostmask) {
return this.mode(chan, "-b " + hostmask);
};
client.op = function(chan, user) {
var users;
users = [].concat(user);
return this.mode(chan, "+" + (userToLetter(users, 'o')) + " " + (users.join(' ')));
};
client.deop = function(chan, user) {
var users;
users = [].concat(user);
return this.mode(chan, "-" + (userToLetter(users, 'o')) + " " + (users.join(' ')));
};
client.voice = function(chan, user) {
var users;
users = [].concat(user);
return this.mode(chan, "+" + (userToLetter(users, 'v')) + " " + (users.join(' ')));
};
client.devoice = function(chan, user) {
var users;
users = [].concat(user);
return this.mode(chan, "-" + (userToLetter(users, 'v')) + " " + (users.join(' ')));
};
return client._.internalEmitter.on('raw', function(reply) {
var adding, c, chan, i, len, modes, param, params, sender, user;
if (reply.command === 'MODE') {
sender = getSender(reply);
chan = reply.params[0];
if (!client.isChannel(chan)) {
user = chan;
}
modes = reply.params[1];
if (reply.params.length > 2) {
params = reply.params.slice(2);
}
adding = true;
for (i = 0, len = modes.length; i < len; i++) {
c = modes[i];
if (c === '+') {
adding = true;
continue;
}
if (c === '-') {
adding = false;
continue;
}
if (user == null) {
param = void 0;
if (client._.chanmodes[0].indexOf(c) !== -1 || client._.chanmodes[1].indexOf(c) !== -1 || (adding && client._.chanmodes[2].indexOf(c) !== -1) || (client._.prefix[c] != null)) {
param = params.shift();
}
if (adding) {
client.emit('+mode', {
chan: chan,
sender: sender,
mode: c,
param: param
});
}
if (!adding) {
client.emit('-mode', {
chan: chan,
sender: sender,
mode: c,
param: param
});
}
} else {
if (adding) {
client.emit('+usermode', {
user: user,
mode: c,
sender: sender
});
}
if (!adding) {
client.emit('-usermode', {
user: user,
mode: c,
sender: sender
});
}
}
}
if (user == null) {
return client.emit('mode', {
chan: chan,
sender: sender,
mode: reply.params.slice(1).join(' ')
});
} else {
return client.emit('usermode', {
user: user,
sender: sender,
mode: reply.params.slice(1).join(' ')
});
}
}
});
};
};
}).call(this);