mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-13 06:30:13 +08:00
fix Message Packet serialization
This commit is contained in:
parent
9b4bacc243
commit
377ce31fde
@ -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状态
|
||||
|
@ -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()) } }
|
||||
|
Loading…
Reference in New Issue
Block a user