From cce479dfe91b432521534e0dde866743931fe2cb Mon Sep 17 00:00:00 2001 From: Wyvest <45589059+Wyvest@users.noreply.github.com> Date: Sun, 15 May 2022 15:48:56 +0700 Subject: revert spam block not very comfortable with pushing this as a non-beta right now, after release this will be unreverted and i will see what i can do with it --- src/main/kotlin/cc/woverflow/chatting/Chatting.kt | 2 - .../cc/woverflow/chatting/chat/ChatSpamBlock.kt | 124 --------------------- .../cc/woverflow/chatting/config/ChattingConfig.kt | 26 ----- 3 files changed, 152 deletions(-) delete mode 100644 src/main/kotlin/cc/woverflow/chatting/chat/ChatSpamBlock.kt (limited to 'src/main/kotlin') diff --git a/src/main/kotlin/cc/woverflow/chatting/Chatting.kt b/src/main/kotlin/cc/woverflow/chatting/Chatting.kt index 5718f14..0fe85f9 100644 --- a/src/main/kotlin/cc/woverflow/chatting/Chatting.kt +++ b/src/main/kotlin/cc/woverflow/chatting/Chatting.kt @@ -2,7 +2,6 @@ package cc.woverflow.chatting import cc.woverflow.chatting.chat.ChatSearchingManager import cc.woverflow.chatting.chat.ChatShortcuts -import cc.woverflow.chatting.chat.ChatSpamBlock import cc.woverflow.chatting.chat.ChatTabs import cc.woverflow.chatting.config.ChattingConfig import cc.woverflow.chatting.hook.GuiNewChatHook @@ -81,7 +80,6 @@ object Chatting { } ClientRegistry.registerKeyBinding(keybind) EVENT_BUS.register(this) - EVENT_BUS.register(ChatSpamBlock) ChatTabs.initialize() ChatShortcuts.initialize() } diff --git a/src/main/kotlin/cc/woverflow/chatting/chat/ChatSpamBlock.kt b/src/main/kotlin/cc/woverflow/chatting/chat/ChatSpamBlock.kt deleted file mode 100644 index 224e614..0000000 --- a/src/main/kotlin/cc/woverflow/chatting/chat/ChatSpamBlock.kt +++ /dev/null @@ -1,124 +0,0 @@ -package cc.woverflow.chatting.chat - -import cc.woverflow.chatting.config.ChattingConfig -import com.google.gson.JsonObject -import com.google.gson.JsonParser -import net.minecraft.util.ChatComponentText -import net.minecraft.util.EnumChatFormatting -import net.minecraftforge.client.event.ClientChatReceivedEvent -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.text.Normalizer - -object ChatSpamBlock { - /* - Made by @KTibow - Based off of Unspam (also by @KTibow) - Algorithm based off of https://paulgraham.com/spam.html - */ - private val PLAYER_MESSAGE = Regex("^(\\[VIP\\+?\\] |\\[MVP\\+?\\+?\\] |)(\\w{2,16}): (.*)$") - - @SubscribeEvent - fun onChat(event: ClientChatReceivedEvent) { - val message = event.message.unformattedText.replace(Regex("\u00A7."), "") - if (!PLAYER_MESSAGE.matches(message)) return - val (rank, player, content) = PLAYER_MESSAGE.matchEntire(message)!!.destructured - val tokens = tokenize(content) - val spamProb = findSpamProbability(tokens) - println("\n[CHATTING]$message") - if (spamProb * 100 > ChattingConfig.spamThreshold) { - if (ChattingConfig.showSpamInGray) { - var newMessage = EnumChatFormatting.DARK_GRAY.toString() + EnumChatFormatting.STRIKETHROUGH.toString() - if (!ChattingConfig.customFormatting) { - newMessage += rank - } - newMessage += "$player${EnumChatFormatting.DARK_GRAY.toString()}: $content" - event.message = ChatComponentText(newMessage) - } else { - event.isCanceled = true - } - return - } - if (ChattingConfig.customFormatting) { - val coloredPlayer = findRankColor(rank) + player + EnumChatFormatting.RESET.toString() - event.message = ChatComponentText("$coloredPlayer: $content") - } - } - - private fun tokenize(message: String): MutableList { - val strippedMessage = - Normalizer.normalize(message, Normalizer.Form.NFKC).replace(Regex("[^\\w\\s/]"), " ").lowercase().trim() - val tokens = strippedMessage.split(Regex("\\s+")).toMutableList() - if (tokens.size <= 2) { - tokens.add("TINY_LENGTH") - } else if (tokens.size <= 4) { - tokens.add("SMALL_LENGTH") - } else if (tokens.size <= 7) { - tokens.add("MEDIUM_LENGTH") - } else { - tokens.add("LONG_LENGTH") - } - if (message.replace(Regex("[\\w\\s]"), "").length > 2) { - tokens.add("SPECIAL_CHARS") - } else if (message.replace(Regex("[\\w\\s]"), "").length > 0) { - tokens.add("SPECIAL_CHAR") - } else { - tokens.add("LOW_SPECIAL_CHARS") - } - if (message.replace(Regex("[^A-Z]"), "").length >= message.length / 4) { - tokens.add("HIGH_CAPS") - } else { - tokens.add("LOW_CAPS") - } - return tokens - } - - private fun findSpamProbability(tokens: MutableList): Double { - val tokenProbs = mutableMapOf() - for (token in tokens) { - if (!spamInfoJson.has(token)) continue - val spamInToken = spamInfoJson.get(token).asJsonObject.get("spam").asDouble - val fineInToken = spamInfoJson.get(token).asJsonObject.get("fine").asDouble - tokenProbs[token] = ( - (spamInToken / messageCountsJson.get("spam").asInt) / - (fineInToken / messageCountsJson.get("fine").asInt + - spamInToken / messageCountsJson.get("spam").asInt) - ) - } - val spamProbs = tokenProbs.values.toMutableList() - val fineProbs = tokenProbs.values.map { - 1 - it - }.toMutableList() - val spamProbability = spamProbs.reduce { a, b -> - a * b - } - val fineProbability = fineProbs.reduce { a, b -> - a * b - } - return spamProbability / (spamProbability + fineProbability) - } - - private fun findRankColor(rank: String): String { - println(rank) - return when (rank) { - "[VIP] ", "[VIP+] " -> EnumChatFormatting.GREEN.toString() - "[MVP] ", "[MVP+] " -> EnumChatFormatting.AQUA.toString() - "[MVP++] " -> EnumChatFormatting.GOLD.toString() - else -> EnumChatFormatting.GRAY.toString() - } - } - - private fun getResourceAsText(path: String): String? = object {}.javaClass.getResource(path)?.readText() - private val spamInfoJson: JsonObject - private val messageCountsJson: JsonObject - - init { - // Load the file spamInfo.json from resources/ - val spamInfo = getResourceAsText("/spamInfo.json") - spamInfoJson = JsonParser().parse(spamInfo).asJsonObject - messageCountsJson = JsonParser().parse(" { \"fine\": 668, \"spam\": 230 }").asJsonObject - } -} - - - - diff --git a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt index bc3aa31..1a936c9 100644 --- a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt +++ b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt @@ -78,32 +78,6 @@ object ChattingConfig : ) var informForAlternatives = true - @Property( - type = PropertyType.SLIDER, - min = 0, - max = 100, - name = "Spam Threshold", - description = "If Chatting detects a player message seems like spam, and the probability is above this threshold, it will hide it. Set to 0 to disable.", - category = "Player Spam Blocker" - ) - var spamThreshold = 95 - - @Property( - type = PropertyType.SWITCH, - name = "Show Spam (with styling)", - description = "Show messages Chatting detects as spam in gray, instead of hiding them.", - category = "Player Spam Blocker" - ) - var showSpamInGray = true - - @Property( - type = PropertyType.SWITCH, - name = "Custom Message Formatting", - description = "Hide ranks, and show messages in public chat from no-ranks as white.", - category = "Player Spam Blocker" - ) - var customFormatting = false - /*/ @Property( type = PropertyType.SWITCH, -- cgit