From 906c0eae4f86394ca8a5f75c0f601d08745ca0bf Mon Sep 17 00:00:00 2001 From: RTAkland Date: Sun, 1 Sep 2024 19:18:38 +0800 Subject: [PATCH] feat: support revoke event --- gradle.properties | 2 +- .../kotlin/cn/rtast/rob/entity/BaseMessage.kt | 5 +++- .../kotlin/cn/rtast/rob/entity/NoticeEvent.kt | 4 ++- src/main/kotlin/cn/rtast/rob/enums/SubType.kt | 6 +++-- .../cn/rtast/rob/util/ob/MessageHandler.kt | 27 ++++++++++++++++--- .../kotlin/cn/rtast/rob/util/ob/OBMessage.kt | 18 ++++++++++--- src/test/kotlin/TestClient.kt | 16 ++++++++++- 7 files changed, 64 insertions(+), 14 deletions(-) diff --git a/gradle.properties b/gradle.properties index ec16d33..96d8626 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ kotlin.code.style=official -libVersion=1.4.3 \ No newline at end of file +libVersion=1.4.4 \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/rob/entity/BaseMessage.kt b/src/main/kotlin/cn/rtast/rob/entity/BaseMessage.kt index 4985f67..babecc9 100644 --- a/src/main/kotlin/cn/rtast/rob/entity/BaseMessage.kt +++ b/src/main/kotlin/cn/rtast/rob/entity/BaseMessage.kt @@ -9,6 +9,7 @@ package cn.rtast.rob.entity import cn.rtast.rob.enums.MessageType import cn.rtast.rob.enums.MetaEventType +import cn.rtast.rob.enums.NoticeType import cn.rtast.rob.enums.PostType import cn.rtast.rob.enums.SubType import com.google.gson.annotations.SerializedName @@ -24,5 +25,7 @@ data class BaseMessage( val rawMessage: String, @SerializedName("post_type") val postType: PostType, - val time: Long + val time: Long, + @SerializedName("notice_type") + val noticeType: NoticeType?, ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/rob/entity/NoticeEvent.kt b/src/main/kotlin/cn/rtast/rob/entity/NoticeEvent.kt index 8a40dab..8d899c0 100644 --- a/src/main/kotlin/cn/rtast/rob/entity/NoticeEvent.kt +++ b/src/main/kotlin/cn/rtast/rob/entity/NoticeEvent.kt @@ -17,5 +17,7 @@ data class NoticeEvent( @SerializedName("user_id") val userId: Long, val comment: String?, - val duration: Int? + val duration: Int?, + @SerializedName("message_id") + val messageId: String?, ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/rob/enums/SubType.kt b/src/main/kotlin/cn/rtast/rob/enums/SubType.kt index 4679d32..3b7e8d4 100644 --- a/src/main/kotlin/cn/rtast/rob/enums/SubType.kt +++ b/src/main/kotlin/cn/rtast/rob/enums/SubType.kt @@ -7,6 +7,8 @@ package cn.rtast.rob.enums -enum class NoticeType { - group_decrease, +enum class SubType { + kick, kick_me, invite, + set, unset, ban, lift_ban, + leave, approve, add } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/rob/util/ob/MessageHandler.kt b/src/main/kotlin/cn/rtast/rob/util/ob/MessageHandler.kt index c0e701e..bde6fce 100644 --- a/src/main/kotlin/cn/rtast/rob/util/ob/MessageHandler.kt +++ b/src/main/kotlin/cn/rtast/rob/util/ob/MessageHandler.kt @@ -29,6 +29,7 @@ import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.MessageEchoType import cn.rtast.rob.enums.MessageType import cn.rtast.rob.enums.MetaEventType +import cn.rtast.rob.enums.NoticeType import cn.rtast.rob.enums.PostType import cn.rtast.rob.enums.SubType import cn.rtast.rob.util.fromJson @@ -93,6 +94,24 @@ object MessageHandler { if (serializedMessage.postType == PostType.notice) { val time = serializedMessage.time val msg = message.fromJson() + when (serializedMessage.noticeType) { + NoticeType.group_recall -> { + listener.onGroupMessageRevoke( + websocket, + msg.groupId, + msg.userId, + msg.operatorId, + msg.messageId!! + ) + return + } + + NoticeType.friend_recall -> { + listener.onPrivateMessageRevoke(websocket, msg.userId, msg.messageId!!) + return + } + null -> {} + } when (serializedMessage.subType) { SubType.kick -> listener.onMemberKick(websocket, msg.groupId, msg.operatorId, time) SubType.kick_me -> listener.onBeKicked(websocket, msg.groupId, msg.operatorId, time) @@ -171,18 +190,18 @@ object MessageHandler { suspend fun onOpen(listener: OBMessage, websocket: WebSocket) { println("New connection: ${websocket.remoteSocketAddress}") - listener.onWebsocketOpen(websocket) + listener.onWebsocketOpenEvent(websocket) } suspend fun onClose(listener: OBMessage, code: Int, reason: String, remote: Boolean) { - listener.onWebsocketClose(code, reason, remote) + listener.onWebsocketCloseEvent(code, reason, remote) } suspend fun onStart(listener: OBMessage) { - listener.onWebsocketServerStart() + listener.onWebsocketServerStartEvent() } suspend fun onError(listener: OBMessage, websocket: WebSocket, ex: Exception) { - listener.onWebsocketError(websocket, ex) + listener.onWebsocketErrorEvent(websocket, ex) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/rob/util/ob/OBMessage.kt b/src/main/kotlin/cn/rtast/rob/util/ob/OBMessage.kt index 6450a4b..04b2cb6 100644 --- a/src/main/kotlin/cn/rtast/rob/util/ob/OBMessage.kt +++ b/src/main/kotlin/cn/rtast/rob/util/ob/OBMessage.kt @@ -22,13 +22,23 @@ import cn.rtast.rob.entity.StrangerInfo import org.java_websocket.WebSocket interface OBMessage : OBAction { - suspend fun onWebsocketError(webSocket: WebSocket, ex: Exception) {} - suspend fun onWebsocketOpen(websocket: WebSocket) {} - suspend fun onWebsocketClose(code: Int, reason: String, remote: Boolean) {} - suspend fun onWebsocketServerStart() {} + suspend fun onWebsocketErrorEvent(webSocket: WebSocket, ex: Exception) {} + suspend fun onWebsocketOpenEvent(websocket: WebSocket) {} + suspend fun onWebsocketCloseEvent(code: Int, reason: String, remote: Boolean) {} + suspend fun onWebsocketServerStartEvent() {} suspend fun onConnectEvent(websocket: WebSocket, event: ConnectEvent) {} suspend fun onHeartBeatEvent(websocket: WebSocket, event: HeartBeatEvent) {} suspend fun onMessage(websocket: WebSocket, rawMessage: String) {} + suspend fun onGroupMessageRevoke( + websocket: WebSocket, + groupId: Long, + userId: Long, + operator: Long, + messageId: String, + ) { + } + + suspend fun onPrivateMessageRevoke(websocket: WebSocket, userId: Long, messageId: String) {} suspend fun onBeAt(webSocket: WebSocket, message: GroupMessage) {} suspend fun onBeRepliedInGroup(webSocket: WebSocket, message: GroupMessage) {} suspend fun onBeRepliedInPrivate(webSocket: WebSocket, message: PrivateMessage) {} diff --git a/src/test/kotlin/TestClient.kt b/src/test/kotlin/TestClient.kt index 0dbca09..9f9c0a6 100644 --- a/src/test/kotlin/TestClient.kt +++ b/src/test/kotlin/TestClient.kt @@ -18,9 +18,23 @@ fun main() { println(message.rawMessage) } - override suspend fun onWebsocketError(webSocket: WebSocket, ex: Exception) { + override suspend fun onWebsocketErrorEvent(webSocket: WebSocket, ex: Exception) { ex.printStackTrace() } + + override suspend fun onGroupMessageRevoke( + websocket: WebSocket, + groupId: Long, + userId: Long, + operator: Long, + messageId: String + ) { + println(messageId) + } + + override suspend fun onPrivateMessageRevoke(websocket: WebSocket, userId: Long, messageId: String) { + println(messageId) + } }) rob.commandManager.register(EchoCommand()) // not a suspend function // rob.action.sendGroupMessage(114514, "1919810") // send a message in global scope