Skip to content

Commit

Permalink
fix: fix bug
Browse files Browse the repository at this point in the history
  • Loading branch information
RTAkland committed Aug 31, 2024
1 parent 983d6e0 commit 5b733d5
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 12 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
kotlin.code.style=official

libVersion=1.2.8
libVersion=1.2.9
26 changes: 26 additions & 0 deletions src/main/kotlin/cn/rtast/rob/entity/GroupArrayMessage.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/8/31
*/


package cn.rtast.rob.entity

import com.google.gson.annotations.SerializedName

data class GroupArrayMessage(
@SerializedName("sub_type")
val subType: String,
@SerializedName("message_id")
val messageId: Long,
@SerializedName("user_id")
val userId: Long,
@SerializedName("group_id")
val groupId: Long,
val message: List<ArrayMessage>,
@SerializedName("raw_message")
val rawMessage: String,
val sender: Sender,
val time: Long,
)
2 changes: 1 addition & 1 deletion src/main/kotlin/cn/rtast/rob/entity/GroupMessage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ data class GroupMessage(
val userId: Long,
@SerializedName("group_id")
val groupId: Long,
val message: Array<ArrayMessage>,
val message: Any,
@SerializedName("raw_message")
val rawMessage: String,
val sender: Sender,
Expand Down
12 changes: 12 additions & 0 deletions src/main/kotlin/cn/rtast/rob/util/Json.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
package cn.rtast.rob.util

import cn.rtast.rob.gson
import com.google.gson.JsonParser
import com.google.gson.JsonSyntaxException

internal fun Any.toJson(): String {
return gson.toJson(this)
Expand All @@ -16,3 +18,13 @@ internal fun Any.toJson(): String {
internal inline fun <reified T> String.fromJson(): T {
return gson.fromJson(this, T::class.java)
}


fun Any.isJsonArray(): Boolean {
return try {
val jsonElement = JsonParser.parseString(this.toJson())
jsonElement.isJsonArray
} catch (_: JsonSyntaxException) {
false
}
}
28 changes: 18 additions & 10 deletions src/main/kotlin/cn/rtast/rob/util/ob/MessageHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ package cn.rtast.rob.util.ob

import cn.rtast.rob.ROneBotFactory
import cn.rtast.rob.ROneBotFactory.commandManager
import cn.rtast.rob.entity.ArrayMessage
import cn.rtast.rob.entity.BaseMessage
import cn.rtast.rob.entity.CanSend
import cn.rtast.rob.entity.ConnectEvent
import cn.rtast.rob.entity.FriendList
import cn.rtast.rob.entity.GroupArrayMessage
import cn.rtast.rob.entity.GroupInfo
import cn.rtast.rob.entity.GroupList
import cn.rtast.rob.entity.GroupMemberInfo
Expand All @@ -32,6 +34,8 @@ import cn.rtast.rob.enums.MetaEventType
import cn.rtast.rob.enums.PostType
import cn.rtast.rob.enums.SubType
import cn.rtast.rob.util.fromJson
import cn.rtast.rob.util.isJsonArray
import cn.rtast.rob.util.toJson
import org.java_websocket.WebSocket

object MessageHandler {
Expand All @@ -58,18 +62,22 @@ object MessageHandler {
when (serializedMessage.messageType) {
MessageType.group -> {
val msg = message.fromJson<GroupMessage>()
if (msg.groupId !in listeningGroups && listeningGroups.isNotEmpty()) return
msg.message.distinctBy { it.type }.forEach {
if (it.type == ArrayMessageType.reply) {
listener.onBeRepliedInGroup(websocket, msg)
return@forEach
}
if (it.type == ArrayMessageType.at) {
listener.onBeAt(websocket, msg)
return@forEach
if (msg.message.isJsonArray()) {
val arrayMessage = message.fromJson<GroupArrayMessage>()
if (msg.groupId !in listeningGroups && listeningGroups.isNotEmpty()) return
arrayMessage.message.distinctBy { it.type }.forEach {
if (it.type == ArrayMessageType.reply) {
listener.onBeRepliedInGroup(websocket, msg)
return@forEach
}
if (it.type == ArrayMessageType.at) {
listener.onBeAt(websocket, msg)
return@forEach
}
}
commandManager.handleGroup(listener, msg)
}
commandManager.handleGroup(listener, msg)

listener.onGroupMessage(websocket, msg, message)
}

Expand Down

0 comments on commit 5b733d5

Please sign in to comment.