fix Message Packet serialization

This commit is contained in:
ryoii 2020-02-04 21:06:40 +08:00
parent 9b4bacc243
commit 377ce31fde
2 changed files with 14 additions and 10 deletions

View File

@ -2,17 +2,17 @@ package net.mamoe.mirai.api.http.dto
import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
interface DTO
object MiraiJson {
val json = Json(context = SerializersModule {
polymorphic(MessagePacketDTO.serializer()) {
GroupMessagePacketDTO::class with GroupMessagePacketDTO.serializer()
FriendMessagePacketDTO::class with FriendMessagePacketDTO.serializer()
}
})
// val json = Json(context = SerializersModule {
// polymorphic(MessagePacketDTO.serializer()) {
// GroupMessagePacketDTO::class with GroupMessagePacketDTO.serializer()
// FriendMessagePacketDTO::class with FriendMessagePacketDTO.serializer()
// }
// })
val json = Json
}
// 解析失败时直接返回null由路由判断响应400状态

View File

@ -21,6 +21,10 @@ data class FriendMessagePacketDTO(val sender: QQDTO) : MessagePacketDTO()
@SerialName("GroupMessage")
data class GroupMessagePacketDTO(val sender: MemberDTO) : MessagePacketDTO()
@Serializable
@SerialName("UnKnownMessage")
data class UnKnownMessagePacketDTO(val msg: String) : MessagePacketDTO()
// Message
@Serializable
@SerialName("At")
@ -58,11 +62,11 @@ sealed class MessageDTO : DTO
/*
Extend function
*/
suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO? = when (this) {
suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO = when (this) {
is FriendMessage -> FriendMessagePacketDTO(QQDTO(sender))
is GroupMessage -> GroupMessagePacketDTO(MemberDTO(sender, senderName))
else -> null
}?.apply { messageChain = Array(message.size){ message[it].toDTO() }}
else -> UnKnownMessagePacketDTO("UnKnown Message Packet")
}.apply { messageChain = Array(message.size){ message[it].toDTO() }}
fun MessageChainDTO.toMessageChain() =
MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage()) } }