From 4d22b1ea55bb5f95b18ea68a4ef04fb53a6a2de3 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Wed, 18 Sep 2024 13:06:23 +0800 Subject: [PATCH] feat: add bad word filter --- gradle/libs.versions.toml | 2 +- src/main/kotlin/cn/rtast/fancybot/Const.kt | 3 ++- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 6 ++++++ .../commands/parse/BadWordFilterCommand.kt | 18 ++++++++++++++++++ .../kotlin/cn/rtast/fancybot/entity/Config.kt | 3 ++- .../rtast/fancybot/util/file/BadWordManager.kt | 17 +++++++++++++++++ .../rtast/fancybot/util/file/ConfigManager.kt | 1 + src/main/resources/config.json | 3 ++- 8 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/parse/BadWordFilterCommand.kt create mode 100644 src/main/kotlin/cn/rtast/fancybot/util/file/BadWordManager.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5c30418..3accfb1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinVersion = "2.0.10" -ronebotVersion = "1.7.0" +ronebotVersion = "1.7.2" shadowVersion = "8.3.0" okhttpVersion = "5.0.0-alpha.14" exposedVersion = "0.53.0" diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index f15ce3a..7a7b20a 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -37,5 +37,6 @@ val DEFAULT_CONFIG = Config( smtpUser = "114514", smtpPassword = "1919810", smtpFromAddress = "fancybot@repo.rtast.cn", - admins = listOf(3458671395L) + admins = listOf(3458671395L), + enableAntiRevoke = true ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 5427da4..5ab582a 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -24,6 +24,7 @@ import cn.rtast.fancybot.commands.parse.BVParseCommand import cn.rtast.fancybot.commands.parse.GitHubParseCommand import cn.rtast.fancybot.commands.parse.ImageURLCommand import cn.rtast.fancybot.commands.parse.ReverseGIFCommand +import cn.rtast.fancybot.commands.parse.filterBadWord import cn.rtast.fancybot.commands.record.JiJianCommand import cn.rtast.fancybot.commands.record.JrrpCommand import cn.rtast.fancybot.commands.record.MyNiuziCommand @@ -36,6 +37,7 @@ import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.items.BaisiItem import cn.rtast.fancybot.items.HeisiItem import cn.rtast.fancybot.items.SetuItem +import cn.rtast.fancybot.util.file.BadWordManager import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.file.NiuziManager import cn.rtast.fancybot.util.file.SignManager @@ -59,6 +61,8 @@ class FancyBot : OBMessage { val groupId = message.groupId println("$sender($senderId: $groupId): $msg") + filterBadWord(message) + if (message.rawMessage.startsWith("https://github.com/") || message.rawMessage.startsWith("git@github.com:")) { GitHubParseCommand.parse(this, message) } @@ -105,6 +109,7 @@ class FancyBot : OBMessage { } override suspend fun onGroupMessageRevoke(message: GroupRevokeMessage) { + if (!configManager.enableAntiRevoke) return val msg = MessageChain.Builder() .addText("用户: ${message.userId} 被: ${message.operatorId} 撤回了一条消息") .addNewLine() @@ -131,6 +136,7 @@ val configManager = ConfigManager() val itemManager = ItemManager() val signManager = SignManager() val niuziManager = NiuziManager() +val badWordManager = BadWordManager() val items = listOf( HeisiItem(), diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/BadWordFilterCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/BadWordFilterCommand.kt new file mode 100644 index 0000000..237e77f --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/BadWordFilterCommand.kt @@ -0,0 +1,18 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/18 + */ + + +package cn.rtast.fancybot.commands.parse + +import cn.rtast.fancybot.badWordManager +import cn.rtast.rob.entity.GroupMessage + +suspend fun filterBadWord(message: GroupMessage) { + if (badWordManager.contain(message.rawMessage)) { + message.reply("你不许说脏话") + message.revoke() + } +} diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt b/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt index 55899a6..0d7ddaf 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt @@ -27,5 +27,6 @@ data class Config( val smtpUser: String, val smtpPassword: String, val smtpFromAddress: String, - val admins: List + val admins: List, + val enableAntiRevoke: Boolean ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/BadWordManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/BadWordManager.kt new file mode 100644 index 0000000..332775b --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/BadWordManager.kt @@ -0,0 +1,17 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/18 + */ + + +package cn.rtast.fancybot.util.file + +import cn.rtast.fancybot.util.JsonFileHandler + +class BadWordManager: JsonFileHandler>("bd.json", listOf()) { + + fun contain(word: String): Boolean { + return this.read>().any { word.contains(it) } + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt index 6bf4d3c..e2a1d4d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt @@ -28,4 +28,5 @@ class ConfigManager : JsonFileHandler("config.json") { val smtpPassword get() = this.read().smtpPassword val smtpFromAddress get() = this.read().smtpFromAddress val admins get() = this.read().admins + val enableAntiRevoke get() = this.read().enableAntiRevoke } \ No newline at end of file diff --git a/src/main/resources/config.json b/src/main/resources/config.json index ad6bc5d..ff0e05b 100644 --- a/src/main/resources/config.json +++ b/src/main/resources/config.json @@ -20,5 +20,6 @@ "smtpFromAddress": "fancybot@repo.rtast.cn", "admins": [ 3458671395 - ] + ], + "enableAntiRevoke": true } \ No newline at end of file