From 764fb1bb030d44f0f20539d02be9adc7358a632b Mon Sep 17 00:00:00 2001 From: kamijoutouma Date: Fri, 19 Sep 2014 12:45:43 -0400 Subject: [PATCH 1/4] Update frame.js updates for recent chatango updates including the mods section --- derplib/frame.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/derplib/frame.js b/derplib/frame.js index a8febf3..347e51f 100644 --- a/derplib/frame.js +++ b/derplib/frame.js @@ -42,7 +42,7 @@ var frameTypesRoom = { myname: myname, jointime: jointime, myip: myip, - mods: mods.split(";")}; + mods: _.reduce(mods.split(";"), function(mods, args){args = args.split(',');mods[args[0]] = args[1];return mods;},{})}; }, inited: function() { @@ -101,27 +101,27 @@ var frameTypesRoom = { }, mods: function(mods) { - return {type: "mods", mods: _.toArray(arguments)}; + return {type: "mods", mods: _.reduce(_.toArray(arguments), function(mods, args){args = args.split(',');mods[args[0]] = args[1];return mods;},{})}; }, - i: function(time, name, alias, user_id, user_key, msgid, ip, prem, _noidea) { + i: function(time, name, alias, user_id, user_key, msgid, ip, channel, _noidea) { return { time: parseFloat(time), type: "i", user: makeUser(name, alias, user_id, user_key, ip), id: msgid, - premium: makePremium(parseInt(prem, 10)), + channel: parseInt(channel, 10), body: _.toArray(arguments).slice(9).join(":")}; }, - b: function(time, name, alias, user_id, user_key, number, ip, prem) { + b: function(time, name, alias, user_id, user_key, number, ip, channel) { return { time: parseFloat(time), type: "b", user: makeUser(name, alias, user_id, user_key, ip), number: number, id: false, - premium: makePremium(parseInt(prem, 10)), + channel: parseInt(channel, 10), body: _.toArray(arguments).slice(9).join(":")}; }, @@ -231,7 +231,7 @@ var frameTypesRoom = { if(user.alias) user.alias = '#'+user.alias; return { type: "participant", - mode: ( mode == "0" ? "leave" : mode == "1" ? "join" : mode == "2" ? "change" : undefined ), + mode: ( mode == "0" && !name && !alias ? "leave-anon" : mode == "0" && !name && alias ? "leave-temp" : mode == "0" && name && !alias ? "leave-user" : mode == "1" && !name && !alias ? "join-anon" : mode == "1" && !name && alias ? "join-temp" : mode == "1" && name && !alias ? "join-user" : mode == "2" && !name && !alias ? "logout" : mode == "2" && !name && alias ? "temp" : mode == "2" && name && !alias ? "login" : undefined ), user: user}; }, From ce6d6e0cec4cf1161f70db7f77c2b5ca57f416fc Mon Sep 17 00:00:00 2001 From: kamijoutouma Date: Fri, 19 Sep 2014 12:52:55 -0400 Subject: [PATCH 2/4] Update ch_room.js --- derplib/ch_room.js | 49 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/derplib/ch_room.js b/derplib/ch_room.js index f29c91b..b99ca4a 100644 --- a/derplib/ch_room.js +++ b/derplib/ch_room.js @@ -290,22 +290,19 @@ Room.prototype._onAuth = function(){ }); this.on('frame_participant', function(_frame) { - if(_frame.mode == 'leave'){ - if(_.has(self.users, _frame.user.sess)) - delete self.users[_frame.user.sess]; - } - else if(_frame.mode == 'join'){ - if(!_.has(self.users, _frame.user.sess)) - self.users[_frame.user.sess] = _frame.user; - } - else if(_frame.mode == 'change'){ - //log in or out - self.users[_frame.user.sess] = _frame.user; - if(undefined === _frame.user.name){ - eventModule.emit('event', 'userLogout', _frame.user); - }else{ - eventModule.emit('event', 'userLogin', _frame.user); + if(_frame.mode){ + if(['leave-anon', 'leave-temp', 'leave-user'].indexOf(_frame.mode) !== -1){ + if(_.has(self.users, _frame.user.sess)) + delete self.users[_frame.user.sess]; + } + else if(['join-anon', 'join-temp', 'join-user'].indexOf(_frame.mode) !== -1){ + if(!_.has(self.users, _frame.user.sess)) + self.users[_frame.user.sess] = _frame.user; + } + else if(['logout', 'temp', 'login'].indexOf(_frame.mode) !== -1){ + self.users[_frame.user.sess] = _frame.user; } + eventModule.emit('participant', self, _frame); } }); @@ -373,8 +370,8 @@ Room.prototype._onAuth = function(){ this.on('frame_mods', function(_frame) { self.mods = _frame.mods; - var added = _.find(self.mods, function(x){ return self.mods.indexOf(x) > -1; }); - var removed = _.find(self.mods, function(x){ return self.mods.indexOf(x) < 0; }); + var added = _.find(Object.keys(self.mods), function(x){ return Object.keys(self.mods).indexOf(x) > -1; }); + var removed = _.find(Object.keys(self.mods), function(x){ return Object.keys(self.mods).indexOf(x) < 0; }); if(added){ self.emit('mod_added', added); @@ -454,8 +451,7 @@ function stringConvertEnteties(string, all){ },''); } -Room.prototype.message = function(body) { - +Room.prototype.message = function(body, channel) { if(this._writeLock || !body) return; var self = this; @@ -468,13 +464,13 @@ Room.prototype.message = function(body) { output = output.replace(/(\n\r|\r\n|\n|\r|\0)/g, '
'); _.each(output.match(/.{1,2950}/gm), function(msg){ - self.write('bmsg', 'l33t', ''+msg); + self.write('bm', 'l33t', utils.choose_channel(utils.find_channel(channel)[0]), ''+'

'+msg); }); } else{ body = String(body).replace(/(\n\r|\r\n|\n|\r|\0)/g, '
'); _.each(body.match(/.{1,2950}/gm), function(msg){ - self.write('bmsg', 'l33t', '' + self.font() + msg + self.fontEnd()); + self.write('bm', 'l33t', utils.choose_channel(utils.find_channel(channel)[0]), '' + self.font() + msg + self.fontEnd()); }); } }; @@ -519,7 +515,7 @@ Room.prototype.logout = function(){ Room.prototype.checkModStatus = function(){ this._isAdmin = (this.admin == this._accountLC); - this._isModerator = (this.mods.indexOf(this._accountLC) != -1 || this._isAdmin); + this._isModerator = (Object.keys(this.mods).indexOf(this._accountLC) != -1 || this._isAdmin); } Room.prototype.addMod = function(name) { @@ -600,10 +596,13 @@ Room.prototype.delLastUser = function(name, amount) { } Room.prototype.clearUser = function(name) { + + if(this._isModerator && name){ _.each(this.users, function(user){ - if(user.name == name.toLowerCase() && user.key) - this.write(['delallmsg', user.key]); + if(user.name == name.toLowerCase() && user.key && user.ip) + this.write(['delallmsg', user.key, user.ip, ['#', '_'].indexOf(user.name.charAt(0)) !== -1 ? '' : user.name]); + }.bind(this)); } } @@ -612,7 +611,7 @@ Room.prototype.modClearAll = function() { if(this._isModerator){ var self = this; _.each(this.users, function(user){ - if(user.key) self.write(['delallmsg', user.key]); + if(user.key && user.ip) self.write(['delallmsg', user.key, user.ip, ['#', '_'].indexOf(user.name.charAt(0)) !== -1 ? '' : user.name]); }); } } From 95a266655fb27889fd4a3929d4f88d19302f1190 Mon Sep 17 00:00:00 2001 From: kamijoutouma Date: Fri, 19 Sep 2014 12:55:36 -0400 Subject: [PATCH 3/4] Update request.js --- derplib/request.js | 59 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/derplib/request.js b/derplib/request.js index bca494d..4088829 100644 --- a/derplib/request.js +++ b/derplib/request.js @@ -29,12 +29,12 @@ Request.prototype.parseMessage = function(frame) { user_id: frame.user.id, user_key: frame.user.key, //mod only user_ip: frame.user.ip, //mod only + channel: frame.channel, time: (+new Date), deleted: false, }; // Set name to lowercase if(frame.user.name) frame.user.name = frame.user.name.toLowerCase(); - // Parse message data message.text = utils.html_decode(utils.html_remove(message.body)); message.nameColor = //gi.exec(message.body); @@ -48,7 +48,7 @@ Request.prototype.parseMessage = function(frame) { // Set user details if(frame.user.name && frame.user.alias === undefined) { frame.user.type = 'user'; - if(this.room.mods.indexOf(frame.user.name) != -1) { + if(Object.keys(this.room.mods).indexOf(frame.user.name) != -1) { frame.user.level = 3; } else if(this.room.admin == frame.user.name) { frame.user.level = 4; @@ -64,7 +64,6 @@ Request.prototype.parseMessage = function(frame) { frame.user.level = 0; frame.user.name = '_anon' + utils.getAnonId(message.nameColor, message.user_id); } - //Extra var self = this; message.links = []; @@ -97,10 +96,10 @@ Request.prototype.parseMessage = function(frame) { Request.prototype.parsePMMessage = function(frame) { var message = { - //room: this.room.name, + room: this.room.name, stime: frame.time, // Server time - //name: frame.user.name.toLowerCase(), - //alias: frame.user.alias, + name: frame.user.name.toLowerCase(), + alias: frame.user.alias, number: undefined, premium: frame.premium, body: frame.body, @@ -109,20 +108,60 @@ Request.prototype.parsePMMessage = function(frame) { time: +new Date, deleted: false, }; + // Set name to lowercase + if(frame.user.name) frame.user.name = frame.user.name.toLowerCase(); + // What kind of user is it + if(frame.user.name && frame.user.alias) frame.user.type = 'user'; - //message.type = 'user'; // parse this properly - + //CONTINUE message.text = utils.html_decode(utils.html_remove(message.body)); + message.nameColor = //gi.exec(message.body); + message.nameColor = message.nameColor ? message.nameColor[1] : false; + var fontMatches = //gi.exec(message.body); + if(fontMatches){ + message.fontSize = fontMatches[1]; + message.fontColor = fontMatches[2]; + message.fontFace = fontMatches[3]; + } + + //Extra + var self = this; + message.links = []; + var links = message.text.match(/(\b(http:\/\/|www.)[^\s]*)/gi); + _.each(links, function(link){ + link = url.parse(link); + if(!link.host) return; + link.isImage = /(.gif|.jpeg|.jpg|.png)$/i.test(link.pathname); + link.isYoutube = (link.host.indexOf('youtube.com') != -1 && link.search); + if(link.isYoutube){ + var youtubeId = link.search.split('v=')[1]; + if(youtubeId){ + var ampersandPosition = youtubeId.indexOf('&'); + if(ampersandPosition != -1){ + link.youtubeId = youtubeId.substring(0, ampersandPosition); + }else{ + link.youtubeId = youtubeId; + } + }else{ + link.isYoutube = false; + } + } + message.links.push(link); + }); + + message.name = frame.user.name.toLowerCase; + //message.type = 'user'; // parse this properly this.message = message; this.user = frame.user; } -Request.prototype.write = function(body){ + +Request.prototype.write = function(body, channel){ if(this.room.ispm) this.room.message(this.user.name, body); else - this.room.message(body); + this.room.message(body, !channel ? this.message.channel : channel); } // Database format From 26641faf0b7c3311db7ff019bbbde8c4c1aead8f Mon Sep 17 00:00:00 2001 From: kamijoutouma Date: Fri, 19 Sep 2014 12:56:56 -0400 Subject: [PATCH 4/4] Update utils.js --- derplib/utils.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/derplib/utils.js b/derplib/utils.js index 28f55ce..00c2f42 100644 --- a/derplib/utils.js +++ b/derplib/utils.js @@ -426,3 +426,25 @@ exports.getAnonName = function(num, ts) { */ +exports.choose_channel = function(channel) { + return Math.floor(65536*Math.floor(Math.random()))+Math.floor(exports.number_random(0,255)+Math.floor(256*(channel !== 0 ? Math.pow(2,channel)/2 : 0))); +} + +exports.find_channel = function(channel) { + var channels = { + 0: {name: 'no color', numbers: [0,255]}, + 1: {name: 'Vivid red', numbers: [256,511]}, + 2: {name: 'Vivid orange', numbers: [512,767]}, + 3: {name: 'Moderate lime green', numbers: [1024,1279]}, + 4: {name: 'Bright blue', numbers: [2048,2303]}, + 5: {name: 'Strong blue', numbers: [4096,4351]}, + 6: {name: 'Dark moderate violet', numbers: [8192,8447]}, + 7: {name: 'Vivid pink', numbers: [16384,16639]}, + 8: {name: 'mods only', numbers: [32768,33023]} + } + for(var i = 0; i < Object.keys(channels).length; i++){ + if(channels[i].numbers[0] <= channel && channels[i].numbers[1] >= channel || channels[i].name == channel){ + return [i, channels[i].name]; + } + } +}