merge master into roompassword
This commit is contained in:
commit
2a84eab386
111
lib/channel.js
111
lib/channel.js
|
@ -2150,41 +2150,88 @@ Channel.prototype.tryUpdateOptions = function(user, data) {
|
||||||
password: true
|
password: true
|
||||||
};
|
};
|
||||||
|
|
||||||
if ("afk_timeout" in data) {
|
if ("allow_voteskip" in data) {
|
||||||
data.afk_timeout = parseInt(data.afk_timeout);
|
var vs = Boolean(data.allow_voteskip);
|
||||||
if(data.afk_timeout < 0)
|
this.opts.voteskip = vs;
|
||||||
data.afk_timeout = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("password" in data) {
|
if ("voteskip_ratio" in data) {
|
||||||
data.password = data.password === "" ? false : ""+data.password;
|
var ratio = parseFloat(data.voteskip_ratio);
|
||||||
}
|
if (isNaN(ratio) || ratio < 0) {
|
||||||
|
ratio = 0;
|
||||||
for(var key in this.opts) {
|
|
||||||
if(key in data) {
|
|
||||||
if(key in adminonly && user.rank < 3) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (key === "chat_antiflood_params") {
|
|
||||||
var b = parseInt(data[key].burst);
|
|
||||||
if (isNaN(b) || b < 0)
|
|
||||||
b = 1;
|
|
||||||
var s = parseFloat(data[key].sustained);
|
|
||||||
if (isNaN(s) || s <= 0)
|
|
||||||
s = 1;
|
|
||||||
var c = b / s;
|
|
||||||
this.opts.chat_antiflood_params.burst = b;
|
|
||||||
this.opts.chat_antiflood_params.sustained = s;
|
|
||||||
this.opts.chat_antiflood_params.cooldown = c;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
this.opts[key] = data[key];
|
|
||||||
if(key === "afk_timeout" && this.opts[key] != data[key]) {
|
|
||||||
this.users.forEach(function (u) {
|
|
||||||
u.autoAFK();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
this.opts.voteskip_ratio = ratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("afk_timeout" in data) {
|
||||||
|
var tm = parseInt(data.afk_timeout);
|
||||||
|
if (isNaN(tm) || tm < 0) {
|
||||||
|
tm = 0;
|
||||||
|
}
|
||||||
|
var same = tm == this.opts.afk_timeout;
|
||||||
|
this.opts.afk_timeout = tm;
|
||||||
|
if (!same) {
|
||||||
|
this.users.forEach(function (u) {
|
||||||
|
u.autoAFK();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("pagetitle" in data && user.rank >= 3) {
|
||||||
|
this.opts.pagetitle = ""+data.pagetitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("maxlength" in data) {
|
||||||
|
var ml = parseInt(data.maxlength);
|
||||||
|
if (isNaN(ml) || ml < 0) {
|
||||||
|
ml = 0;
|
||||||
|
}
|
||||||
|
this.opts.maxlength = ml;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("externalcss" in data && user.rank >= 3) {
|
||||||
|
this.opts.externalcss = ""+data.externalcss;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("externaljs" in data && user.rank >= 3) {
|
||||||
|
this.opts.externaljs = ""+data.externaljs;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("chat_antiflood" in data) {
|
||||||
|
this.opts.chat_antiflood = Boolean(data.chat_antiflood);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("chat_antiflood_params" in data) {
|
||||||
|
if (typeof data.chat_antiflood_params !== "object") {
|
||||||
|
data.chat_antiflood_params = {
|
||||||
|
burst: 4,
|
||||||
|
sustained: 1
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var b = parseInt(data.chat_antiflood_params.burst);
|
||||||
|
if (isNaN(b) || b < 0)
|
||||||
|
b = 1;
|
||||||
|
var s = parseFloat(data.chat_antiflood_params.sustained);
|
||||||
|
if (isNaN(s) || s <= 0)
|
||||||
|
s = 1;
|
||||||
|
var c = b / s;
|
||||||
|
this.opts.chat_antiflood_params.burst = b;
|
||||||
|
this.opts.chat_antiflood_params.sustained = s;
|
||||||
|
this.opts.chat_antiflood_params.cooldown = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("show_public" in data && user.rank >= 3) {
|
||||||
|
this.opts.show_public = Boolean(data.show_public);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("enable_link_regex" in data) {
|
||||||
|
this.opts.enable_link_regex = Boolean(data.enable_link_regex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("password" in data && user.rank >= 3) {
|
||||||
|
var pw = data.password+"";
|
||||||
|
pw = pw === "" ? false : pw;
|
||||||
|
this.opts.password = pw;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.log("%%% " + user.name + " updated channel options");
|
this.logger.log("%%% " + user.name + " updated channel options");
|
||||||
|
|
14
lib/user.js
14
lib/user.js
|
@ -116,12 +116,22 @@ User.prototype.autoAFK = function () {
|
||||||
if (self.awaytimer)
|
if (self.awaytimer)
|
||||||
clearTimeout(self.awaytimer);
|
clearTimeout(self.awaytimer);
|
||||||
|
|
||||||
if (!self.inChannel() || self.channel.opts.afk_timeout === 0)
|
if (!self.inChannel()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var timeout = parseFloat(self.channel.opts.afk_timeout);
|
||||||
|
if (isNaN(timeout)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeout <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self.awaytimer = setTimeout(function () {
|
self.awaytimer = setTimeout(function () {
|
||||||
self.setAFK(true);
|
self.setAFK(true);
|
||||||
}, self.channel.opts.afk_timeout * 1000);
|
}, timeout * 1000);
|
||||||
};
|
};
|
||||||
|
|
||||||
User.prototype.kick = function (reason) {
|
User.prototype.kick = function (reason) {
|
||||||
|
|
Loading…
Reference in a new issue