浏览代码

Added /silence command for admins.

KrisVos130 9 年之前
父节点
当前提交
ed1d570850
共有 2 个文件被更改,包括 51 次插入3 次删除
  1. 13 2
      app/client/client.js
  2. 38 1
      app/server/server.js

+ 13 - 2
app/client/client.js

@@ -430,6 +430,14 @@ function executeCommand(command, params){
                 console.log(err);
                 console.log(err);
             }
             }
         });
         });
+    } else if(command === "silence"){
+        var user = params[0];
+        var time = params[1];
+        Meteor.call("muteUser", user, time, function(err, res){
+            if(err){
+                console.log(err);
+            }
+        });
     } else if(command === "pause"){
     } else if(command === "pause"){
         Meteor.call("pauseRoom", Session.get("type"), function(err, res){
         Meteor.call("pauseRoom", Session.get("type"), function(err, res){
             if(err){
             if(err){
@@ -466,6 +474,9 @@ function sendMessage() {
                 message.shift();
                 message.shift();
                 message = message.join("");
                 message = message.join("");
                 var params = message.split(" ");
                 var params = message.split(" ");
+                params = params.map(function(param) {
+                    return param.replace(/\r?\n|\r/g, "");
+                });
                 var command = params.shift();
                 var command = params.shift();
                 command = command.replace(/\r?\n|\r/g, "");
                 command = command.replace(/\r?\n|\r/g, "");
                 if (executeCommand(command, params)) {
                 if (executeCommand(command, params)) {
@@ -479,9 +490,9 @@ function sendMessage() {
                 Meteor.call("sendMessage", Session.get("type"), message, function (err, res) {
                 Meteor.call("sendMessage", Session.get("type"), message, function (err, res) {
                     if (res) {
                     if (res) {
                         $("#chat-input").val("");
                         $("#chat-input").val("");
+                        $("#chat-input").removeAttr("disabled");
+                        $("#chat-input").removeClass("disabled");
                     }
                     }
-                    $("#chat-input").removeAttr("disabled");
-                    $("#chat-input").removeClass("disabled");
                 });
                 });
             }
             }
         }
         }

+ 38 - 1
app/server/server.js

@@ -503,6 +503,20 @@ function isBanned() {
     }
     }
 }
 }
 
 
+function isMuted() {
+    var userData = Meteor.users.findOne(Meteor.userId());
+    if (Meteor.userId() && userData !== undefined && userData.punishments !== undefined && userData.punishments.mute !== undefined) {
+        var mute = userData.punishments.mute;
+        if (new Date(mute.bannedUntil).getTime() <= new Date().getTime()) {
+            Meteor.users.update(Meteor.userId(), {$unset: {"punishments.mute": ""}});
+            return false;
+        } else {
+            return true;
+        }
+    } else {
+        return false;
+    }
+}
 
 
 Meteor.methods({
 Meteor.methods({
     lockRoom: function(type) {
     lockRoom: function(type) {
@@ -539,9 +553,32 @@ Meteor.methods({
             throw new Meteor.Error(403, "Invalid permissions.");
             throw new Meteor.Error(403, "Invalid permissions.");
         }
         }
     },
     },
+    muteUser: function(username, period) {
+        if (isAdmin() && !isBanned()) {
+            var user = Meteor.user();
+            var mutedUser = Meteor.users.findOne({"profile.usernameL": username.toLowerCase()});
+            if (period === undefined || Number(period) === 0) {
+                mutedUntil = 8640000000000000;
+            } else {
+                var mutedUntil = (new Date).getTime() + (period * 1000);
+                if (mutedUntil > 8640000000000000) {
+                    mutedUntil = 8640000000000000;
+                }
+            }
+            mutedUntil = new Date(mutedUntil);
+            var muteObject = {mutedBy: user.profile.usernameL, mutedAt: new Date(Date.now()), mutedUntil: mutedUntil};
+            Meteor.users.update({"profile.usernameL": mutedUser.profile.usernameL}, {$set: {"punishments.mute": muteObject}});
+            Meteor.users.update({"profile.usernameL": mutedUser.profile.usernameL}, {$push: {"punishments.mutes": muteObject}});
+        } else {
+            throw new Meteor.Error(403, "Invalid permissions.");
+        }
+    },
     isBanned: function() {
     isBanned: function() {
         return isBanned();
         return isBanned();
     },
     },
+    isMuted: function() {
+        return isMuted();
+    },
     updateSettings: function(showRating) {
     updateSettings: function(showRating) {
         if (Meteor.userId() && !isBanned()) {
         if (Meteor.userId() && !isBanned()) {
             var user = Meteor.user();
             var user = Meteor.user();
@@ -598,7 +635,7 @@ Meteor.methods({
         }
         }
     },
     },
     sendMessage: function(type, message) {
     sendMessage: function(type, message) {
-        if (Meteor.userId() && !isBanned()) {
+        if (Meteor.userId() && !isBanned() && !isMuted()) {
             var user = Meteor.user();
             var user = Meteor.user();
             var time = new Date();
             var time = new Date();
             var rawrank = user.profile.rank;
             var rawrank = user.profile.rank;