Mrs4s / go-cqhttp

cqhttp的golang实现,轻量、原生跨平台.
GNU Affero General Public License v3.0
10.4k stars 1.63k forks source link

[Bug]: 无法上传群文件 #2501

Open kkgg0521 opened 11 months ago

kkgg0521 commented 11 months ago

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

go-cqhttp 版本

v1.2.0

运行环境

Windows (64)

运行架构

x86

连接方式

HTTP

使用协议

2 | Android Watch

重现步骤

无法上传群文件,以下带代码中的t 等于1的情况 无法获取到上传群文件的host `// ConfigPushSvc.PushReq func decodePushReqPacket(c QQClient, pkt network.Packet) (any, error) {

request := &jce.RequestPacket{}
request.ReadFrom(jce.NewJceReader(pkt.Payload))
data := &jce.RequestDataVersion2{}
data.ReadFrom(jce.NewJceReader(request.SBuffer))
r := jce.NewJceReader(data.Map["PushReq"]["ConfigPush.PushReq"][1:])
t := r.ReadInt32(1)

jceBuf := r.ReadBytes(2)
if len(jceBuf) > 0 {
    switch t {
    case 1:
        ssoPkt := jce.NewJceReader(jceBuf)
        servers := ssoPkt.ReadSsoServerInfos(1)
        if len(servers) > 0 {
            var adds []netip.AddrPort
            for _, s := range servers {
                if strings.Contains(s.Server, "com") {
                    continue
                }
                c.debug("got new server addr: %v location: %v", s.Server, s.Location)
                addr, err := netip.ParseAddr(s.Server)
                if err == nil {
                    adds = append(adds, netip.AddrPortFrom(addr, uint16(s.Port)))
                }
            }
            f := true
            for _, e := range c.eventHandlers.serverUpdatedHandlers {
                cover(func() {
                    if !e(c, &ServerUpdatedEvent{Servers: servers}) {
                        f = false
                    }
                })
            }
            if f {
                c.SetCustomServer(adds)
            }
            return nil, nil
        }
    case 2:
        fmtPkt := jce.NewJceReader(jceBuf)
        list := &jce.FileStoragePushFSSvcList{}
        list.ReadFrom(fmtPkt)
        c.debug("got file storage svc push.")
        // c.fileStorageInfo = list
        rsp := cmd0x6ff.C501RspBody{}
        if err := proto.Unmarshal(list.BigDataChannel.PbBuf, &rsp); err == nil && rsp.RspBody != nil {
            c.highwaySession.SigSession = rsp.RspBody.SigSession
            c.highwaySession.SessionKey = rsp.RspBody.SessionKey
            for _, srv := range rsp.RspBody.Addrs {
                if srv.ServiceType.Unwrap() == 10 {
                    for _, addr := range srv.Addrs {
                        c.highwaySession.AppendAddr(addr.Ip.Unwrap(), addr.Port.Unwrap())
                    }
                }
                /*
                    if srv.ServiceType.Unwrap() == 21 {
                        for _, addr := range srv.Addrs {
                            c.otherSrvAddrs = append(c.otherSrvAddrs, fmt.Sprintf("%v:%v", binary.UInt32ToIPV4Address(addr.Ip.Unwrap()), addr.Port.Unwrap()))
                        }
                    }

                */
            }
        }
    }
}

seq := r.ReadInt64(3)
_, resp := c.buildConfPushRespPacket(t, seq, jceBuf)
return nil, c.sendPacket(resp)

}`

期望的结果是什么?

上传群文件没问题

实际的结果是什么?

无效果

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

No response

日志记录(可选)

No response

补充说明(可选)

No response

plwd2022 commented 11 months ago

同上,问题在我这里也存在。

kkgg0521 commented 11 months ago

同上,问题在我这里也存在。

有解决方案了么

jiangyin14 commented 10 months ago

我猜是watch协议的问题?watch有群文件功能吗

SinKingCloud commented 8 months ago

https://github.com/Mrs4s/MiraiGo/pull/347#issuecomment-2009113921