diff --git a/lib/channel.js b/lib/channel.js index 36f5235a..e6af0b23 100644 --- a/lib/channel.js +++ b/lib/channel.js @@ -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 (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; - } - 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 ("voteskip_ratio" in data) { + var ratio = parseFloat(data.voteskip_ratio); + if (isNaN(ratio) || ratio < 0) { + ratio = 0; } + 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); } this.logger.log("%%% " + user.name + " updated channel options");