diff --git a/src/main/kotlin/top/r3944realms/ltdmanager/main.kt b/src/main/kotlin/top/r3944realms/ltdmanager/main.kt index fa20ac2..e655696 100644 --- a/src/main/kotlin/top/r3944realms/ltdmanager/main.kt +++ b/src/main/kotlin/top/r3944realms/ltdmanager/main.kt @@ -88,9 +88,10 @@ fun main() = GlobalManager.runBlockingMain { maxBanMinutes = 15, ) val modGroupHandlerModule = ModGroupHandlerModule( - moduleName = "ModGrouup", + moduleName = "ModGroup", targetGroupId = 339340846, answers = listOf("戏鸢", "一只戏鸢", "折戏鸢", "LostInLinearPast", "lostinlinearpast"), + pollIntervalMillis = 15_000L, ) // 注册模块到全局模块管理器 diff --git a/src/main/kotlin/top/r3944realms/ltdmanager/module/ModGroupHandlerModule.kt b/src/main/kotlin/top/r3944realms/ltdmanager/module/ModGroupHandlerModule.kt index 66e4bb0..b972695 100644 --- a/src/main/kotlin/top/r3944realms/ltdmanager/module/ModGroupHandlerModule.kt +++ b/src/main/kotlin/top/r3944realms/ltdmanager/module/ModGroupHandlerModule.kt @@ -136,10 +136,12 @@ class ModGroupHandlerModule( provider?.getAllRequests()?.forEach { request -> if (!request.checked && request.groupId == targetGroupId) { - LoggerUtil.logger.info("[$name] 处理请求: requestId=${request.requestId}, actor=${request.actor}") - val answerAllow = answers.contains(request.message) - if(answerAllow) { - val info = napCatClient.send(GetStrangerInfoRequest(ID.long(request.requestId))) + LoggerUtil.logger.info("[$name] 处理请求: requestId=${request.requestId},requestQQ =${request.invitorUin}") + val pattern = """答案:(.*)""".toRegex() + val answer = pattern.find(request.message)?.groupValues?.get(1) ?: "" + val answerAllow = answers.contains(answer) + if (answerAllow) { + val info = napCatClient.send(GetStrangerInfoRequest(ID.long(request.invitorUin))) val levelAllow = info.data.qqLevel >= 16 val setRequest = SetGroupAddRequestRequest( levelAllow, @@ -147,32 +149,57 @@ class ModGroupHandlerModule( if(!levelAllow) "QQ等级低于16级" else "" ) napCatClient.send(setRequest) - if (levelAllow) napCatClient.send(SendGroupMsgRequest(listOf(MessageElement.text(formatRejectRecordMessage(request.requestId))), ID.long(targetGroupId))) - LoggerUtil.logger.info("[$name] 已${if (levelAllow) "同意" else "拒绝"}请求${if(!levelAllow) ",等级不够,${info.data.qqLevel}" else "" }: ${request.requestId}") + if (levelAllow) { + napCatClient.send( + SendGroupMsgRequest( + listOf( + MessageElement.at(ID.long(request.invitorUin), request.requesterNick), + MessageElement.text("\n"), + MessageElement.text( + formatRejectRecordMessage(request.invitorUin) + ) + ), ID.long(targetGroupId) + ) + ) + } + LoggerUtil.logger.info("[$name] 已${if (levelAllow) "同意" else "拒绝"} 请求${if(!levelAllow) ",等级不够,${info.data.qqLevel}" else "" }: ${request.requestId}") + if(levelAllow) stateCache?.records?.remove(request.invitorUin) } else { - napCatClient.sendUnit(SetGroupAddRequestRequest(false, request.requestId.toString(), "答案错误,拒绝次数:${getRejectRecord(request.requestId)?.rejectCount}")) - addReject(request.actor, "答案错误:${request.message}") - LoggerUtil.logger.info("[$name] 答案错误:${request.message},已拒绝请求: ${request.requestId}") + val rejectCount = (getRejectRecord(request.invitorUin)?.rejectCount ?: 0) + 1 + napCatClient.sendUnit(SetGroupAddRequestRequest(false, request.requestId.toString(), "答案错误,请输入标准答案,拒绝次数:${rejectCount}")) + addReject(request.invitorUin, answer) + LoggerUtil.logger.info("[$name] 答案错误:${answer},已拒绝请求: ${request.requestId}") } } } } - fun formatRejectRecordMessage(userId: Long): String { + private fun formatRejectRecordMessage(userId: Long): String { val record = getRejectRecord(userId) return if (record != null) { """ - 用户QQ号:${record.userId} - 尝试次数:${record.rejectCount} - 最终评分:${rate(record.rejectCount)} - 尝试答案:【${record.reason.joinToString(",")}】 - """.trimIndent() + 📊 用户审核记录 + ────────────────── + 🔹 用户QQ号:${record.userId} + 🔹 尝试次数:${record.rejectCount} + 🔹 最终评分:${rate(record.rejectCount)} + + 📝 尝试答案: + ${ "\n" + record.reason.joinToString("\n") { " • $it" }} + + ⚠️ 提示:请仔细阅读文档后再在群里提问,否则你会失去你的大脑🧠 + """.trimIndent() } else { """ - 用户QQ号:${userId} - 尝试次数:0 - 最终评分:SSS - """.trimIndent() + 📊 用户审核记录 + ────────────────── + 🔹 用户QQ号:${userId} + 🔹 尝试次数:0 + 🔹 最终评分:SSS ⭐ + + 💡 该用户尚未有审核记录 + ⚠️ 提示:请仔细阅读文档后再在群里提问,否则你会失去你的大脑🧠 + """.trimIndent() } } private fun rate(count: Int): String = when (count) { diff --git a/src/main/kotlin/top/r3944realms/ltdmanager/module/ModuleManager.kt b/src/main/kotlin/top/r3944realms/ltdmanager/module/ModuleManager.kt index 925e891..79a3e8b 100644 --- a/src/main/kotlin/top/r3944realms/ltdmanager/module/ModuleManager.kt +++ b/src/main/kotlin/top/r3944realms/ltdmanager/module/ModuleManager.kt @@ -20,6 +20,14 @@ class ModuleManager { modules[module.name] = module LoggerUtil.logger.info("模块注册: ${module.name}") } + /** + * 注册多模块到管理器 + */ + fun registerModules(moduleList: List) { + for (module in moduleList) { + registerModule(module) + } + } /** * 加载指定模块 diff --git a/src/test/kotlin/top/r394realms/ltdmanagertest/help/helpTest.kt b/src/test/kotlin/top/r394realms/ltdmanagertest/help/helpTest.kt new file mode 100644 index 0000000..e2d368f --- /dev/null +++ b/src/test/kotlin/top/r394realms/ltdmanagertest/help/helpTest.kt @@ -0,0 +1,7 @@ +package top.r394realms.ltdmanagertest.help + +import top.r3944realms.ltdmanager.GlobalManager + +fun main() = GlobalManager.runBlockingMain { + +} \ No newline at end of file diff --git a/src/test/kotlin/top/r394realms/ltdmanagertest/mod/ModTest.kt b/src/test/kotlin/top/r394realms/ltdmanagertest/mod/ModTest.kt new file mode 100644 index 0000000..78b4075 --- /dev/null +++ b/src/test/kotlin/top/r394realms/ltdmanagertest/mod/ModTest.kt @@ -0,0 +1,25 @@ +package top.r394realms.ltdmanagertest.mod + +import top.r3944realms.ltdmanager.GlobalManager +import top.r3944realms.ltdmanager.module.ModGroupHandlerModule + + +fun main() = GlobalManager.runBlockingMain { + val groupId:Long = 538751386 + val selfQQId = 3327379836 + val selfNickName = "闲趣老土豆" + // 创建模块实例 + + val modGroupHandlerModule = ModGroupHandlerModule( + moduleName = "ModGroup", + targetGroupId = 339340846, + answers = listOf("戏鸢", "一只戏鸢", "折戏鸢", "LostInLinearPast", "lostinlinearpast"), + ) + + // 注册模块到全局模块管理器 + + GlobalManager.moduleManager.registerModule(modGroupHandlerModule) + + // 加载模块 + GlobalManager.moduleManager.loadModule(modGroupHandlerModule.name) +} \ No newline at end of file diff --git a/src/test/kotlin/top/r394realms/ltdmanagertest/msg/NapCatMsgTest.kt b/src/test/kotlin/top/r394realms/ltdmanagertest/msg/NapCatMsgTest.kt new file mode 100644 index 0000000..fcb7a70 --- /dev/null +++ b/src/test/kotlin/top/r394realms/ltdmanagertest/msg/NapCatMsgTest.kt @@ -0,0 +1,51 @@ +package top.r394realms.ltdmanagertest.msg + +import top.r3944realms.ltdmanager.GlobalManager +import top.r3944realms.ltdmanager.napcat.NapCatClient +import top.r3944realms.ltdmanager.napcat.data.ID +import top.r3944realms.ltdmanager.napcat.data.MessageElement +import top.r3944realms.ltdmanager.napcat.request.other.SendGroupMsgRequest +fun main() = GlobalManager.runBlockingMain { + val napCatClient = NapCatClient.create() + + // 生成9x9乘法表字符串 + val multiplicationTable = buildString { + for (i in 1..9) { + for (j in 1..i) { + append("$j×$i=${i * j}\t") + } + appendLine() // 换行 + } + } + + // 生成对齐检查字符 + val alignmentCheck = buildString { + appendLine("📏 对齐检查(每个数字占位):") + appendLine("1234567890") // 数字标尺 + appendLine("─".repeat(20)) // 分隔线 + + for (i in 1..9) { + for (j in 1..i) { + val product = i * j + val placeholder = "X".repeat("$j×$i=$product".length) + append("$placeholder\t") + } + appendLine() + } + } + + napCatClient.sendUnit( + SendGroupMsgRequest( + listOf( + MessageElement.at(ID.long(2561098830), "幸福亮亮"), + MessageElement.text("\n"), + MessageElement.text("9×9乘法表:\n"), + MessageElement.text(multiplicationTable), + MessageElement.text("\n────────────────────\n"), + MessageElement.text(alignmentCheck), + MessageElement.text("\n提问前,请看文档,不看文档就提问直接肘击(") + ), + ID.long(339340846) + ) + ) +} \ No newline at end of file