From 1ea4f641d4b7f6f79c2c164abd6c0350eed451be Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sun, 14 Nov 2021 12:06:50 +0800 Subject: [PATCH] fix: better error handle for upload long message --- client/group_msg.go | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/client/group_msg.go b/client/group_msg.go index aa1677c9..2be8c3c8 100644 --- a/client/group_msg.go +++ b/client/group_msg.go @@ -52,18 +52,18 @@ func (c *QQClient) SendGroupMessage(groupCode int64, m *message.SendingMessage, return nil } if !useFram && (msgLen > 100 || imgCount > 2) { - ret := c.sendGroupMessage(groupCode, false, - &message.SendingMessage{Elements: []message.IMessageElement{ - c.uploadGroupLongMessage(groupCode, - message.NewForwardMessage().AddNode(&message.ForwardNode{ - SenderId: c.Uin, - SenderName: c.Nickname, - Time: int32(time.Now().Unix()), - Message: m.Elements, - }), - ), - }}, - ) + lmsg, err := c.uploadGroupLongMessage(groupCode, + message.NewForwardMessage().AddNode(&message.ForwardNode{ + SenderId: c.Uin, + SenderName: c.Nickname, + Time: int32(time.Now().Unix()), + Message: m.Elements, + })) + if err != nil { + c.Error("%v", err) + return nil + } + ret := c.sendGroupMessage(groupCode, false, &message.SendingMessage{Elements: []message.IMessageElement{lmsg}}) ret.Elements = m.Elements return ret } @@ -160,17 +160,13 @@ func (c *QQClient) sendGroupMessage(groupCode int64, forward bool, m *message.Se } } -func (c *QQClient) uploadGroupLongMessage(groupCode int64, m *message.ForwardMessage) *message.ServiceElement { - if m.Length() >= 200 { - return nil - } +func (c *QQClient) uploadGroupLongMessage(groupCode int64, m *message.ForwardMessage) (*message.ServiceElement, error) { ts := time.Now().UnixNano() seq := c.nextGroupSeq() data, hash := m.CalculateValidationData(seq, rand.Int31(), groupCode) rsp, body, err := c.multiMsgApplyUp(groupCode, data, hash, 1) if err != nil { - c.Error("upload long message error: %v", err) - return nil + return nil, errors.Errorf("upload long message error: %v", err) } for i, ip := range rsp.Uint32UpIp { err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27) @@ -178,10 +174,9 @@ func (c *QQClient) uploadGroupLongMessage(groupCode int64, m *message.ForwardMes c.Error("highway upload long message error: %v", err) continue } - return genLongTemplate(rsp.MsgResid, m.Brief(), ts) + return genLongTemplate(rsp.MsgResid, m.Brief(), ts), nil } - c.Error("upload long message error: highway server list is empty or not available server.") - return nil + return nil, errors.New("upload long message error: highway server list is empty or not available server.") } func (c *QQClient) UploadGroupForwardMessage(groupCode int64, m *message.ForwardMessage) *message.ForwardElement {