Skip to content

[Bug?]: Normal group messages are incorrectly parsed as GroupMemberEnter, causing message loss #894

@LovelyRua

Description

@LovelyRua

请确保您已阅读以上注意事项,并勾选下方的确认框。

  • 我已经仔细阅读上述内容
  • 我已经使用 最新构建 测试过,问题依旧存在。
  • 我已经在 Issue Tracker 中找过我要提出的问题,没有找到相同问题的ISSUE。
  • 我已知晓并同意,此处仅用于汇报程序中存在的问题。若这个 Issue 是关于其他非程序本身问题,则我的 Issue 可能会被无条件自动关闭或/并锁定。(其它疑问请考虑加入TG群询问或在discussions中提问)

Lagrange项目

OneBot

所使用/依赖的Lagrange项目对应的commit

1968eac

运行环境

Linux

运行架构

x64

连接方式

反向 WebSocket

重现步骤

在特定群组中,所有正常的群聊消息均无法通过 OneBot 适配器上报给下游应用(如 Koishi)。通过日志分析发现,Lagrange 在接收到这些正常的聊天消息时,似乎错误地将其判断为“新人入群”事件,并尝试使用 GroupMemberEnterDetail 的协议格式进行解析,最终因格式不匹配而抛出 Invalid field 异常,导致该消息被丢弃,无法正常处理。
此问题在更新到最新的 Docker 镜像后依然存在。

期望的结果是什么?

特定群组中的正常聊天消息应该被正确解析,并通过 OneBot 适配器正常上报。

实际的结果是什么?

特定群组中的正常聊天消息没有被上报。Lagrange 日志中出现大量与 GroupMemberEnterDetail 相关的 Protobuf 解析失败警告,即使当时并没有新成员加入群聊。

简单的复现代码/链接(可选)

Trace 级别日志记录(可选)

[2025-09-12 08:30:01] [MessagingLogic] [VERBOSE]: [MessageChain([ProblematicGroupID])([UserID_A])] [Text]: 是qq到连接器的问题
[2025-09-12 08:30:16] [BusinessContext] [WARNING]: Error while handling msf push: 12 trpc.msg.olpush.OlPushService.MsgPush
[2025-09-12 08:30:16] [BusinessContext] [WARNING]: Invalid field in source data: 0
[2025-09-12 08:30:16] [BusinessContext] [WARNING]:    at ProtoBuf.Internal.ThrowHelper.ThrowProtoException(String message, Exception inner) in /_/src/protobuf-net.Core/Internal/ThrowHelper.cs:line 86
   at ProtoBuf.ProtoReader.ThrowInvalidField(Int32 fieldNumber) in /_/src/protobuf-net.Core/ProtoReader.cs:line 325
   at proto_86(State&, GroupMemberEnterDetail)
   at ProtoBuf.Internal.Serializers.SimpleCompiledSerializer`1.ProtoBuf.Serializers.ISerializer<T>.Read(State& state, T value) in /_/src/protobuf-net/Internal/Serializers/CompiledSerializer.cs:line 107
   at ProtoBuf.ProtoReader.State.ReadMessage[TSerializer,T](SerializerFeatures features, T value, TSerializer& serializer) in /_/src/protobuf-net.Core/ProtoReader.State.ReadMethods.cs:line 1022
   at proto_84(State&, GroupMemberEnterInfo)
   at ProtoBuf.Internal.Serializers.SimpleCompiledSerializer`1.ProtoBuf.Serializers.ISerializer<T>.Read(State& state, T value) in /_/src/protobuf-net/Internal/Serializers/CompiledSerializer.cs:line 107
   at ProtoBuf.ProtoReader.State.ReadMessage[TSerializer,T](SerializerFeatures features, T value, TSerializer& serializer) in /_/src/protobuf-net.Core/ProtoReader.State.ReadMethods.cs:line 1022
   at proto_80(State&, GroupMemberEnterContentBody)
   at ProtoBuf.Internal.Serializers.SimpleCompiledSerializer`1.ProtoBuf.Serializers.ISerializer<T>.Read(State& state, T value) in /_/src/protobuf-net/Internal/Serializers/CompiledSerializer.cs:line 107
   at ProtoBuf.ProtoReader.State.ReadMessage[TSerializer,T](SerializerFeatures features, T value, TSerializer& serializer) in /_/src/protobuf-net.Core/ProtoReader.State.ReadMethods.cs:line 1022
   at proto_78(State&, GroupMemberEnter)
   at ProtoBuf.Internal.Serializers.SimpleCompiledSerializer`1.ProtoBuf.Serializers.ISerializer<T>.Read(State& state, T value) in /_/src/protobuf-net/Internal/Serializers/CompiledSerializer.cs:line 107
   at ProtoBuf.ProtoReader.State.ReadAsRoot[T](T value, ISerializer`1 serializer) in /_/src/protobuf-net.Core/ProtoReader.State.ReadMethods.cs:line 1157
   at ProtoBuf.ProtoReader.State.DeserializeRoot[T](T value, ISerializer`1 serializer) in /_/src/protobuf-net.Core/ProtoReader.State.ReadMethods.cs:line 1137
   at ProtoBuf.Meta.TypeModel.Deserialize[T](ReadOnlySpan`1 source, T value, Object userState) in /_/src/protobuf-net.Core/Meta/TypeModel.cs:line 808
   at ProtoBuf.Serializer.Deserialize[T](ReadOnlySpan`1 source, T value, Object userState) in /_/src/protobuf-net/Serializer.Deserialize.cs:line 74
   at Lagrange.Core.Internal.Service.Message.PushMessageService.ProcessEvent0x210(Span`1 payload, PushMsg msg, List`1 extraEvents)
   at Lagrange.Core.Internal.Service.Message.PushMessageService.Parse(Span`1 input, BotKeystore keystore, BotAppInfo appInfo, BotDeviceInfo device, PushMessageEvent& output, List`1& extraEvents)
   at Lagrange.Core.Internal.Service.BaseService`1.Lagrange.Core.Internal.Service.IService.Parse(Span`1 input, BotKeystore keystore, BotAppInfo appInfo, BotDeviceInfo device, ProtocolEvent& output, List`1& extraEvents)
   at Lagrange.Core.Internal.Context.ServiceContext.ResolveEventByPacket(SsoPacket packet)
   at Lagrange.Core.Internal.Context.BusinessContext.HandleServerPacket(SsoPacket packet)
[2025-09-12 08:30:20] [MessagingLogic] [VERBOSE]: [MessageChain([ProblematicGroupID])([UserID_A])] [Text]: 不知道为什么正常的群消息被解析成进群消息了
[2025-09-12 08:30:38] [MessagingLogic] [VERBOSE]: [MessageChain([ProblematicGroupID])([UserID_B])] [Text]: 怪

补充说明(可选)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug?Maybe it's a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions