Skip to content

Commit

Permalink
feat: support revoke event
Browse files Browse the repository at this point in the history
  • Loading branch information
RTAkland committed Sep 1, 2024
1 parent 1ca992d commit 906c0ea
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 14 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.4.3
libVersion=1.4.4
5 changes: 4 additions & 1 deletion src/main/kotlin/cn/rtast/rob/entity/BaseMessage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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?,
)
4 changes: 3 additions & 1 deletion src/main/kotlin/cn/rtast/rob/entity/NoticeEvent.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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?,
)
6 changes: 4 additions & 2 deletions src/main/kotlin/cn/rtast/rob/enums/SubType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
27 changes: 23 additions & 4 deletions src/main/kotlin/cn/rtast/rob/util/ob/MessageHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -93,6 +94,24 @@ object MessageHandler {
if (serializedMessage.postType == PostType.notice) {
val time = serializedMessage.time
val msg = message.fromJson<NoticeEvent>()
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)
Expand Down Expand Up @@ -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)
}
}
18 changes: 14 additions & 4 deletions src/main/kotlin/cn/rtast/rob/util/ob/OBMessage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {}
Expand Down
16 changes: 15 additions & 1 deletion src/test/kotlin/TestClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 906c0ea

Please sign in to comment.