From 08ffbb7d3c94cbf3ad72e46b49f56817deb37e0b Mon Sep 17 00:00:00 2001
From: spjspj <spjspj4@gmail.com>
Date: Sat, 12 Nov 2016 22:37:18 +1100
Subject: [PATCH 1/2] Fix spam filter on a per-user basis and implement
 rudimentary swear guard.

---
 .../main/java/mage/server/ChatManager.java    | 26 ++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java
index ba2a3fca2b..6ade71332d 100644
--- a/Mage.Server/src/main/java/mage/server/ChatManager.java
+++ b/Mage.Server/src/main/java/mage/server/ChatManager.java
@@ -29,6 +29,7 @@ package mage.server;
 
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.HashMap;
 import java.util.Locale;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
@@ -45,6 +46,7 @@ import org.apache.log4j.Logger;
 public class ChatManager {
 
     private static final Logger logger = Logger.getLogger(ChatManager.class);
+    private static HashMap<String, String> userMessages = new HashMap<>();
 
     private static final ChatManager INSTANCE = new ChatManager();
 
@@ -103,8 +105,13 @@ public class ChatManager {
     public void broadcast(UUID chatId, String userName, String message, MessageColor color, boolean withTime, MessageType messageType) {
         this.broadcast(chatId, userName, message, color, withTime, messageType, null);
     }
-
-    static String lastMessage = "";
+    
+    private boolean containsSwearing(String message) {
+        if (message != null && message.toLowerCase().matches("^.*(asshole|balls|bastard|bitch|blowjob|cock|crap|cunt|damn|dick|douche|fag|fuck|idiot|moron|piss|prick|pussy|rape|rapist|screw you|shit|slut|vagina).*$")) {
+            return true;
+        }
+        return false;
+    }
 
     public void broadcast(UUID chatId, String userName, String message, MessageColor color, boolean withTime, MessageType messageType, SoundToPlay soundToPlay) {
         ChatSession chatSession = chatSessions.get(chatId);
@@ -120,10 +127,18 @@ public class ChatManager {
             }
 
             if (!messageType.equals(MessageType.GAME)) {
-                if (message.equals(lastMessage)) {
-                    // prevent identical messages
-                    return;
+
+                if (userName != null && !userName.equals("")) {
+                    if (message.equals(userMessages.get(userName))) {
+                        // prevent identical messages
+                        return;
+                    }
+                    userMessages.put(userName, message);
+                    if (containsSwearing(message)) {
+                        return;
+                    }
                 }
+
                 if (messageType.equals(MessageType.TALK)) {
                     User user = UserManager.getInstance().getUserByName(userName);
                     if (user != null) {
@@ -139,7 +154,6 @@ public class ChatManager {
                 }
 
             }
-            lastMessage = message;
             chatSession.broadcast(userName, message, color, withTime, messageType, soundToPlay);
         }
     }

From af725f8a6e57ff44083abbeb760820c4bf547f01 Mon Sep 17 00:00:00 2001
From: spjspj <spjspj4@gmail.com>
Date: Sat, 12 Nov 2016 22:39:18 +1100
Subject: [PATCH 2/2] Fix spam filter on a per-user basis and implement
 rudimentary swear guard.

---
 Mage.Server/src/main/java/mage/server/ChatManager.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java
index 6ade71332d..ac0e7a6821 100644
--- a/Mage.Server/src/main/java/mage/server/ChatManager.java
+++ b/Mage.Server/src/main/java/mage/server/ChatManager.java
@@ -128,7 +128,7 @@ public class ChatManager {
 
             if (!messageType.equals(MessageType.GAME)) {
 
-                if (userName != null && !userName.equals("")) {
+                if (message != null && userName != null && !userName.equals("")) {
                     if (message.equals(userMessages.get(userName))) {
                         // prevent identical messages
                         return;