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 = {
username: "[server]",
msg: actor.name + " banned " + name,
msgclass: "server-whisper",
meta: { addClass: "server-whisper" },
time: Date.now()
};
self.users.forEach(function(u) {
@ -716,7 +716,7 @@ Channel.prototype.tryIPBan = function(actor, name, range) {
username: "[server]",
msg: actor.name + " banned " + $util.maskIP(ip) +
" (" + name + ")",
msgclass: "server-whisper",
meta: { addClass: "server-whisper" },
time: Date.now()
};
self.users.forEach(function(u) {
@ -1133,7 +1133,7 @@ Channel.prototype.broadcastNewUser = function(user) {
var pkt = {
username: "[server]",
msg: msg,
msgclass: "server-whisper",
meta: { addClass: "server-whisper" },
time: Date.now()
};
self.sendAllWithRank(2, "joinMessage", pkt);
@ -2209,6 +2209,15 @@ Channel.prototype.tryChat = function(user, data) {
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;
if(msg.length > 240) {
msg = msg.substring(0, 240);
@ -2300,7 +2309,8 @@ Channel.prototype.sendMessage = function (user, msg, meta, filter) {
if(this.chatbuffer.length > 15)
this.chatbuffer.shift();
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 handlers = {
/* commands that send chat messages */
"me": function (chan, user, msg, meta) {
meta.addClass = "action";
meta.action = true;
@ -29,9 +30,6 @@ var handlers = {
chan.sendMessage(user, msg, meta);
}
},
"afk": function (chan, user, msg, meta) {
user.setAFK(!user.meta.afk);
},
"a": function (chan, user, msg, meta) {
var superadminflair = {
labelclass: "label-important",
@ -55,33 +53,108 @@ var handlers = {
meta.forceShowName = true;
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) {
handleMute(chan, user, msg.split(" "));
},
"smute": function (chan, user, msg, meta) {
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 = [];
for (var key in handlers) {
handlerList.push({
sub: key.length + 2,
re: new RegExp("^\\/" + key + "(?:\\s|$)"),
fn: handlers[key]
});
}
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++) {
var h = handlerList[i];
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;
}
}
}
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) {
if(msg.indexOf("/me ") == 0)
chan.sendMessage(user.name, msg.substring(4), "action", data);
@ -172,7 +245,7 @@ function handleOld(chan, user, msg, data) {
}
function handleShadowMute(chan, user, args) {
if(chan.hasPermission(user, "mute") && args.length > 0) {
if (chan.hasPermission(user, "mute") && args.length > 0) {
args[0] = args[0].toLowerCase();
var person = false;
for(var i = 0; i < chan.users.length; i++) {
@ -182,8 +255,8 @@ function handleShadowMute(chan, user, args) {
}
}
if(person) {
if(person.rank >= user.rank) {
if (person) {
if (person.rank >= user.rank) {
user.socket.emit("errorMsg", {
msg: "You don't have permission to mute that person."
});
@ -207,7 +280,7 @@ function handleShadowMute(chan, user, args) {
var pkt = {
username: "[server]",
msg: user.name + " shadow muted " + args[0],
msgclass: "server-whisper",
addClass: "server-whisper",
time: Date.now()
};
chan.users.forEach(function (u) {
@ -343,6 +416,7 @@ function handlePoll(chan, user, msg, hidden) {
}
}
/*
function handleDrink(chan, user, msg, data) {
if(!chan.hasPermission(user, "drink")) {
return;
@ -366,6 +440,7 @@ function handleDrink(chan, user, msg, data) {
msg += " (x" + count + ")";
chan.sendMessage(user.name, msg, "drink", data);
}
*/
function handleClear(chan, user) {
if(user.rank < 2) {

View File

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