diff --git a/channel.js b/channel.js index 76d7cf2e..ff88db1d 100644 --- a/channel.js +++ b/channel.js @@ -260,6 +260,7 @@ Channel.prototype.userJoin = function(user) { // GTFO if(user.ip in this.ipbans && this.ipbans[user.ip] != null) { this.logger.log("--- Kicking " + user.ip + " - banned"); + this.kick(user, "You're banned!"); user.socket.disconnect(true); return; } @@ -347,6 +348,16 @@ Channel.prototype.userLeave = function(user) { this.logger.log("--- /" + user.ip + " (" + user.name + ") left"); } +Channel.prototype.kick = function(user, reason) { + user.socket.emit("kick", { + reason: reason + }); + if(user.socket.disconnected) { + this.userLeave(user); + } + user.socket.disconnect(true); +} + Channel.prototype.sendRankStuff = function(user) { if(Rank.hasPermission(user, "ipban")) { var ents = []; @@ -806,7 +817,7 @@ Channel.prototype.tryMove = function(user, data) { /* REGION Polls */ Channel.prototype.tryClosePoll = function(user) { - if(!Rank.hasPermission(user, "poll")) { + if(!Rank.hasPermission(user, "poll") && this.leader != user) { return; } diff --git a/chatcommand.js b/chatcommand.js index 72c33fed..92bcf37a 100644 --- a/chatcommand.js +++ b/chatcommand.js @@ -19,7 +19,7 @@ function handle(chan, user, msg) { else if(msg.indexOf("/sp ") == 0) chan.sendMessage(user.name, msg.substring(4), "spoiler"); else if(msg.indexOf("/say ") == 0) { - if(Rank.hasPermission(user, "shout")) { + if(Rank.hasPermission(user, "shout") || chan.leader == user) { chan.sendMessage(user.name, msg.substring(5), "shout"); } } @@ -52,10 +52,9 @@ function handleKick(chan, user, args) { } if(kickee) { chan.logger.log("*** " + user.name + " kicked " + args[0]); - if(kickee.socket.disconnected) { - chan.userLeave(kickee); - } - kickee.socket.disconnect(true); + args[0] = ""; + var reason = args.join(" "); + chan.kick(kickee, reason); } } } @@ -71,10 +70,9 @@ function handleBan(chan, user, args) { } if(kickee && kickee.rank < user.rank) { chan.logger.log("*** " + user.name + " banned " + args[0]); - if(kickee.socket.disconnected) { - chan.userLeave(kickee); - } - chan.banIP(user, kickee); + args[0] = ""; + var reason = args.join(" "); + chan.kick(kickee, "(banned) " + reason); } } } @@ -87,7 +85,7 @@ function handleUnban(chan, user, args) { } function handlePoll(chan, user, msg) { - if(Rank.hasPermission(user, "poll")) { + if(Rank.hasPermission(user, "poll") || chan.leader == user) { var args = msg.split(","); var title = args[0]; args.splice(0, 1); @@ -112,12 +110,12 @@ function handleDrink(chan, user, msg) { chan.drinks += count; chan.broadcastDrinks(); - if(count < 0) { + if(count < 0 && msg.trim() == "") { return; } msg = msg + " drink!"; - if(count > 1) + if(count != 1) msg += " (x" + count + ")"; chan.sendMessage(user.name, msg, "drink"); } diff --git a/www/assets/js/callbacks.js b/www/assets/js/callbacks.js index 18b8a6d6..5b9712a0 100644 --- a/www/assets/js/callbacks.js +++ b/www/assets/js/callbacks.js @@ -23,6 +23,14 @@ function initCallbacks() { }); /* REGION Channel Meta */ + socket.on("kick", function(data) { + KICKED = true; + $("
") + .addClass("server-msg-disconnect") + .text("Kicked: " + data.reason) + .appendTo($("#messagebuffer")); + }); + socket.on("channelNotRegistered", function() { showChannelRegistration(); }); diff --git a/www/assets/js/client.js b/www/assets/js/client.js index c031a0fb..3a50128a 100644 --- a/www/assets/js/client.js +++ b/www/assets/js/client.js @@ -28,6 +28,7 @@ var TITLE_BLINK; var VWIDTH = "670"; var VHEIGHT = "377"; var IGNORED = []; +var KICKED = false; var uname = readCookie("sync_uname"); var pw = readCookie("sync_pw"); diff --git a/www/assets/js/functions.js b/www/assets/js/functions.js index fe704184..966e3740 100644 --- a/www/assets/js/functions.js +++ b/www/assets/js/functions.js @@ -10,6 +10,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI */ function handleDisconnect() { + if(KICKED) + return; $("
") .addClass("server-msg-disconnect") .text("Disconnected from server. Attempting reconnection...") diff --git a/www/assets/js/media.js b/www/assets/js/media.js index 10a2934f..a64d56c5 100644 --- a/www/assets/js/media.js +++ b/www/assets/js/media.js @@ -91,7 +91,7 @@ Media.prototype.initVimeo = function() { this.player = $f(iframe[0]); $f(iframe[0]).addEvent("ready", function() { this.player = $f(iframe[0]); - this.play(); + this.player.api("play"); this.player.addEvent("finish", function() { if(LEADER) {