From a4b44d12971837750b16bc9d1adb0055884eeabb Mon Sep 17 00:00:00 2001 From: fireshoes Date: Wed, 25 Jan 2017 10:28:44 -0600 Subject: [PATCH 1/3] Added upcoming FNM promos: Aether Hub, Servo Exhibition, and Unlicensed Disintegration --- Mage.Sets/src/mage/sets/FridayNightMagic.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic.java b/Mage.Sets/src/mage/sets/FridayNightMagic.java index 69fe4f78abf..0ca33510089 100644 --- a/Mage.Sets/src/mage/sets/FridayNightMagic.java +++ b/Mage.Sets/src/mage/sets/FridayNightMagic.java @@ -52,6 +52,7 @@ public class FridayNightMagic extends ExpansionSet { cards.add(new SetCardInfo("Abzan Beastmaster", 180, Rarity.UNCOMMON, mage.cards.a.AbzanBeastmaster.class)); cards.add(new SetCardInfo("Accumulated Knowledge", 51, Rarity.COMMON, mage.cards.a.AccumulatedKnowledge.class)); cards.add(new SetCardInfo("Acidic Slime", 145, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); + cards.add(new SetCardInfo("Aether Hub", 205, Rarity.SPECIAL, mage.cards.a.AetherHub.class)); cards.add(new SetCardInfo("Albino Troll", 20, Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); cards.add(new SetCardInfo("Anathemancer", 122, Rarity.UNCOMMON, mage.cards.a.Anathemancer.class)); cards.add(new SetCardInfo("Ancient Grudge", 144, Rarity.COMMON, mage.cards.a.AncientGrudge.class)); @@ -206,6 +207,7 @@ public class FridayNightMagic extends ExpansionSet { cards.add(new SetCardInfo("Searing Spear", 152, Rarity.COMMON, mage.cards.s.SearingSpear.class)); cards.add(new SetCardInfo("Serrated Arrows", 101, Rarity.UNCOMMON, mage.cards.s.SerratedArrows.class)); cards.add(new SetCardInfo("Serum Visions", 183, Rarity.COMMON, mage.cards.s.SerumVisions.class)); + cards.add(new SetCardInfo("Servo Exhibition", 203, Rarity.SPECIAL, mage.cards.s.ServoExhibition.class)); cards.add(new SetCardInfo("Shock", 6, Rarity.COMMON, mage.cards.s.Shock.class)); cards.add(new SetCardInfo("Shrapnel Blast", 103, Rarity.UNCOMMON, mage.cards.s.ShrapnelBlast.class)); cards.add(new SetCardInfo("Silver Knight", 46, Rarity.UNCOMMON, mage.cards.s.SilverKnight.class)); @@ -236,6 +238,7 @@ public class FridayNightMagic extends ExpansionSet { cards.add(new SetCardInfo("Tormod's Crypt", 93, Rarity.UNCOMMON, mage.cards.t.TormodsCrypt.class)); cards.add(new SetCardInfo("Treetop Village", 50, Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); cards.add(new SetCardInfo("Ultimate Price", 185, Rarity.UNCOMMON, mage.cards.u.UltimatePrice.class)); + cards.add(new SetCardInfo("Unlicensed Disintegration", 204, Rarity.SPECIAL, mage.cards.u.UnlicensedDisintegration.class)); cards.add(new SetCardInfo("Volcanic Geyser", 4, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); cards.add(new SetCardInfo("Wall of Blossoms", 23, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); cards.add(new SetCardInfo("Wall of Omens", 130, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); From f41d81f8e4d4336edf9f9a3ca34d37febacc34bd Mon Sep 17 00:00:00 2001 From: spjspj Date: Fri, 27 Jan 2017 12:38:31 +1100 Subject: [PATCH 2/3] Modify the profanity filter to push it back to client side only. --- .../java/mage/client/chat/ChatPanelBasic.java | 77 ++++++++++++++++++- .../mage/client/dialog/PreferencesDialog.java | 1 + .../main/java/mage/server/ChatManager.java | 12 --- Utils/gen-card.pl | 2 +- 4 files changed, 75 insertions(+), 17 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java index 26f0ab1a0f9..939f1579216 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java @@ -38,9 +38,12 @@ import java.awt.Dimension; import java.awt.Font; import java.awt.event.KeyEvent; import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.JTextField; import mage.client.MageFrame; import mage.client.SessionHandler; +import mage.client.dialog.PreferencesDialog; import mage.client.util.GUISizeHelper; import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageType; @@ -184,6 +187,39 @@ public class ChatPanelBasic extends javax.swing.JPanel { } } + Pattern profanityPattern = Pattern.compile(".*(1ab1a|1d1ot|13ch|13p3r|13sb1ans|13sbo|13s13|13sb1an|13sbo|13sy|1nbr3d|1nc3st|1njun|1ub3|\\Wbj|\\Wcum|\\Wdum|\\Wfag|\\Wfap|\\Wfuk|\\Wj1s|\\Wp3do|\\Wp33|\\Wpoo\\W|\\Wt1t|aho13|an1l1ngu|ana1|anus|ar3o1a|ar3o13|ary1an|ashat|asho13|asmast3r|asmunch|asw1p3|b1atch|b1gt1t|b1mbo|b1ow|b1tch|ba1ls|bab3|bang|barf|bastard|bawdy|b3an3r|b3ard3dc1am|b3ast1al1ty|b3atch|b3at3r|b3av3r|b3otch|b3yotch|bo1nk|bod1ly|bon3d|bon3r|bon3|boob|boot13|booty|bow31|br3ast|bugg3r|bukak3|bung|busty|butt|c11t|caca|cahon3|cam31to3|carp3tmunch3r|cawk|c3rv1x|ch1nc|ch1nk|chod3|co1tal|cockb1ock|cockho1st3r|cocknock3r|cocksmok3r|cocksuck3r|cock|condom|coon|corksuck3r|crabs|cums1ut|cumshot|cumsta1n|cun1l1ngus|cuntfac3|cunthunt3r|cunt|d1ck|d1k3|d1ldo|d1mw1t|d1ngl3|d1psh1p|dago|dam1t|damn1t|damn3d|damn|dawg13styl3|dog13styl3|dogysty13|dong|dop3y|douch3|drunk|dumas|dumbas|dumy|dyk3|3jacu1at3|3n1arg3m3nt|3r3ct1on|3r3ct|3rot1c|3xtacy|3xtasy|f.ck|f1osy|f1st3d|f1st1ng|f1sty|fa1gt|fa1g|fack|fag1t|fag3d|fagot|fag|fcuk|f31at1o|f31at3|f31ch1ng|f31ch3r|f31ch|f31tch3r|f31tch|foad|fobar|fond13|for3sk1n|fu.k|fudg3pack3r|fuk|g1ans|g1golo|ganja|ghay|gh3y|go1d3nshow3r|gonad|gook|gr1ngo|h1tl3r|handjob|hardon|hokah|hok3r|homo|honky|hoor|hootch|hoot3r|horny|hump1ng|hump3d|hump|hym3n|j1sm|j1s3d|j1sm|j1s|jackas|jackho13|jackof|j3rk3d|j3rkof|j3rk|junk13|junky|k1an|k1k3|k1nky|knob3nd|kyk3|mams|masa|mast3rba|masturba|max1|m3ns3s|m3nstruat|mfuck1ng|mofo|moron|moth3rf|mthrf|muff|n1gl|n1g|n1mrod|n1ny|n1pl3|nak3d|napa1m|napy|nas1|n3gro|noky|nympho|op1at3|op1um|ora1y|ora1|org13s|organ|orgasm|orgy|ovary|ovum|p1lowb1t3r|p1mp|p1nko|p1s3d|p1ssof|p1ss|pak1|pant13|panty|past13|pasty|p3ck3r|p3doph1l|p33p33|p3n1al|p3n1l3|p3n1s|p3n3trat1on|p3n3trat3|p3rv3rs1on|p3yot3|pha11c|phuck|po1ack|po1ock|poontang|poon|poop|porno|porn|pr1ck|pr1g|pron|pub1|pub3|punkas|punky|puss1|pussy|puto|qu1cky|qu1ck13|qu1m|qu3af|qu3ro|qu3rs|qu3r|r1mjob|r1tard|racy|rap1st|rap3d|rap3r|rap3|raunch|r31ch|r3cta1|r3ctum|r3ctus|r3tard|r3tar|rtard|rumpram3r|rump|s1av3|s13as|s1ut|sack|sad1s|scag|scant1ly|sch1ong|sch1so|scr3w|scrog|scrot|scrud|scum|s3aman|s3am3n|s3duc3|s3m3n|s3xua1|sh1t|skag|skank|sm3gma|smut|sn1p3r|snatch|sodom|sp1ck|sp1c|sp1k|sp3rm|spunk|st3amy|stfu|ston3d|str1p|strok3|stup1d|suck|sumofab1atch|t1nkl3|t1tfuck|tampon|tard|t3abag1ng|t3at|t3st1|t3st3|t3urd|thrust|tramp|trans|trashy|twat|ug1y|unw3d|ur1n3a|ut3rus|vag1na|vu1gar|vu1va|w1g3r|wang|wank3r|wank|w31n3r|w31rdo|w3dg13|w3n13|w3tback|w3w3|wh1t3y|wh1s|whor3|womb).*"); + Pattern profanity2Pattern = Pattern.compile(".*(1ab1a|1d1ot|13ch|13p3r|13sb1ans|13sbo|13s13|13sb1an|13sbo|13sy|1nbr3d|1nc3st|1njun|1ub3|\\Wbj|\\Wcum|\\Wdum|\\Wfag|\\Wfap|\\Wfuk|\\Wj1s|\\Wp3do|\\Wp3|\\Wpo\\W|\\Wt1t|aho13|an1l1ngu|ana1|anus|ar3o1a|ar3o13|ary1an|ashat|asho13|asmast3r|asmunch|asw1p3|b1atch|b1gt1t|b1mbo|b1ow|b1tch|ba1ls|bab3|bang|barf|bastard|bawdy|b3an3r|b3ard3dc1am|b3ast1al1ty|b3atch|b3at3r|b3av3r|b3otch|b3yotch|bo1nk|bod1ly|bon3d|bon3r|bon3|bob|bot13|boty|bow31|br3ast|bug3r|bukak3|bung|busty|but|c1t|caca|cahon3|cam31to3|carp3tmunch3r|cawk|c3rv1x|ch1nc|ch1nk|chod3|co1tal|cockb1ock|cockho1st3r|cocknock3r|cocksmok3r|cocksuck3r|cock|condom|con|corksuck3r|crabs|cums1ut|cumshot|cumsta1n|cun1l1ngus|cuntfac3|cunthunt3r|cunt|d1ck|d1k3|d1ldo|d1mw1t|d1ngl3|d1psh1p|dago|dam1t|damn1t|damn3d|damn|dawg13styl3|dog13styl3|dogysty13|dong|dop3y|douch3|drunk|dumas|dumbas|dumy|dyk3|3jacu1at3|3n1arg3m3nt|3r3ct1on|3r3ct|3rot1c|3xtacy|3xtasy|f.ck|f1osy|f1st3d|f1st1ng|f1sty|fa1gt|fa1g|fack|fag1t|fag3d|fagot|fag|fcuk|f31at1o|f31at3|f31ch1ng|f31ch3r|f31ch|f31tch3r|f31tch|foad|fobar|fond13|for3sk1n|fu.k|fudg3pack3r|fuk|g1ans|g1golo|ganja|ghay|gh3y|go1d3nshow3r|gonad|gr1ngo|h1tl3r|handjob|hardon|hokah|hok3r|homo|honky|hor|hotch|hot3r|horny|hump1ng|hump3d|hump|hym3n|j1sm|j1s3d|j1sm|j1s|jackas|jackho13|jackof|j3rk3d|j3rkof|j3rk|junk13|junky|k1an|k1k3|k1nky|knob3nd|kyk3|mams|masa|mast3rba|masturba|max1|m3ns3s|m3nstruat|mfuck1ng|mofo|moron|moth3rf|mthrf|muf|n1gl|n1g|n1mrod|n1ny|n1pl3|nak3d|napa1m|napy|nas1|n3gro|noky|nympho|op1at3|op1um|ora1y|ora1|org13s|organ|orgasm|orgy|ovary|ovum|p1lowb1t3r|p1mp|p1nko|p1s3d|p1sof|p1s|pak1|pant13|panty|past13|pasty|p3ck3r|p3doph1l|p3p3|p3n1al|p3n1l3|p3n1s|p3n3trat1on|p3n3trat3|p3rv3rs1on|p3yot3|pha1c|phuck|po1ack|po1ock|pontang|pon|pop|porno|porn|pr1ck|pr1g|pron|pub1|pub3|punkas|punky|pus1|pusy|puto|qu1cky|qu1ck13|qu1m|qu3af|qu3ro|qu3rs|qu3r|r1mjob|r1tard|racy|rap1st|rap3d|rap3r|rap3|raunch|r31ch|r3cta1|r3ctum|r3ctus|r3tard|r3tar|rtard|rumpram3r|rump|s1av3|s13as|s1ut|sack|sad1s|scag|scant1ly|sch1ong|sch1so|scr3w|scrog|scrot|scrud|scum|s3aman|s3am3n|s3duc3|s3m3n|s3xua1|sh1t|skag|skank|sm3gma|smut|sn1p3r|snatch|sodom|sp1ck|sp1c|sp1k|sp3rm|spunk|st3amy|stfu|ston3d|str1p|strok3|stup1d|suck|sumofab1atch|t1nkl3|t1tfuck|tampon|tard|t3abag1ng|t3at|t3st1|t3st3|t3urd|thrust|tramp|trans|trashy|twat|ug1y|unw3d|ur1n3a|ut3rus|vag1na|vu1gar|vu1va|w1g3r|wang|wank3r|wank|w31n3r|w31rdo|w3dg13|w3n13|w3tback|w3w3|wh1t3y|wh1s|whor3|womb).*"); + + private boolean containsSwearing(String message, String level) { + String orig = message; + message = message.replaceAll("\\W", "."); + message = "." + message + "."; + + message = message.toLowerCase(); + message = message.replaceAll("(.)(\\1{2,})", "$1"); + message = message.replaceAll("[@]", "a"); + message = message.replaceAll("[il]", "1"); + message = message.replaceAll("[e]", "3"); + message = message.replaceAll("[0]", "o"); + message = message.replaceAll("[5z]", "s"); + + Matcher matchPattern = profanityPattern.matcher(message); + if (matchPattern.find()) { + System.out.println("message: Matched profanity:" + message); + return true; + } + + if (level.equals("2")) { + message = message.replaceAll("\\.", ""); + matchPattern = profanity2Pattern.matcher(message); + if (matchPattern.find()) { + System.out.println("message: Matched profanity (level2):" + message); + return true; + } + } + return false; + } + /** * Display message in the chat. Use different colors for timestamp, username * and message. @@ -194,6 +230,8 @@ public class ChatPanelBasic extends javax.swing.JPanel { * @param messageType * @param color Preferred color. Not used. */ + Pattern cardNamePattern = Pattern.compile(".*.*"); + public void receiveMessage(String username, String message, String time, MessageType messageType, MessageColor color) { StringBuilder text = new StringBuilder(); if (time != null) { @@ -227,11 +265,42 @@ public class ChatPanelBasic extends javax.swing.JPanel { if (color.equals(MessageColor.YELLOW)) { textColor = "Yellow"; } - if (username != null && !username.isEmpty()) { - text.append(getColoredText(userColor, username + userSeparator)); + if (messageType == MessageType.WHISPER) { + if (username.equalsIgnoreCase("Whisper from " + SessionHandler.getUserName())) { + if (message.toLowerCase().startsWith("profanity 0")) { + PreferencesDialog.saveValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "0"); + } else if (message.toLowerCase().startsWith("profanity 1")) { + PreferencesDialog.saveValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "1"); + } else if (message.toLowerCase().startsWith("profanity 2")) { + PreferencesDialog.saveValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "2"); + } + } + } + + Matcher matchPattern = cardNamePattern.matcher(message); + String messageToTest = message; + while (matchPattern.find()) { + messageToTest = message.replaceFirst("", ""); + } + + if (messageType == MessageType.USER_INFO || messageType == MessageType.GAME || messageType == MessageType.STATUS + || PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "0").equals("0") + || !PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "0").equals("0") && !containsSwearing(messageToTest, PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "0"))) { + if (username != null && !username.isEmpty()) { + text.append(getColoredText(userColor, username + userSeparator)); + } + text.append(getColoredText(textColor, ManaSymbols.replaceSymbolsWithHTML(message, ManaSymbols.Type.CHAT))); + this.txtConversation.append(text.toString()); + } else if (PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "0").equals("1")) { + if (username != null && !username.isEmpty()) { + text.append(getColoredText("black", username + userSeparator)); + } + text.append(getColoredText(textColor, ManaSymbols.replaceSymbolsWithHTML("" + message + " Profanity detected. Type: /w " + SessionHandler.getUserName() + " profanity 0' to turn the filter off", ManaSymbols.Type.CHAT))); + this.txtConversation.append(text.toString()); + } else if (PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_USE_PROFANITY_FILTER, "0").equals("2")) { + text.append(getColoredText(textColor, ManaSymbols.replaceSymbolsWithHTML("" + username + ": Profanity detected. To make it less strict, type: /w " + SessionHandler.getUserName() + " profanity 1", ManaSymbols.Type.CHAT))); + this.txtConversation.append(text.toString()); } - text.append(getColoredText(textColor, ManaSymbols.replaceSymbolsWithHTML(message, ManaSymbols.Type.CHAT))); - this.txtConversation.append(text.toString()); } protected String getColoredText(String color, String text) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index da61f41dfb0..4423038e08b 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -98,6 +98,7 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_GAME_SHOW_STORM_COUNTER = "gameShowStormCounter"; public static final String KEY_GAME_CONFIRM_EMPTY_MANA_POOL = "gameConfirmEmptyManaPool"; public static final String KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER = "gameAskMoveToGraveORder"; + public static final String KEY_GAME_USE_PROFANITY_FILTER = "gameUseProfanityFilter"; public static final String KEY_GUI_TABLE_FONT_SIZE = "guiTableFontSize"; public static final String KEY_GUI_CHAT_FONT_SIZE = "guiChatFontSize"; diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java index fe8305bdc8d..8c6903ff35a 100644 --- a/Mage.Server/src/main/java/mage/server/ChatManager.java +++ b/Mage.Server/src/main/java/mage/server/ChatManager.java @@ -110,13 +110,6 @@ public class ChatManager { this.broadcast(chatId, userName, message, color, withTime, messageType, null); } - private boolean containsSwearing(String message) { - if (message != null && message.toLowerCase().matches("^.*(anal|asshole|balls|bastard|bitch|blowjob|cock|crap|cunt|cum|damn|dick|dildo|douche|fag|fuck|idiot|moron|penis|piss|prick|pussy|rape|rapist|sex|screw|shit|slut|vagina).*$")) { - return true; - } - return false; - } - final Pattern cardNamePattern = Pattern.compile("\\[(.*?)\\]"); public void broadcast(UUID chatId, String userName, String message, MessageColor color, boolean withTime, MessageType messageType, SoundToPlay soundToPlay) { @@ -170,11 +163,6 @@ public class ChatManager { } userMessages.put(userName, message); - if (containsSwearing(messageToCheck)) { - String informUser = "Your message appears to contain profanity"; - chatSessions.get(chatId).broadcastInfoToUser(user, informUser); - return; - } } if (messageType == MessageType.TALK) { diff --git a/Utils/gen-card.pl b/Utils/gen-card.pl index 44bf93cadaa..16e6e71efe0 100755 --- a/Utils/gen-card.pl +++ b/Utils/gen-card.pl @@ -110,7 +110,7 @@ if (!exists $cards{$cardName}) { # Check if card is already implemented my $fileName = "../Mage.Sets/src/mage/cards/".substr($cardName, 0, 1)."/".toCamelCase($cardName).".java"; if(-e $fileName) { - die "$cardName is already implemented.\n"; + die "$cardName is already implemented.\n$fileName\n"; } # Generate lines to corresponding sets From 70453f1ac3b6125766af8e7d4c692f17e549d928 Mon Sep 17 00:00:00 2001 From: spjspj Date: Fri, 27 Jan 2017 18:19:45 +1100 Subject: [PATCH 3/3] Modify the profanity filter to push it back to client side only. --- .../java/mage/client/chat/ChatPanelBasic.java | 21 ++++++++++++------- .../client/remote/CallbackClientImpl.java | 3 ++- .../main/java/mage/server/ChatManager.java | 2 ++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java index 939f1579216..aef5b49ca8a 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java @@ -187,33 +187,38 @@ public class ChatPanelBasic extends javax.swing.JPanel { } } - Pattern profanityPattern = Pattern.compile(".*(1ab1a|1d1ot|13ch|13p3r|13sb1ans|13sbo|13s13|13sb1an|13sbo|13sy|1nbr3d|1nc3st|1njun|1ub3|\\Wbj|\\Wcum|\\Wdum|\\Wfag|\\Wfap|\\Wfuk|\\Wj1s|\\Wp3do|\\Wp33|\\Wpoo\\W|\\Wt1t|aho13|an1l1ngu|ana1|anus|ar3o1a|ar3o13|ary1an|ashat|asho13|asmast3r|asmunch|asw1p3|b1atch|b1gt1t|b1mbo|b1ow|b1tch|ba1ls|bab3|bang|barf|bastard|bawdy|b3an3r|b3ard3dc1am|b3ast1al1ty|b3atch|b3at3r|b3av3r|b3otch|b3yotch|bo1nk|bod1ly|bon3d|bon3r|bon3|boob|boot13|booty|bow31|br3ast|bugg3r|bukak3|bung|busty|butt|c11t|caca|cahon3|cam31to3|carp3tmunch3r|cawk|c3rv1x|ch1nc|ch1nk|chod3|co1tal|cockb1ock|cockho1st3r|cocknock3r|cocksmok3r|cocksuck3r|cock|condom|coon|corksuck3r|crabs|cums1ut|cumshot|cumsta1n|cun1l1ngus|cuntfac3|cunthunt3r|cunt|d1ck|d1k3|d1ldo|d1mw1t|d1ngl3|d1psh1p|dago|dam1t|damn1t|damn3d|damn|dawg13styl3|dog13styl3|dogysty13|dong|dop3y|douch3|drunk|dumas|dumbas|dumy|dyk3|3jacu1at3|3n1arg3m3nt|3r3ct1on|3r3ct|3rot1c|3xtacy|3xtasy|f.ck|f1osy|f1st3d|f1st1ng|f1sty|fa1gt|fa1g|fack|fag1t|fag3d|fagot|fag|fcuk|f31at1o|f31at3|f31ch1ng|f31ch3r|f31ch|f31tch3r|f31tch|foad|fobar|fond13|for3sk1n|fu.k|fudg3pack3r|fuk|g1ans|g1golo|ganja|ghay|gh3y|go1d3nshow3r|gonad|gook|gr1ngo|h1tl3r|handjob|hardon|hokah|hok3r|homo|honky|hoor|hootch|hoot3r|horny|hump1ng|hump3d|hump|hym3n|j1sm|j1s3d|j1sm|j1s|jackas|jackho13|jackof|j3rk3d|j3rkof|j3rk|junk13|junky|k1an|k1k3|k1nky|knob3nd|kyk3|mams|masa|mast3rba|masturba|max1|m3ns3s|m3nstruat|mfuck1ng|mofo|moron|moth3rf|mthrf|muff|n1gl|n1g|n1mrod|n1ny|n1pl3|nak3d|napa1m|napy|nas1|n3gro|noky|nympho|op1at3|op1um|ora1y|ora1|org13s|organ|orgasm|orgy|ovary|ovum|p1lowb1t3r|p1mp|p1nko|p1s3d|p1ssof|p1ss|pak1|pant13|panty|past13|pasty|p3ck3r|p3doph1l|p33p33|p3n1al|p3n1l3|p3n1s|p3n3trat1on|p3n3trat3|p3rv3rs1on|p3yot3|pha11c|phuck|po1ack|po1ock|poontang|poon|poop|porno|porn|pr1ck|pr1g|pron|pub1|pub3|punkas|punky|puss1|pussy|puto|qu1cky|qu1ck13|qu1m|qu3af|qu3ro|qu3rs|qu3r|r1mjob|r1tard|racy|rap1st|rap3d|rap3r|rap3|raunch|r31ch|r3cta1|r3ctum|r3ctus|r3tard|r3tar|rtard|rumpram3r|rump|s1av3|s13as|s1ut|sack|sad1s|scag|scant1ly|sch1ong|sch1so|scr3w|scrog|scrot|scrud|scum|s3aman|s3am3n|s3duc3|s3m3n|s3xua1|sh1t|skag|skank|sm3gma|smut|sn1p3r|snatch|sodom|sp1ck|sp1c|sp1k|sp3rm|spunk|st3amy|stfu|ston3d|str1p|strok3|stup1d|suck|sumofab1atch|t1nkl3|t1tfuck|tampon|tard|t3abag1ng|t3at|t3st1|t3st3|t3urd|thrust|tramp|trans|trashy|twat|ug1y|unw3d|ur1n3a|ut3rus|vag1na|vu1gar|vu1va|w1g3r|wang|wank3r|wank|w31n3r|w31rdo|w3dg13|w3n13|w3tback|w3w3|wh1t3y|wh1s|whor3|womb).*"); - Pattern profanity2Pattern = Pattern.compile(".*(1ab1a|1d1ot|13ch|13p3r|13sb1ans|13sbo|13s13|13sb1an|13sbo|13sy|1nbr3d|1nc3st|1njun|1ub3|\\Wbj|\\Wcum|\\Wdum|\\Wfag|\\Wfap|\\Wfuk|\\Wj1s|\\Wp3do|\\Wp3|\\Wpo\\W|\\Wt1t|aho13|an1l1ngu|ana1|anus|ar3o1a|ar3o13|ary1an|ashat|asho13|asmast3r|asmunch|asw1p3|b1atch|b1gt1t|b1mbo|b1ow|b1tch|ba1ls|bab3|bang|barf|bastard|bawdy|b3an3r|b3ard3dc1am|b3ast1al1ty|b3atch|b3at3r|b3av3r|b3otch|b3yotch|bo1nk|bod1ly|bon3d|bon3r|bon3|bob|bot13|boty|bow31|br3ast|bug3r|bukak3|bung|busty|but|c1t|caca|cahon3|cam31to3|carp3tmunch3r|cawk|c3rv1x|ch1nc|ch1nk|chod3|co1tal|cockb1ock|cockho1st3r|cocknock3r|cocksmok3r|cocksuck3r|cock|condom|con|corksuck3r|crabs|cums1ut|cumshot|cumsta1n|cun1l1ngus|cuntfac3|cunthunt3r|cunt|d1ck|d1k3|d1ldo|d1mw1t|d1ngl3|d1psh1p|dago|dam1t|damn1t|damn3d|damn|dawg13styl3|dog13styl3|dogysty13|dong|dop3y|douch3|drunk|dumas|dumbas|dumy|dyk3|3jacu1at3|3n1arg3m3nt|3r3ct1on|3r3ct|3rot1c|3xtacy|3xtasy|f.ck|f1osy|f1st3d|f1st1ng|f1sty|fa1gt|fa1g|fack|fag1t|fag3d|fagot|fag|fcuk|f31at1o|f31at3|f31ch1ng|f31ch3r|f31ch|f31tch3r|f31tch|foad|fobar|fond13|for3sk1n|fu.k|fudg3pack3r|fuk|g1ans|g1golo|ganja|ghay|gh3y|go1d3nshow3r|gonad|gr1ngo|h1tl3r|handjob|hardon|hokah|hok3r|homo|honky|hor|hotch|hot3r|horny|hump1ng|hump3d|hump|hym3n|j1sm|j1s3d|j1sm|j1s|jackas|jackho13|jackof|j3rk3d|j3rkof|j3rk|junk13|junky|k1an|k1k3|k1nky|knob3nd|kyk3|mams|masa|mast3rba|masturba|max1|m3ns3s|m3nstruat|mfuck1ng|mofo|moron|moth3rf|mthrf|muf|n1gl|n1g|n1mrod|n1ny|n1pl3|nak3d|napa1m|napy|nas1|n3gro|noky|nympho|op1at3|op1um|ora1y|ora1|org13s|organ|orgasm|orgy|ovary|ovum|p1lowb1t3r|p1mp|p1nko|p1s3d|p1sof|p1s|pak1|pant13|panty|past13|pasty|p3ck3r|p3doph1l|p3p3|p3n1al|p3n1l3|p3n1s|p3n3trat1on|p3n3trat3|p3rv3rs1on|p3yot3|pha1c|phuck|po1ack|po1ock|pontang|pon|pop|porno|porn|pr1ck|pr1g|pron|pub1|pub3|punkas|punky|pus1|pusy|puto|qu1cky|qu1ck13|qu1m|qu3af|qu3ro|qu3rs|qu3r|r1mjob|r1tard|racy|rap1st|rap3d|rap3r|rap3|raunch|r31ch|r3cta1|r3ctum|r3ctus|r3tard|r3tar|rtard|rumpram3r|rump|s1av3|s13as|s1ut|sack|sad1s|scag|scant1ly|sch1ong|sch1so|scr3w|scrog|scrot|scrud|scum|s3aman|s3am3n|s3duc3|s3m3n|s3xua1|sh1t|skag|skank|sm3gma|smut|sn1p3r|snatch|sodom|sp1ck|sp1c|sp1k|sp3rm|spunk|st3amy|stfu|ston3d|str1p|strok3|stup1d|suck|sumofab1atch|t1nkl3|t1tfuck|tampon|tard|t3abag1ng|t3at|t3st1|t3st3|t3urd|thrust|tramp|trans|trashy|twat|ug1y|unw3d|ur1n3a|ut3rus|vag1na|vu1gar|vu1va|w1g3r|wang|wank3r|wank|w31n3r|w31rdo|w3dg13|w3n13|w3tback|w3w3|wh1t3y|wh1s|whor3|womb).*"); - + Pattern profanityPattern = Pattern.compile(".*(1ab1a|1d1ot|13ch|13p3r|13sb1ans|13sbo|13s13|13sb1an|13sbo|13sy|1nbr3d|1nc3st|1njun|1ub3|\\Wbj|\\Wcum|\\Wdum|\\Wfag|\\Wfap|\\W[sf]uk|\\Wj1s|\\Wp3do|\\Wp33|\\Wpoo\\W|\\Wt1t|aho13|an1ngu|ana1|anus|ar3o1a|ar3o13|ary1an|axyx|axyxhat|axyxho13|axyxmast3r|axyxmunch|axyxw1p3|b1atch|b1gt1t|b1mbo|b1ow|b1tch|ba1s|bab3|bang|barf|bastard|bawdy|b3an3r|b3ard3dc1am|b3ast1a1ty|b3atch|b3at3r|b3av3r|b3otch|b3yotch|bo1nk|bod1y|bon3d|bon3r|bon3|bob|bot13|boty|bow31|br3ast|bug3r|bukak3|bung|busty|butt|c1t|caca|cahon3|cam31to3|carp3tmunch3r|cawk|c3rv1x|ch1nc|ch1nk|chod3|co1ta1|cockb1ock|cockho1st3r|cocknock3r|cocksmok3r|cocksuck3r|cock|condom|con|corksuck3r|crabs|cums1ut|cumshot|cumsta1n|cnt|cun1ngus|cuntfac3|cunthunt3r|cunt|d1ck|d1k3|d1do|d1mw1t|d1ng13|d1psh1p|dago|dam1t|damn1t|damn3d|damn|dawg13sty13|dog13sty13|dogysty13|dong|dop3y|douch3|drunk|dumb|dumas|dum|dumbas|dumy|dyk3|3jacu1at3|3n1arg3m3nt|3r3ct1on|3r3ct|3rot1c|3xtacy|3xtasy|[sf].ck|f1osy|f1st3d|f1st1ng|f1sty|fa1gt|fa1g|fack|fag1t|fag3d|fagot|fag|[sf]cuk|f31at1o|f31at3|f31ch1ng|f31ch3r|f31ch|f31tch3r|f31tch|foad|fobar|fond13|for3sk1n|fu.k|fudg3pack3r|[sf]uk|g1ans|g1go1o|ganja|ghay|gh3y|go1d3nshow3r|gonad|gok|gr1ngo|h1t13r|handjob|hardon|hokah|hok3r|homo|honky|hor|hotch|hot3r|horny|hump1ng|hump3d|hump|hym3n|j1sm|j1s3d|j1sm|j1s|jackas|jackho13|jackof|j3rk3d|j3rkof|j3rk|junk13|junky|k1an|k1k3|k1nky|knob3nd|kyk3|mams|masa|mast3rba|masturba|max1|m3ns3s|m3nstruat|m[sf]uck1ng|mofo|moron|moth3rf|mthrf|muf|n1g1|n1g|n1mrod|n1ny|n1p13|nak3d|napa1m|napy|nas1|n3gro|noky|nympho|op1at3|op1um|ora1y|ora1|org13s|organ|orgasm|orgy|ovary|ovum|p1owb1t3r|p1mp|p1nko|p1s3d|p1sof|p1s|pak1|pant13|panty|past13|pasty|p3ck3r|p3doph1|p3p3|p3n1a1|p3n13|p3n1s|p3n3trat1on|p3n3trat3|p3rv3rs1on|p3yot3|pha1c|phuck|po1ack|po1ock|pontang|pon|pop|porno|porn|pr1ck|pr1g|pron|pub1|pub3|punkas|punky|pus1|pusy|puto|qu1cky|qu1ck13|qu1m|qu3af|qu3ro|qu3rs|qu3r|r1mjob|r1tard|racy|rap1st|rap3d|rap3r|rap3|raunch|r31ch|r3cta1|r3ctum|r3ctus|r3tard|r3tar|rtard|rumpram3r|rump|s1av3|s13as|s1ut|sack|sad1s|scag|sch1ong|sch1so|scr3w|scrog|scrot|scrud|scum|s3aman|s3am3n|s3duc3|s3m3n|s3xua1|sh1t|skag|skank|sm3gma|smut|sn1p3r|snatch|sodom|sp1ck|sp1c|sp1k|sp3rm|spunk|st3amy|stfu|ston3d|str1p|strok3|stup1d|suck|sumofab1atch|t1nk13|t1t[sf]uck|tampon|tard|t3abag1ng|t3at|t3st1|t3st3|t3urd|thrust|tramp|trans|trashy|twat|ug1y|unw3d|ur1n3a|ut3rus|vag1na|vu1gar|vu1va|w1g3r|wang|wank3r|wank|w31n3r|w31rdo|w3dg13|w3n13|w3tback|w3w3|wh1t3y|wh1s|whor3|womb).*"); + Pattern profanity2Pattern = Pattern.compile(".*(1ab1a|1d1ot|13ch|13p3r|13sb1ans|13sbo|13s13|13sb1an|13sbo|13sy|1nbr3d|1nc3st|1njun|1ub3|\\Wbj|\\Wcum|\\Wdum|\\Wfag|\\Wfap|\\W[sf]uk|\\Wj1s|\\Wp3do|\\Wp3|\\Wpo\\W|\\Wt1t|aho13|an1ngu|ana1|anus|ar3o1a|ar3o13|ary1an|axyx|axyxhat|axyxho13|axyxmast3r|axyxmunch|axyxw1p3|b1atch|b1gt1t|b1mbo|b1ow|b1tch|ba1s|bab3|bang|barf|bastard|bawdy|b3an3r|b3ard3dc1am|b3ast1a1ty|b3atch|b3at3r|b3av3r|b3otch|b3yotch|bo1nk|bod1y|bon3d|bon3r|bon3|bob|bot13|boty|bow31|br3ast|bug3r|bukak3|bung|busty|but|c1t|caca|cahon3|cam31to3|carp3tmunch3r|cawk|c3rv1x|ch1nc|ch1nk|chod3|co1ta1|cockb1ock|cockho1st3r|cocknock3r|cocksmok3r|cocksuck3r|cock|condom|con|corksuck3r|crabs|cums1ut|cumshot|cumsta1n|cnt|cun1ngus|cuntfac3|cunthunt3r|cunt|d1ck|d1k3|d1do|d1mw1t|d1ng13|d1psh1p|dago|dam1t|damn1t|damn3d|damn|dawg13sty13|dog13sty13|dogysty13|dong|dop3y|douch3|drunk|dumb|dum|dumas|dumbas|dumy|dyk3|3jacu1at3|3n1arg3m3nt|3r3ct1on|3r3ct|3rot1c|3xtacy|3xtasy|[sf].ck|f1osy|f1st3d|f1st1ng|f1sty|fa1gt|fa1g|fack|fag1t|fag3d|fagot|fag|[sf]cuk|f31at1o|f31at3|f31ch1ng|f31ch3r|f31ch|f31tch3r|f31tch|foad|fobar|fond13|for3sk1n|fu.k|fudg3pack3r|[sf]uk|g1ans|g1go1o|ganja|ghay|gh3y|go1d3nshow3r|gonad|gr1ngo|h1t13r|handjob|hardon|hokah|hok3r|homo|honky|hor|hotch|hot3r|horny|hump1ng|hump3d|hump|hym3n|j1sm|j1s3d|j1sm|j1s|jackas|jackho13|jackof|j3rk3d|j3rkof|j3rk|junk13|junky|k1an|k1k3|k1nky|knob3nd|kyk3|mams|masa|mast3rba|masturba|max1|m3ns3s|m3nstruat|m[sf]uck1ng|mofo|moron|moth3rf|mthrf|muf|n1g1|n1g|n1mrod|n1ny|n1p13|nak3d|napa1m|napy|nas1|n3gro|noky|nympho|op1at3|op1um|ora1y|ora1|org13s|organ|orgasm|orgy|ovary|ovum|p1owb1t3r|p1mp|p1nko|p1s3d|p1sof|p1s|pak1|pant13|panty|past13|pasty|p3ck3r|p3doph1|p3p3|p3n1a1|p3n13|p3n1s|p3n3trat1on|p3n3trat3|p3rv3rs1on|p3yot3|pha1c|phuck|po1ack|po1ock|pontang|pon|pop|porno|porn|pr1ck|pr1g|pron|pub1|pub3|punkas|punky|pus1|pusy|puto|qu1cky|qu1ck13|qu1m|qu3af|qu3ro|qu3rs|qu3r|r1mjob|r1tard|racy|rap1st|rap3d|rap3r|rap3|raunch|r31ch|r3cta1|r3ctum|r3ctus|r3tard|r3tar|rtard|rumpram3r|rump|s1av3|s13as|s1ut|sack|sad1s|scag|sch1ong|sch1so|scr3w|scrog|scrot|scrud|scum|s3aman|s3am3n|s3duc3|s3m3n|s3xua1|sh1t|skag|skank|sm3gma|smut|sn1p3r|snatch|sodom|sp1ck|sp1c|sp1k|sp3rm|spunk|st3amy|stfu|ston3d|str1p|strok3|stup1d|suck|sumofab1atch|t1nk13|t1t[sf]uck|tampon|tard|t3abag1ng|t3at|t3st1|t3st3|t3urd|thrust|tramp|trans|trashy|twat|ug1y|unw3d|ur1n3a|ut3rus|vag1na|vu1gar|vu1va|w1g3r|wang|wank3r|wank|w31n3r|w31rdo|w3dg13|w3n13|w3tback|w3w3|wh1t3y|wh1s|whor3|womb).*"); + private boolean containsSwearing(String message, String level) { - String orig = message; - message = message.replaceAll("\\W", "."); + + if (level.equals("0")) { + return false; + } message = "." + message + "."; message = message.toLowerCase(); - message = message.replaceAll("(.)(\\1{2,})", "$1"); + message = message.replaceAll("[a@]([s5]+)", "axyx"); + message = message.replaceAll("(.)(\\1{1,})", "$1"); message = message.replaceAll("[@]", "a"); message = message.replaceAll("[il]", "1"); message = message.replaceAll("[e]", "3"); message = message.replaceAll("[0]", "o"); message = message.replaceAll("[5z]", "s"); + message = message.replaceAll("\\W", "."); + message = message.replaceAll("(.)(\\1{1,})", "$1"); + message = message.replaceAll("\\.", ""); Matcher matchPattern = profanityPattern.matcher(message); if (matchPattern.find()) { - System.out.println("message: Matched profanity:" + message); return true; } if (level.equals("2")) { message = message.replaceAll("\\.", ""); + message = "." + message + "."; matchPattern = profanity2Pattern.matcher(message); if (matchPattern.find()) { - System.out.println("message: Matched profanity (level2):" + message); return true; } } diff --git a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java index a5b8bcd5571..c2bd89eb958 100644 --- a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java +++ b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java @@ -421,7 +421,8 @@ public class CallbackClientImpl implements CallbackClient { case TABLES: usedPanel.receiveMessage("", new StringBuilder("Download card images by using the \"Images\" menu to the top right .") .append("
Download icons and symbols by using the \"Symbols\" menu to the top right.") - .append("
\\list - Show a list of available chat commands.").toString(), + .append("
\\list - Show a list of available chat commands.") + .append("
Type \\w yourUserName profanity 0 (or 1 or 2) to turn off/on the profanity filter").toString(), null, MessageType.USER_INFO, ChatMessage.MessageColor.BLUE); break; diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java index 8c6903ff35a..cb08e771824 100644 --- a/Mage.Server/src/main/java/mage/server/ChatManager.java +++ b/Mage.Server/src/main/java/mage/server/ChatManager.java @@ -195,6 +195,7 @@ public class ChatManager { String command = message.substring(1).trim().toUpperCase(Locale.ENGLISH); if (doError) { message += new StringBuilder("
Invalid User Command '" + message + "'.").append(COMMANDS_LIST).toString(); + message += "
Type \\w " + user.getName() + " profanity 0 (or 1 or 2) to use/not use the profanity filter"; chatSessions.get(chatId).broadcastInfoToUser(user, message); return true; } @@ -230,6 +231,7 @@ public class ChatManager { } if (command.equals("L") || command.equals("LIST")) { message += COMMANDS_LIST; + message += "
Type \\w " + user.getName() + " profanity 0 (or 1 or 2) to use/not use the profanity filter"; chatSessions.get(chatId).broadcastInfoToUser(user, message); return true; }