Commit 377ce31f authored by ryoii's avatar ryoii

fix Message Packet serialization

parent 9b4bacc2
...@@ -2,17 +2,17 @@ package net.mamoe.mirai.api.http.dto ...@@ -2,17 +2,17 @@ package net.mamoe.mirai.api.http.dto
import kotlinx.serialization.* import kotlinx.serialization.*
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
interface DTO interface DTO
object MiraiJson { object MiraiJson {
val json = Json(context = SerializersModule { // val json = Json(context = SerializersModule {
polymorphic(MessagePacketDTO.serializer()) { // polymorphic(MessagePacketDTO.serializer()) {
GroupMessagePacketDTO::class with GroupMessagePacketDTO.serializer() // GroupMessagePacketDTO::class with GroupMessagePacketDTO.serializer()
FriendMessagePacketDTO::class with FriendMessagePacketDTO.serializer() // FriendMessagePacketDTO::class with FriendMessagePacketDTO.serializer()
} // }
}) // })
val json = Json
} }
// 解析失败时直接返回null,由路由判断响应400状态 // 解析失败时直接返回null,由路由判断响应400状态
......
...@@ -21,6 +21,10 @@ data class FriendMessagePacketDTO(val sender: QQDTO) : MessagePacketDTO() ...@@ -21,6 +21,10 @@ data class FriendMessagePacketDTO(val sender: QQDTO) : MessagePacketDTO()
@SerialName("GroupMessage") @SerialName("GroupMessage")
data class GroupMessagePacketDTO(val sender: MemberDTO) : MessagePacketDTO() data class GroupMessagePacketDTO(val sender: MemberDTO) : MessagePacketDTO()
@Serializable
@SerialName("UnKnownMessage")
data class UnKnownMessagePacketDTO(val msg: String) : MessagePacketDTO()
// Message // Message
@Serializable @Serializable
@SerialName("At") @SerialName("At")
...@@ -58,11 +62,11 @@ sealed class MessageDTO : DTO ...@@ -58,11 +62,11 @@ sealed class MessageDTO : DTO
/* /*
Extend function Extend function
*/ */
suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO? = when (this) { suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO = when (this) {
is FriendMessage -> FriendMessagePacketDTO(QQDTO(sender)) is FriendMessage -> FriendMessagePacketDTO(QQDTO(sender))
is GroupMessage -> GroupMessagePacketDTO(MemberDTO(sender, senderName)) is GroupMessage -> GroupMessagePacketDTO(MemberDTO(sender, senderName))
else -> null else -> UnKnownMessagePacketDTO("UnKnown Message Packet")
}?.apply { messageChain = Array(message.size){ message[it].toDTO() }} }.apply { messageChain = Array(message.size){ message[it].toDTO() }}
fun MessageChainDTO.toMessageChain() = fun MessageChainDTO.toMessageChain() =
MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage()) } } MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage()) } }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment