diff --git a/channel.js b/channel.js index ddd1c47a..dd9f0757 100644 --- a/channel.js +++ b/channel.js @@ -38,6 +38,8 @@ var Channel = function(name) { bgimage: "" }; + this.ipbans = []; + // Autolead stuff // Accumulator this.i = 0; @@ -265,6 +267,13 @@ Channel.prototype.searchLibrary = function(query) { // Called when a new user enters the channel Channel.prototype.userJoin = function(user) { + for(var i = 0; i < this.ipbans.length; i++) { + if(this.ipbans[i] == user.ip) { + user.socket.disconnect(); + return; + } + } + user.socket.join(this.name); // Prevent duplicate login if(user.name != "") { diff --git a/chatcommand.js b/chatcommand.js index 82228508..50dfd646 100644 --- a/chatcommand.js +++ b/chatcommand.js @@ -14,6 +14,9 @@ function handle(chan, user, msg) { else if(msg.indexOf("/kick ") == 0) { handleKick(chan, user, msg.substring(6).split(' ')); } + else if(msg.indexOf("/ban ") == 0) { + handleBan(chan, user, msg.substring(5).split(' ')); + } else if(msg.indexOf("/poll ") == 0) { handlePoll(chan, user, msg.substring(6)); } @@ -35,6 +38,23 @@ function handleKick(chan, user, args) { } } +function handleBan(chan, user, args) { + if(Rank.hasPermission(user, "ipban") && args.length > 0) { + var kickee; + for(var i = 0; i < chan.users.length; i++) { + if(chan.users[i].name == args[0]) { + kickee = chan.users[i]; + break; + } + } + if(kickee) { + chan.ipbans.push(kickee.ip); + kickee.socket.disconnect(); + chan.userLeave(kickee); + } + } +} + function handlePoll(chan, user, msg) { if(Rank.hasPermission(user, "poll")) { var args = msg.split(',');