Add chat antiflood option
This commit is contained in:
parent
3f5ec309e9
commit
6b5466f5ae
35
user.js
35
user.js
|
@ -28,6 +28,8 @@ var User = function(socket, ip) {
|
|||
this.meta = {
|
||||
afk: false
|
||||
};
|
||||
this.throttle = {};
|
||||
this.flooded = {};
|
||||
|
||||
this.initCallbacks();
|
||||
if(Server.announcement != null) {
|
||||
|
@ -35,6 +37,38 @@ var User = function(socket, ip) {
|
|||
}
|
||||
};
|
||||
|
||||
// Throttling/cooldown
|
||||
User.prototype.noflood = function(name, hz) {
|
||||
var time = new Date().getTime();
|
||||
if(!(name in this.throttle)) {
|
||||
this.throttle[name] = [time];
|
||||
return false;
|
||||
}
|
||||
else if(name in this.flooded && time < this.flooded[name]) {
|
||||
this.socket.emit("noflood", {
|
||||
action: name,
|
||||
msg: "You're still on cooldown!"
|
||||
});
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
this.throttle[name].push(time);
|
||||
var diff = (time - this.throttle[name][0]) / 1000.0;
|
||||
if(diff > 1.0) {
|
||||
var rate = this.throttle[name].length / diff;
|
||||
this.throttle[name] = [time];
|
||||
if(rate > hz) {
|
||||
this.flooded[name] = time + 5000;
|
||||
this.socket.emit("noflood", {
|
||||
action: name,
|
||||
msg: "Stop doing that so fast! Cooldown: 5s"
|
||||
});
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
User.prototype.initCallbacks = function() {
|
||||
this.socket.on("disconnect", function() {
|
||||
|
@ -258,6 +292,7 @@ User.prototype.initCallbacks = function() {
|
|||
this.socket.on("requestAcl", function() {
|
||||
if(this.channel != null) {
|
||||
this.channel.sendACL(this);
|
||||
this.noflood("requestAcl", 0.25);
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
|
|
|
@ -29,6 +29,15 @@ function initCallbacks() {
|
|||
.addClass("server-msg-disconnect")
|
||||
.text("Kicked: " + data.reason)
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
});
|
||||
|
||||
socket.on("noflood", function(data) {
|
||||
$("<div/>")
|
||||
.addClass("server-msg-disconnect")
|
||||
.text(data.action + ": " + data.msg)
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
});
|
||||
|
||||
socket.on("channelNotRegistered", function() {
|
||||
|
@ -67,6 +76,7 @@ function initCallbacks() {
|
|||
PAGETITLE = opts.pagetitle;
|
||||
$("#opt_customcss").val(opts.customcss);
|
||||
$("#opt_customjs").val(opts.customjs);
|
||||
$("#opt_chat_antiflood").prop("checked", opts.chat_antiflood);
|
||||
$("#customCss").remove();
|
||||
if(opts.customcss.trim() != "") {
|
||||
$("<link/>").attr("rel", "stylesheet")
|
||||
|
|
|
@ -125,6 +125,7 @@ socket.on("connect", function() {
|
|||
$("<div/>").addClass("server-msg-reconnect")
|
||||
.text("Connected")
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
setTimeout(function() { $("#reconnect_box").remove(); }, 3000);
|
||||
});
|
||||
|
||||
|
@ -377,7 +378,8 @@ $("#opt_submit").click(function() {
|
|||
voteskip_ratio: ratio,
|
||||
pagetitle: ptitle,
|
||||
customcss: css,
|
||||
customjs: $("#opt_customjs").val()
|
||||
customjs: $("#opt_customjs").val(),
|
||||
chat_antiflood: $("#opt_chat_antiflood").prop("checked")
|
||||
};
|
||||
socket.emit("channelOpts", opts);
|
||||
});
|
||||
|
|
|
@ -16,6 +16,7 @@ function handleDisconnect() {
|
|||
.addClass("server-msg-disconnect")
|
||||
.text("Disconnected from server. Attempting reconnection...")
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
}
|
||||
|
||||
// Adds a user to the chatbox userlist
|
||||
|
|
|
@ -167,6 +167,11 @@
|
|||
<label>Voteskip Ratio
|
||||
<input type="text" id="opt_voteskip_ratio" class="pull-right">
|
||||
</label>
|
||||
<br>
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" id="opt_chat_antiflood">
|
||||
Prevent chat flood
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="span10">
|
||||
|
|
Loading…
Reference in a new issue