Skip to content

Commit

Permalink
backtrack message check
Browse files Browse the repository at this point in the history
  • Loading branch information
guimc233 committed Jul 6, 2024
1 parent a753e31 commit 864a89f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
37 changes: 33 additions & 4 deletions src/main/kotlin/ltd/guimc/lgzbot/listener/message/MessageFilter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ object MessageFilter {
private var repeaterFucker = mutableMapOf<Long, String>()
private var historyMessage = mutableMapOf<Long, MutableList<MessageChain>>()
private var memberVl = mutableMapOf<Long, Double>()
private var memberReviewing = mutableMapOf<Long, String>()

private var messagesHandled = 0
var riskList = ArrayList<Member>()
Expand Down Expand Up @@ -89,6 +90,37 @@ object MessageFilter {
messagesHandled++
}

if (memberReviewing.containsKey(e.sender.id)) {
memberReviewing.put(
e.sender.id,
memberReviewing.get(e.sender.id) + "\n" + textMessage.replace("\n", "")
)
if (memberReviewing.get(e.sender.id)?.let { RegexUtils.countLines(it) }!! >= 5) {
if (memberReviewing.get(e.sender.id)!!.length <= stringLength) {
memberReviewing.remove(e.sender.id)
return
}
if (RegexUtils.matchRegex(adRegex, memberReviewing.get(e.sender.id)!!)) {
e.group.mute(e.sender, "追溯检查")
muted = true
recalledMessage++
e.message.recall()
try {
historyMessage[e.sender.id]?.forEach {
recalledMessage++
it.recall()
sleep(100)
}
} catch (_: Exception) {
}
historyMessage[e.sender.id]?.clear()
memberVl[e.sender.id] = .0
messagesHandled++
}
memberReviewing.remove(e.sender.id)
}
}

// 合并转发消息提取
var forwardMessage: ForwardMessage? = null
e.message.iterator().forEach {
Expand Down Expand Up @@ -152,10 +184,7 @@ object MessageFilter {
setVl(e.sender.id, 99.0)
muted = true
} else if (abs(predictedResult[1] / predictedResult[0]) >= 2.5) {
e.message.recallIn(500L)
e.sender.mute(60, "非法发言内容 (启发式猜测)")
setVl(e.sender.id, 60.0)
muted = true
memberReviewing.put(e.sender.id, textMessage.replace("\n", ""))
} else {
// 长消息误判率较低,除非过长
addVl(e.sender.id, 49.0 * (predictedResult[1] - predictedResult[0]), "启发式长期分析")
Expand Down
6 changes: 6 additions & 0 deletions src/main/kotlin/ltd/guimc/lgzbot/utils/RegexUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,10 @@ object RegexUtils {
content
}
}

fun countLines(str: String): Int {
val lines = str.split("\r\n|\r|\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()

return lines.size
}
}

0 comments on commit 864a89f

Please sign in to comment.