diff options
| -rwxr-xr-x[-rw-r--r--] | gradlew | 0 | ||||
| -rw-r--r-- | src/main/kotlin/cc/woverflow/chatting/Chatting.kt | 2 | ||||
| -rw-r--r-- | src/main/kotlin/cc/woverflow/chatting/chat/ChatSpamBlock.kt | 124 | ||||
| -rw-r--r-- | src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt | 26 | ||||
| -rw-r--r-- | src/main/resources/spamInfo.json | 6146 |
5 files changed, 6298 insertions, 0 deletions
diff --git a/src/main/kotlin/cc/woverflow/chatting/Chatting.kt b/src/main/kotlin/cc/woverflow/chatting/Chatting.kt index 0fe85f9..5718f14 100644 --- a/src/main/kotlin/cc/woverflow/chatting/Chatting.kt +++ b/src/main/kotlin/cc/woverflow/chatting/Chatting.kt @@ -2,6 +2,7 @@ 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 @@ -80,6 +81,7 @@ 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 new file mode 100644 index 0000000..224e614 --- /dev/null +++ b/src/main/kotlin/cc/woverflow/chatting/chat/ChatSpamBlock.kt @@ -0,0 +1,124 @@ +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<String> { + 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<String>): Double { + val tokenProbs = mutableMapOf<String, Double>() + 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 e80fa94..d1a6ae9 100644 --- a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt +++ b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt @@ -79,6 +79,32 @@ 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, name = "Show Timestamp", description = "Show message timestamp on hover.", diff --git a/src/main/resources/spamInfo.json b/src/main/resources/spamInfo.json new file mode 100644 index 0000000..8f5d44d --- /dev/null +++ b/src/main/resources/spamInfo.json @@ -0,0 +1,6146 @@ +{ + "0": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "1": { + "fine": 5.668, + "spam": 14.23 + }, + "2": { + "fine": 9.668, + "spam": 3.23 + }, + "3": { + "fine": 4.668, + "spam": 9.23 + }, + "4": { + "fine": 0.668, + "spam": 7.23 + }, + "5": { + "fine": 3.668, + "spam": 14.23 + }, + "6": { + "fine": 3.668, + "spam": 2.23 + }, + "7": { + "fine": 4.668, + "spam": 5.23 + }, + "8": { + "fine": 0.668, + "spam": 1.23 + }, + "9": { + "fine": 2.668, + "spam": 1.23 + }, + "10": { + "fine": 1.6680000000000001, + "spam": 2.23 + }, + "11": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "12": { + "fine": 0.668, + "spam": 2.23 + }, + "15": { + "fine": 0.668, + "spam": 2.23 + }, + "16": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "18": { + "fine": 0.668, + "spam": 1.23 + }, + "20": { + "fine": 3.668, + "spam": 0.23 + }, + "25": { + "fine": 0.668, + "spam": 1.23 + }, + "29": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "30": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "32": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "36": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "50": { + "fine": 0.668, + "spam": 1.23 + }, + "85": { + "fine": 0.668, + "spam": 1.23 + }, + "92": { + "fine": 0.668, + "spam": 1.23 + }, + "99": { + "fine": 0.668, + "spam": 1.23 + }, + "100": { + "fine": 2.668, + "spam": 1.23 + }, + "108": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "123": { + "fine": 0.668, + "spam": 1.23 + }, + "280": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "345": { + "fine": 0.668, + "spam": 1.23 + }, + "350": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "374": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "500": { + "fine": 0.668, + "spam": 3.23 + }, + "553": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "4078": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "8945": { + "fine": 0.668, + "spam": 1.23 + }, + "34598": { + "fine": 0.668, + "spam": 1.23 + }, + "172000": { + "fine": 0.668, + "spam": 1.23 + }, + "1999999": { + "fine": 0.668, + "spam": 1.23 + }, + "84758934": { + "fine": 0.668, + "spam": 1.23 + }, + "then": { + "fine": 3.668, + "spam": 1.23 + }, + "report": { + "fine": 2.668, + "spam": 0.23 + }, + "in": { + "fine": 19.668, + "spam": 16.23 + }, + "the": { + "fine": 49.668, + "spam": 9.23 + }, + "skyblockz": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "discord": { + "fine": 1.6680000000000001, + "spam": 2.23 + }, + "MEDIUM_LENGTH": { + "fine": 137.668, + "spam": 66.23 + }, + "LOW_SPECIAL_CHARS": { + "fine": 531.668, + "spam": 57.230000000000004 + }, + "LOW_CAPS": { + "fine": 645.668, + "spam": 175.23000000000002 + }, + "money": { + "fine": 7.668, + "spam": 9.23 + }, + "at": { + "fine": 10.668, + "spam": 19.23 + }, + "least": { + "fine": 0.668, + "spam": 1.23 + }, + "50m": { + "fine": 0.668, + "spam": 3.23 + }, + "SMALL_LENGTH": { + "fine": 153.668, + "spam": 18.23 + }, + "SPECIAL_CHAR": { + "fine": 116.668, + "spam": 77.23 + }, + "im": { + "fine": 16.668, + "spam": 6.23 + }, + "on": { + "fine": 11.668, + "spam": 46.230000000000004 + }, + "ironman": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "just": { + "fine": 18.668, + "spam": 6.23 + }, + "check": { + "fine": 3.668, + "spam": 1.23 + }, + "ah": { + "fine": 5.668, + "spam": 45.230000000000004 + }, + "": { + "fine": 10.668, + "spam": 0.23 + }, + "TINY_LENGTH": { + "fine": 301.668, + "spam": 1.23 + }, + "no": { + "fine": 16.668, + "spam": 11.23 + }, + "comprende": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "let": { + "fine": 4.668, + "spam": 0.23 + }, + "me": { + "fine": 19.668, + "spam": 64.23 + }, + "recipe": { + "fine": 2.668, + "spam": 0.23 + }, + "anyone": { + "fine": 9.668, + "spam": 12.23 + }, + "selling": { + "fine": 2.668, + "spam": 41.230000000000004 + }, + "a": { + "fine": 35.668, + "spam": 28.23 + }, + "god": { + "fine": 2.668, + "spam": 1.23 + }, + "pot": { + "fine": 0.668, + "spam": 1.23 + }, + "sorry": { + "fine": 3.668, + "spam": 0.23 + }, + "bro": { + "fine": 4.668, + "spam": 0.23 + }, + "nonist": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "i": { + "fine": 76.668, + "spam": 25.23 + }, + "added": { + "fine": 2.668, + "spam": 0.23 + }, + "some": { + "fine": 6.668, + "spam": 3.23 + }, + "more": { + "fine": 7.668, + "spam": 1.23 + }, + "debug": { + "fine": 2.668, + "spam": 0.23 + }, + "get": { + "fine": 17.668, + "spam": 15.23 + }, + "new": { + "fine": 5.668, + "spam": 2.23 + }, + "pick": { + "fine": 3.668, + "spam": 0.23 + }, + "how": { + "fine": 16.668, + "spam": 2.23 + }, + "much": { + "fine": 8.668, + "spam": 1.23 + }, + "aight": { + "fine": 2.668, + "spam": 0.23 + }, + "neu": { + "fine": 2.668, + "spam": 0.23 + }, + "has": { + "fine": 4.668, + "spam": 1.23 + }, + "tons": { + "fine": 1.6680000000000001, + "spam": 2.23 + }, + "of": { + "fine": 18.668, + "spam": 16.23 + }, + "qol": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "features": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "and": { + "fine": 22.668, + "spam": 21.23 + }, + "my": { + "fine": 20.668, + "spam": 55.230000000000004 + }, + "raider": { + "fine": 2.668, + "spam": 0.23 + }, + "axe": { + "fine": 3.668, + "spam": 1.23 + }, + "k": { + "fine": 4.668, + "spam": 1.23 + }, + "when": { + "fine": 3.668, + "spam": 0.23 + }, + "tried": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "to": { + "fine": 40.668, + "spam": 22.23 + }, + "apply": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "it": { + "fine": 33.668, + "spam": 7.23 + }, + "HIGH_CAPS": { + "fine": 23.668, + "spam": 55.230000000000004 + }, + "minon": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "underpriced": { + "fine": 0.668, + "spam": 1.23 + }, + "lowest": { + "fine": 0.668, + "spam": 1.23 + }, + "bin": { + "fine": 0.668, + "spam": 3.23 + }, + "gemstone": { + "fine": 0.668, + "spam": 1.23 + }, + "container": { + "fine": 0.668, + "spam": 1.23 + }, + "/": { + "fine": 2.668, + "spam": 6.23 + }, + "1guana": { + "fine": 0.668, + "spam": 1.23 + }, + "easy": { + "fine": 0.668, + "spam": 3.23 + }, + "flip": { + "fine": 3.668, + "spam": 10.23 + }, + "LONG_LENGTH": { + "fine": 77.668, + "spam": 145.23000000000002 + }, + "SPECIAL_CHARS": { + "fine": 21.668, + "spam": 96.23 + }, + "cheap": { + "fine": 0.668, + "spam": 11.23 + }, + "bal": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "pet": { + "fine": 2.668, + "spam": 1.23 + }, + "its": { + "fine": 11.668, + "spam": 1.23 + }, + "high": { + "fine": 1.6680000000000001, + "spam": 3.23 + }, + "level": { + "fine": 0.668, + "spam": 5.23 + }, + "too": { + "fine": 6.668, + "spam": 1.23 + }, + "do": { + "fine": 23.668, + "spam": 5.23 + }, + "you": { + "fine": 47.668, + "spam": 14.23 + }, + "support": { + "fine": 0.668, + "spam": 2.23 + }, + "lgtbq": { + "fine": 0.668, + "spam": 1.23 + }, + "vote": { + "fine": 0.668, + "spam": 5.23 + }, + "_____________": { + "fine": 0.668, + "spam": 1.23 + }, + "freshest": { + "fine": 0.668, + "spam": 1.23 + }, + "cuts": { + "fine": 0.668, + "spam": 1.23 + }, + "island": { + "fine": 3.668, + "spam": 8.23 + }, + "/visit": { + "fine": 2.668, + "spam": 27.23 + }, + "benedeqn": { + "fine": 0.668, + "spam": 1.23 + }, + "buying": { + "fine": 1.6680000000000001, + "spam": 21.23 + }, + "sorrow": { + "fine": 0.668, + "spam": 1.23 + }, + "leggings": { + "fine": 0.668, + "spam": 3.23 + }, + "for": { + "fine": 22.668, + "spam": 48.230000000000004 + }, + "m": { + "fine": 6.668, + "spam": 3.23 + }, + "/p": { + "fine": 0.668, + "spam": 32.230000000000004 + }, + "smithmonger": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "nobody": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "ive": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "been": { + "fine": 2.668, + "spam": 0.23 + }, + "looking": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "exotic": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "squid": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "leather": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "books": { + "fine": 2.668, + "spam": 2.23 + }, + "not": { + "fine": 13.668, + "spam": 2.23 + }, + "lol": { + "fine": 19.668, + "spam": 1.23 + }, + "needs": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "cookie": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "oh": { + "fine": 9.668, + "spam": 0.23 + }, + "that": { + "fine": 17.668, + "spam": 4.23 + }, + "wynncraf": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "havent": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "done": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "dungeons": { + "fine": 2.668, + "spam": 2.23 + }, + "hello": { + "fine": 3.668, + "spam": 0.23 + }, + "fellow": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "santa": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "join": { + "fine": 2.668, + "spam": 4.23 + }, + "fro6": { + "fine": 0.668, + "spam": 1.23 + }, + "kat": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "lost": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "adventurer": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "does": { + "fine": 5.668, + "spam": 1.23 + }, + "make": { + "fine": 8.668, + "spam": 1.23 + }, + "people": { + "fine": 3.668, + "spam": 2.23 + }, + "notice": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "tho": { + "fine": 4.668, + "spam": 0.23 + }, + "hey": { + "fine": 3.668, + "spam": 0.23 + }, + "up": { + "fine": 3.668, + "spam": 0.23 + }, + "what": { + "fine": 22.668, + "spam": 2.23 + }, + "u": { + "fine": 21.668, + "spam": 5.23 + }, + "recommend": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "help": { + "fine": 3.668, + "spam": 2.23 + }, + "but": { + "fine": 10.668, + "spam": 1.23 + }, + "they": { + "fine": 3.668, + "spam": 0.23 + }, + "only": { + "fine": 5.668, + "spam": 6.23 + }, + "have": { + "fine": 26.668, + "spam": 8.23 + }, + "5k": { + "fine": 2.668, + "spam": 0.23 + }, + "durability": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "mine": { + "fine": 6.668, + "spam": 0.23 + }, + "prisma": { + "fine": 0.668, + "spam": 1.23 + }, + "pumps": { + "fine": 0.668, + "spam": 1.23 + }, + "/party": { + "fine": 0.668, + "spam": 2.23 + }, + "lowballing": { + "fine": 0.668, + "spam": 17.23 + }, + "160m": { + "fine": 0.668, + "spam": 1.23 + }, + "purse": { + "fine": 0.668, + "spam": 11.23 + }, + "can": { + "fine": 25.668, + "spam": 16.23 + }, + "30k": { + "fine": 0.668, + "spam": 1.23 + }, + "free": { + "fine": 4.668, + "spam": 5.23 + }, + "any": { + "fine": 4.668, + "spam": 4.23 + }, + "cobble": { + "fine": 2.668, + "spam": 0.23 + }, + "y": { + "fine": 2.668, + "spam": 0.23 + }, + "l": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "ol": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "sometimes": { + "fine": 2.668, + "spam": 0.23 + }, + "arguing": { + "fine": 3.668, + "spam": 0.23 + }, + "is": { + "fine": 34.668, + "spam": 5.23 + }, + "fun": { + "fine": 3.668, + "spam": 0.23 + }, + "wuts": { + "fine": 2.668, + "spam": 0.23 + }, + "dat": { + "fine": 2.668, + "spam": 0.23 + }, + "wait": { + "fine": 13.668, + "spam": 0.23 + }, + "starlight": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "this": { + "fine": 12.668, + "spam": 4.23 + }, + "ok": { + "fine": 10.668, + "spam": 0.23 + }, + "think": { + "fine": 3.668, + "spam": 0.23 + }, + "reason": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "bz": { + "fine": 2.668, + "spam": 0.23 + }, + "down": { + "fine": 2.668, + "spam": 0.23 + }, + "because": { + "fine": 2.668, + "spam": 0.23 + }, + "some1": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "did": { + "fine": 2.668, + "spam": 0.23 + }, + "huge": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "buy": { + "fine": 4.668, + "spam": 27.23 + }, + "order": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "broke": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "inst": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "biding": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "boi": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "getting": { + "fine": 3.668, + "spam": 0.23 + }, + "gold": { + "fine": 3.668, + "spam": 1.23 + }, + "griffin": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "upgrades": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "even": { + "fine": 3.668, + "spam": 0.23 + }, + "happened": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "be": { + "fine": 7.668, + "spam": 1.23 + }, + "sweatin": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "sugar": { + "fine": 1.6680000000000001, + "spam": 3.23 + }, + "rush": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "book": { + "fine": 2.668, + "spam": 0.23 + }, + "like": { + "fine": 12.668, + "spam": 2.23 + }, + "furfsky": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "reborn": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "active": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "texture": { + "fine": 2.668, + "spam": 0.23 + }, + "packs": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "alr": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "dilliondbomb": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "wc": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "ur": { + "fine": 7.668, + "spam": 4.23 + }, + "items": { + "fine": 1.6680000000000001, + "spam": 14.23 + }, + "100m": { + "fine": 0.668, + "spam": 5.23 + }, + "hoe/no": { + "fine": 0.668, + "spam": 1.23 + }, + "minions": { + "fine": 6.668, + "spam": 19.23 + }, + "tamasso": { + "fine": 0.668, + "spam": 1.23 + }, + "cheapest": { + "fine": 0.668, + "spam": 4.23 + }, + "barriers": { + "fine": 0.668, + "spam": 1.23 + }, + "tier": { + "fine": 1.6680000000000001, + "spam": 5.23 + }, + "xi": { + "fine": 0.668, + "spam": 2.23 + }, + "snow": { + "fine": 3.668, + "spam": 11.23 + }, + "minion": { + "fine": 2.668, + "spam": 11.23 + }, + "elartord": { + "fine": 0.668, + "spam": 1.23 + }, + "000": { + "fine": 0.668, + "spam": 4.23 + }, + "left": { + "fine": 3.668, + "spam": 3.23 + }, + "entry": { + "fine": 0.668, + "spam": 1.23 + }, + "giveaway": { + "fine": 0.668, + "spam": 1.23 + }, + "bl4ck": { + "fine": 0.668, + "spam": 1.23 + }, + "fr1day": { + "fine": 0.668, + "spam": 1.23 + }, + "fre3": { + "fine": 0.668, + "spam": 4.23 + }, + "c0ins": { + "fine": 0.668, + "spam": 2.23 + }, + "coinempires": { + "fine": 0.668, + "spam": 4.23 + }, + "com": { + "fine": 1.6680000000000001, + "spam": 18.23 + }, + "else": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "use": { + "fine": 4.668, + "spam": 1.23 + }, + "eyes": { + "fine": 2.668, + "spam": 1.23 + }, + "got": { + "fine": 7.668, + "spam": 2.23 + }, + "them": { + "fine": 6.668, + "spam": 0.23 + }, + "so": { + "fine": 14.668, + "spam": 4.23 + }, + "could": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "sword": { + "fine": 4.668, + "spam": 5.23 + }, + "9y": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "noice": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "plus": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "actually": { + "fine": 3.668, + "spam": 0.23 + }, + "productive": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "apparently": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "frags": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "protector": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "all": { + "fine": 9.668, + "spam": 4.23 + }, + "bought": { + "fine": 2.668, + "spam": 1.23 + }, + "costs": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "500m": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "insta": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "f6": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "comp": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "chat": { + "fine": 3.668, + "spam": 0.23 + }, + "p": { + "fine": 1.6680000000000001, + "spam": 9.23 + }, + "go": { + "fine": 7.668, + "spam": 11.23 + }, + "trade": { + "fine": 4.668, + "spam": 0.23 + }, + "one": { + "fine": 11.668, + "spam": 4.23 + }, + "qwe": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "duelin": { + "fine": 1.6680000000000001, + "spam": 0.23 + }, + "rn": { + "fine": 7.668, + "spam": 1.23 + }, + "wtf": { + "fine": 3.668, + "spam": 1.23 + }, + "thanks": { + "fine": 3.668, + "spam": 0.23 + }, + "helping": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "everyone": { + "fine": 3.668, + "spam": 0.23 + }, + "are": { + "fine": 19.668, + "spam": 2.23 + }, + "sacks": { + "fine": 2.668, + "spam": 0.23 + }, + "around": { + "fine": 1.6680000000000001, + "spam": 1.23 + }, + "60k": { + "fine": 2.668, + "spam": 0.23 + |
