Skip to content

使用 Announcements.get(fid) 出现 kotlinx.serialization.MissingFieldException: Field 'msg' #2509

@ForteScarlet

Description

@ForteScarlet

问题描述

当通过 Announcements.get(fid) 获取指定公告的时候出现反序列化异常

复现

val bot = BotFactory.newBot(0, "").alsoLogin()
val announcements = bot.getGroup(...)!!.announcements
announcements.asFlow().collect { announcement ->
    // Caused by: kotlinx.serialization.MissingFieldException: Field 'msg' is required for type with serial name 'net.mamoe.mirai.internal.contact.announcement.GroupAnnouncement', but it was missing
    announcements.get(announcement.fid)
}

mirai-core 版本

2.14.0

bot-protocol

ANDROID_PHONE

其他组件版本

No response

系统日志

2023-02-16 15:21:22 I/Bot 2240189254: Bot login successful.
Exception in thread "main" kotlinx.serialization.MissingFieldException: Field 'msg' is required for type with serial name 'net.mamoe.mirai.internal.contact.announcement.GroupAnnouncement', but it was missing at path: $
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:90)
	at kotlinx.serialization.json.Json.decodeFromString(Json.kt:95)
	at net.mamoe.mirai.utils.JsonStructKt.loadAs(JsonStruct.kt:26)
	at net.mamoe.mirai.utils.JsonStructKt.loadAs$default(JsonStruct.kt:25)
	at net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.getGroupAnnouncement(AnnouncementsImpl.kt:302)
	at net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol$getGroupAnnouncement$1.invokeSuspend(AnnouncementsImpl.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at net.mamoe.mirai.internal.deps.io.ktor.utils.io.internal.CancellableReusableContinuation.resumeWith(CancellableReusableContinuation.kt:93)
	at net.mamoe.mirai.internal.deps.io.ktor.utils.io.ByteBufferChannel.resumeClosed(ByteBufferChannel.kt:2156)
	at net.mamoe.mirai.internal.deps.io.ktor.utils.io.ByteBufferChannel.close(ByteBufferChannel.kt:136)
	at net.mamoe.mirai.internal.deps.io.ktor.utils.io.CoroutinesKt$launchChannel$1.invoke(Coroutines.kt:145)
	at net.mamoe.mirai.internal.deps.io.ktor.utils.io.CoroutinesKt$launchChannel$1.invoke(Coroutines.kt:144)
	at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1392)
	at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1520)
	at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
	at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
	at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:906)
	at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:863)
	at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:828)
	at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Caused by: kotlinx.serialization.MissingFieldException: Field 'msg' is required for type with serial name 'net.mamoe.mirai.internal.contact.announcement.GroupAnnouncement', but it was missing
	at kotlinx.serialization.internal.PluginExceptionsKt.throwMissingFieldException(PluginExceptions.kt:20)
	at net.mamoe.mirai.internal.contact.announcement.GroupAnnouncement.<init>(GroupAnnouncement.kt:40)
	at net.mamoe.mirai.internal.contact.announcement.GroupAnnouncement$$serializer.deserialize(GroupAnnouncement.kt:40)
	at net.mamoe.mirai.internal.contact.announcement.GroupAnnouncement$$serializer.deserialize(GroupAnnouncement.kt:40)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:70)
	... 27 more

网络日志

No response

补充信息

测试用群公告如图:

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    M优先级: 主要s:core子系统: mirai-coret:bug类型: bug

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions