Add strict type checking to channel options

This commit is contained in:
calzoneman 2013-11-29 21:21:49 -06:00
parent 873330e991
commit 3f1e665922
1 changed files with 73 additions and 30 deletions

View File

@ -2120,39 +2120,82 @@ Channel.prototype.tryUpdateOptions = function(user, data) {
show_public: true
};
if ("afk_timeout" in data) {
data.afk_timeout = parseInt(data.afk_timeout);
if (isNaN(data.afk_timeout) || data.afk_timeout < 0)
data.afk_timeout = 0;
if ("allow_voteskip" in data) {
var vs = Boolean(data.allow_voteskip);
this.opts.voteskip = vs;
}
for(var key in this.opts) {
if(key in data) {
if(key in adminonly && user.rank < 3) {
continue;
if ("voteskip_ratio" in data) {
var ratio = parseFloat(data.voteskip_ratio);
if (isNaN(ratio) || ratio < 0) {
ratio = 0;
}
if (key === "chat_antiflood_params") {
var b = parseInt(data[key].burst);
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[key].sustained);
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;
continue;
}
if(key === "afk_timeout" && this.opts[key] != data[key]) {
console.log(typeof data[key], data[key]);
this.opts[key] = data[key];
this.users.forEach(function (u) {
u.autoAFK();
});
}
this.opts[key] = data[key];
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);
}
this.logger.log("%%% " + user.name + " updated channel options");