From d08d9dbddd6521079c6cbe007d9660aff69e7fed Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Thu, 2 Dec 2021 01:03:10 +0800 Subject: [PATCH] feat: decode compressed guild event packet. close #207 --- client/guild_eventflow.go | 13 +++++++++++++ go.mod | 1 + go.sum | 2 ++ 3 files changed, 16 insertions(+) diff --git a/client/guild_eventflow.go b/client/guild_eventflow.go index 74f61f5e..771690ca 100644 --- a/client/guild_eventflow.go +++ b/client/guild_eventflow.go @@ -1,6 +1,7 @@ package client import ( + "github.com/pierrec/lz4/v4" "sync" "time" @@ -32,6 +33,18 @@ func decodeGuildEventFlowPacket(c *QQClient, _ *incomingPacketInfo, payload []by if err := proto.Unmarshal(payload, push); err != nil { return nil, errors.Wrap(err, "failed to unmarshal protobuf message") } + if push.GetCompressFlag() == 1 && len(push.CompressMsg) > 0 { + press := new(channel.PressMsg) + dst := make([]byte, len(push.CompressMsg)*2) + i, err := lz4.UncompressBlock(push.CompressMsg, dst) + if err != nil { + return nil, errors.Wrap(err, "failed to decompress guild event packet") + } + if err = proto.Unmarshal(dst[:i], press); err != nil { + return nil, errors.Wrap(err, "failed to unmarshal protobuf message") + } + push.Msgs = press.Msgs + } for _, m := range push.Msgs { if m.Head.ContentHead.GetType() == 3841 { // todo: 回头 event flow 的处理移出去重构下逻辑, 先暂时这样方便改 diff --git a/go.mod b/go.mod index 4ea467a0..0adcf62b 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.0 // indirect + github.com/pierrec/lz4/v4 v4.1.11 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect diff --git a/go.sum b/go.sum index d4774d9b..37187dd4 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/pierrec/lz4/v4 v4.1.11 h1:LVs17FAZJFOjgmJXl9Tf13WfLUvZq7/RjfEJrnwZ9OE= +github.com/pierrec/lz4/v4 v4.1.11/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=