Continue refactoring

This commit is contained in:
calzoneman 2013-11-17 15:32:19 -06:00
parent 6e99990ef0
commit 0e95ef2aa4
3 changed files with 102 additions and 13 deletions

View File

@ -604,7 +604,7 @@ Channel.prototype.tryNameBan = function(actor, name) {
var notice = { var notice = {
username: "[server]", username: "[server]",
msg: actor.name + " banned " + name, msg: actor.name + " banned " + name,
msgclass: "server-whisper", meta: { addClass: "server-whisper" },
time: Date.now() time: Date.now()
}; };
self.users.forEach(function(u) { self.users.forEach(function(u) {
@ -716,7 +716,7 @@ Channel.prototype.tryIPBan = function(actor, name, range) {
username: "[server]", username: "[server]",
msg: actor.name + " banned " + $util.maskIP(ip) + msg: actor.name + " banned " + $util.maskIP(ip) +
" (" + name + ")", " (" + name + ")",
msgclass: "server-whisper", meta: { addClass: "server-whisper" },
time: Date.now() time: Date.now()
}; };
self.users.forEach(function(u) { self.users.forEach(function(u) {
@ -1133,7 +1133,7 @@ Channel.prototype.broadcastNewUser = function(user) {
var pkt = { var pkt = {
username: "[server]", username: "[server]",
msg: msg, msg: msg,
msgclass: "server-whisper", meta: { addClass: "server-whisper" },
time: Date.now() time: Date.now()
}; };
self.sendAllWithRank(2, "joinMessage", pkt); self.sendAllWithRank(2, "joinMessage", pkt);
@ -2209,6 +2209,15 @@ Channel.prototype.tryChat = function(user, data) {
return; return;
} }
// Validate meta
var meta = {};
if (user.rank >= 2) {
if ("modflair" in data.meta && data.meta.modflair === user.rank) {
meta.modflair = data.meta.modflair;
}
}
data.meta = meta;
var msg = data.msg; var msg = data.msg;
if(msg.length > 240) { if(msg.length > 240) {
msg = msg.substring(0, 240); msg = msg.substring(0, 240);
@ -2300,7 +2309,8 @@ Channel.prototype.sendMessage = function (user, msg, meta, filter) {
if(this.chatbuffer.length > 15) if(this.chatbuffer.length > 15)
this.chatbuffer.shift(); this.chatbuffer.shift();
var unescaped = sanitize(msg).entityDecode(); var unescaped = sanitize(msg).entityDecode();
this.logger.log("<" + user.name + "> " + unescaped); this.logger.log("<" + user.name + (meta.addClass ? "." + meta.addclass : "")
+ "> " + unescaped);
} }
}; };

View File

@ -13,6 +13,7 @@ var Logger = require("./logger.js");
var Poll = require("./poll").Poll; var Poll = require("./poll").Poll;
var handlers = { var handlers = {
/* commands that send chat messages */
"me": function (chan, user, msg, meta) { "me": function (chan, user, msg, meta) {
meta.addClass = "action"; meta.addClass = "action";
meta.action = true; meta.action = true;
@ -29,9 +30,6 @@ var handlers = {
chan.sendMessage(user, msg, meta); chan.sendMessage(user, msg, meta);
} }
}, },
"afk": function (chan, user, msg, meta) {
user.setAFK(!user.meta.afk);
},
"a": function (chan, user, msg, meta) { "a": function (chan, user, msg, meta) {
var superadminflair = { var superadminflair = {
labelclass: "label-important", labelclass: "label-important",
@ -55,33 +53,108 @@ var handlers = {
meta.forceShowName = true; meta.forceShowName = true;
chan.sendMessage(user, cargs.join(" "), meta); chan.sendMessage(user, cargs.join(" "), meta);
}, },
"poll": function (chan, user, msg, meta) {
handlePoll(chan, user, msg, false);
},
"hpoll": function (chan, user, msg, meta) {
handlePoll(chan, user, msg, true);
},
/* commands that do not send chat messages */
"afk": function (chan, user, msg, meta) {
user.setAFK(!user.meta.afk);
},
"mute": function (chan, user, msg, meta) { "mute": function (chan, user, msg, meta) {
handleMute(chan, user, msg.split(" ")); handleMute(chan, user, msg.split(" "));
}, },
"smute": function (chan, user, msg, meta) { "smute": function (chan, user, msg, meta) {
handleShadowMute(chan, user, msg.split(" ")); handleShadowMute(chan, user, msg.split(" "));
},
"unmute": function (chan, user, msg, meta) {
handleUnmute(chan, user, msg.split(" "));
},
"kick": function (chan, user, msg, meta) {
handleKick(chan, user, msg.split(" "));
},
"ban": function (chan, user, msg, meta) {
handleBan(chan, user, msg.split(" "));
},
"ipban": function (chan, user, msg, meta) {
handleIPBan(chan, user, msg.split(" "));
},
"unban": function (chan, user, msg, meta) {
handleUnban(chan, user, msg.split(" "));
},
"clear": function (chan, user, msg, meta) {
handleClear(chan, user);
},
"clean": function (chan, user, msg, meta) {
handleClean(chan, user, msg);
},
"cleantitle": function (chan, user, msg, meta) {
handleCleanTitle(chan, user, msg);
} }
}; };
var handlerList = []; var handlerList = [];
for (var key in handlers) { for (var key in handlers) {
handlerList.push({ handlerList.push({
sub: key.length + 2,
re: new RegExp("^\\/" + key + "(?:\\s|$)"), re: new RegExp("^\\/" + key + "(?:\\s|$)"),
fn: handlers[key] fn: handlers[key]
}); });
} }
function handle(chan, user, msg, meta) { function handle(chan, user, msg, meta) {
// Special case
var m = msg.match(/^\/d(-?[0-9]*)(?:\s|$)(.*)/);
if (m) {
handleDrink(chan, user, m[1], m[2], meta);
return;
}
for (var i = 0; i < handlerList.length; i++) { for (var i = 0; i < handlerList.length; i++) {
var h = handlerList[i]; var h = handlerList[i];
if (msg.match(h.re)) { if (msg.match(h.re)) {
h.fn(chan, user, msg.substring(h.sub), meta); var rest;
if (msg.indexOf(" ") >= 0) {
rest = msg.substring(msg.indexOf(" ") + 1);
} else {
rest = "";
}
h.fn(chan, user, rest, meta);
break; break;
} }
} }
} }
function handleDrink(chan, user, count, msg, meta) {
if (!chan.hasPermission(user, "drink")) {
return;
}
if (count === "") {
count = 1;
}
count = parseInt(count);
if (isNaN(count)) {
return;
}
meta.drink = true;
meta.forceShowName = true;
meta.addClass = "drink";
chan.drinks += count;
chan.broadcastDrinks();
if (count < 0 && msg.trim() === "") {
return;
}
msg = msg + " drink!";
if (count !== 1) {
msg += " (x" + count + ")";
}
chan.sendMessage(user, msg, meta);
}
function handleOld(chan, user, msg, data) { function handleOld(chan, user, msg, data) {
if(msg.indexOf("/me ") == 0) if(msg.indexOf("/me ") == 0)
chan.sendMessage(user.name, msg.substring(4), "action", data); chan.sendMessage(user.name, msg.substring(4), "action", data);
@ -207,7 +280,7 @@ function handleShadowMute(chan, user, args) {
var pkt = { var pkt = {
username: "[server]", username: "[server]",
msg: user.name + " shadow muted " + args[0], msg: user.name + " shadow muted " + args[0],
msgclass: "server-whisper", addClass: "server-whisper",
time: Date.now() time: Date.now()
}; };
chan.users.forEach(function (u) { chan.users.forEach(function (u) {
@ -343,6 +416,7 @@ function handlePoll(chan, user, msg, hidden) {
} }
} }
/*
function handleDrink(chan, user, msg, data) { function handleDrink(chan, user, msg, data) {
if(!chan.hasPermission(user, "drink")) { if(!chan.hasPermission(user, "drink")) {
return; return;
@ -366,6 +440,7 @@ function handleDrink(chan, user, msg, data) {
msg += " (x" + count + ")"; msg += " (x" + count + ")";
chan.sendMessage(user.name, msg, "drink", data); chan.sendMessage(user.name, msg, "drink", data);
} }
*/
function handleClear(chan, user) { function handleClear(chan, user) {
if(user.rank < 2) { if(user.rank < 2) {

View File

@ -1454,6 +1454,10 @@ function formatChatMessage(data) {
LASTCHATNAME = data.username; LASTCHATNAME = data.username;
LASTCHATTIME = data.time; LASTCHATTIME = data.time;
var div = $("<div/>"); var div = $("<div/>");
if (data.meta.addClass === "drink") {
div.addClass("drink");
data.meta.addClass = "";
}
if (USEROPTS.show_timestamps) { if (USEROPTS.show_timestamps) {
var time = $("<span/>").addClass("timestamp").appendTo(div); var time = $("<span/>").addClass("timestamp").appendTo(div);
var timestamp = new Date(data.time).toTimeString().split(" ")[0]; var timestamp = new Date(data.time).toTimeString().split(" ")[0];