mirror of https://github.com/calzoneman/sync.git
Serverside support for custom chat filters
This commit is contained in:
parent
954751ec6c
commit
ddc5016497
91
channel.js
91
channel.js
|
@ -43,9 +43,10 @@ var Channel = function(name) {
|
|||
customcss: ""
|
||||
};
|
||||
this.filters = [
|
||||
[new RegExp("`([^`]+)`", "g"), "<code>$1</code>", true],
|
||||
[new RegExp("\\*([^\\*]+)\\*", "g"), "<strong>$1</strong>", true],
|
||||
[new RegExp(" _([^_]+)_", "g"), " <em>$1</em>", true]
|
||||
[/`([^`]+)`/g , "<code>$1</code>" , true],
|
||||
[/\*([^\*]+)\*/g , "<strong>$1</strong>", true],
|
||||
[/(^| )_([^_]+)_/g , "$1<em>$2</em>" , true],
|
||||
[/\\\\([-a-zA-Z0-9]+)/g, "[](/$1)" , true]
|
||||
];
|
||||
|
||||
this.ipbans = {};
|
||||
|
@ -67,6 +68,14 @@ var Channel = function(name) {
|
|||
this.currentPosition = data.currentPosition - 1;
|
||||
this.playNext();
|
||||
this.opts = data.opts;
|
||||
if(data.filters) {
|
||||
this.filters = new Array(data.filters.length);
|
||||
for(var i = 0; i < data.filters.length; i++) {
|
||||
this.filters[i] = [new RegExp(data.filters[i][0]),
|
||||
data.filters[i][1],
|
||||
data.filters[i][2]];
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(e) {
|
||||
Logger.errlog.log("Channel dump load failed: ");
|
||||
|
@ -426,17 +435,6 @@ Channel.prototype.userJoin = function(user) {
|
|||
user.socket.emit("newPoll", this.poll.packUpdate());
|
||||
}
|
||||
user.socket.emit("channelOpts", this.opts);
|
||||
var ents = [];
|
||||
for(var ip in this.ipbans) {
|
||||
if(this.ipbans[ip] != null) {
|
||||
ents.push({
|
||||
ip: ip,
|
||||
name: this.ipbans[ip][0],
|
||||
banner: this.ipbans[ip][1]
|
||||
});
|
||||
}
|
||||
}
|
||||
user.socket.emit("banlist", {entries: ents});
|
||||
if(user.playerReady)
|
||||
this.sendMediaUpdate(user);
|
||||
this.logger.log("+++ /" + user.ip + " joined");
|
||||
|
@ -762,6 +760,31 @@ Channel.prototype.moveMedia = function(data) {
|
|||
}
|
||||
}
|
||||
|
||||
Channel.prototype.updateFilter = function(filter) {
|
||||
var found = false;
|
||||
for(var i = 0; i < this.filters.length; i++) {
|
||||
if(this.filters[i][0].source == filter[0].source) {
|
||||
found = true;
|
||||
this.filters[i][1] = filter[1];
|
||||
this.filters[i][2] = filter[2];
|
||||
}
|
||||
}
|
||||
if(!found) {
|
||||
this.filters.push(filter);
|
||||
}
|
||||
this.broadcastChatFilters();
|
||||
}
|
||||
|
||||
Channel.prototype.removeFilter = function(regex) {
|
||||
for(var i = 0; i < this.filters.length; i++) {
|
||||
if(this.filters[i][0].source == regex) {
|
||||
this.filters.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.broadcastChatFilters();
|
||||
}
|
||||
|
||||
// Chat message from a user
|
||||
Channel.prototype.chatMessage = function(user, msg) {
|
||||
if(msg.indexOf("/") == 0)
|
||||
|
@ -950,6 +973,28 @@ Channel.prototype.broadcastRankUpdate = function(user) {
|
|||
rank: user.rank,
|
||||
leader: this.leader == user
|
||||
});
|
||||
|
||||
// Rank specific stuff
|
||||
if(Rank.hasPermission(user, "ipban")) {
|
||||
var ents = [];
|
||||
for(var ip in this.ipbans) {
|
||||
if(this.ipbans[ip] != null) {
|
||||
ents.push({
|
||||
ip: ip,
|
||||
name: this.ipbans[ip][0],
|
||||
banner: this.ipbans[ip][1]
|
||||
});
|
||||
}
|
||||
}
|
||||
user.socket.emit("banlist", {entries: ents});
|
||||
}
|
||||
if(Rank.hasPermission(user, "chatFilter")) {
|
||||
var filts = new Array(this.filters.length);
|
||||
for(var i = 0; i < this.filters.length; i++) {
|
||||
filts[i] = [this.filters[i][0].source, this.filters[i][1], this.filters[i][2]];
|
||||
}
|
||||
user.socket.emit("chatFilters", {filters: filts});
|
||||
}
|
||||
}
|
||||
|
||||
Channel.prototype.broadcastPoll = function() {
|
||||
|
@ -979,7 +1024,23 @@ Channel.prototype.broadcastIpbans = function() {
|
|||
});
|
||||
}
|
||||
}
|
||||
this.sendAll("banlist", {entries: ents});
|
||||
for(var i = 0; i < this.users.length; i++) {
|
||||
if(Rank.hasPermission(this.users[i], "ipban")) {
|
||||
this.users[i].socket.emit("banlist", {entries: ents});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Channel.prototype.broadcastChatFilters = function() {
|
||||
var filts = new Array(this.filters.length);
|
||||
for(var i = 0; i < this.filters.length; i++) {
|
||||
filts[i] = [this.filters[i][0].source, this.filters[i][1], this.filters[i][2]];
|
||||
}
|
||||
for(var i = 0; i < this.users.length; i++) {
|
||||
if(Rank.hasPermission(this.users[i], "ipban")) {
|
||||
this.users[i].socket.emit("chatFilters", {filters: filts});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send to ALL the clients!
|
||||
|
|
1
rank.js
1
rank.js
|
@ -29,6 +29,7 @@ var permissions = {
|
|||
shout : exports.Moderator,
|
||||
channelOpts : exports.Moderator,
|
||||
jump : exports.Moderator,
|
||||
chatFilter : exports.Moderator,
|
||||
search : exports.Guest,
|
||||
chat : exports.Guest,
|
||||
};
|
||||
|
|
|
@ -56,10 +56,17 @@ function shutdown() {
|
|||
Logger.syslog.log("Unloading channels...");
|
||||
for(var name in exports.channels) {
|
||||
var chan = exports.channels[name];
|
||||
var filts = new Array(chan.filters.length);
|
||||
for(var i = 0; i < chan.filters.length; i++) {
|
||||
filts[i] = [chan.filters[i][0].source,
|
||||
chan.filters[i][1],
|
||||
chan.filters[i][2]];
|
||||
}
|
||||
var dump = {
|
||||
currentPosition: chan.currentPosition,
|
||||
queue: chan.queue,
|
||||
opts: chan.opts
|
||||
opts: chan.opts,
|
||||
filters: filts
|
||||
};
|
||||
var text = JSON.stringify(dump);
|
||||
fs.writeFileSync("chandump/" + name, text);
|
||||
|
|
14
user.js
14
user.js
|
@ -248,6 +248,16 @@ User.prototype.initCallbacks = function() {
|
|||
this.channel.broadcastOpts();
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
this.socket.on("chatFilter", function(data) {
|
||||
if(data.cmd && data.cmd == "update" && this.channel != null) {
|
||||
data.filter[0] = new RegExp(data.filter[0], "g");
|
||||
this.channel.updateFilter(data.filter);
|
||||
}
|
||||
else if(data.cmd && data.cmd == "remove" && this.channel != null) {
|
||||
this.channel.removeFilter(data.filter[0]);
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
|
||||
// Handle administration
|
||||
|
@ -339,8 +349,6 @@ User.prototype.login = function(name, pw) {
|
|||
});
|
||||
if(this.channel != null) {
|
||||
this.channel.logger.log(this.ip + " signed in as " + name);
|
||||
if(this.rank >= Rank.Moderator)
|
||||
this.channel.sendPlaylist(this);
|
||||
this.channel.broadcastNewUser(this);
|
||||
}
|
||||
}
|
||||
|
@ -365,8 +373,6 @@ User.prototype.login = function(name, pw) {
|
|||
this.name = name;
|
||||
if(this.channel != null) {
|
||||
this.channel.logger.log(this.ip + " logged in as " + name);
|
||||
if(this.rank >= Rank.Moderator)
|
||||
this.channel.sendPlaylist(this);
|
||||
this.channel.broadcastNewUser(this);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue