mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-06-19 14:05:04 +08:00
Merge pull request #88 from wdvxdr1123/patch/forwardmsg
remove unnecessary code
This commit is contained in:
commit
4e82afc69b
@ -507,17 +507,17 @@ func (c *QQClient) GetForwardMessage(resId string) *message.ForwardMessage {
|
|||||||
if multiMsg.GetPbItemList() == nil {
|
if multiMsg.GetPbItemList() == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var msg *msg.PbMultiMsgItem
|
var item *msg.PbMultiMsgItem
|
||||||
for _, m := range multiMsg.GetPbItemList() {
|
for _, m := range multiMsg.GetPbItemList() {
|
||||||
if m.GetFileName() == "MultiMsg" {
|
if m.GetFileName() == "MultiMsg" {
|
||||||
msg = m
|
item = m
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if msg == nil || msg.GetBuffer() == nil || msg.GetBuffer().GetMsg() == nil {
|
if item == nil || item.GetBuffer() == nil || item.GetBuffer().GetMsg() == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, m := range msg.GetBuffer().GetMsg() {
|
for _, m := range item.GetBuffer().GetMsg() {
|
||||||
ret.Nodes = append(ret.Nodes, &message.ForwardNode{
|
ret.Nodes = append(ret.Nodes, &message.ForwardNode{
|
||||||
SenderId: m.Head.GetFromUin(),
|
SenderId: m.Head.GetFromUin(),
|
||||||
SenderName: func() string {
|
SenderName: func() string {
|
||||||
|
@ -61,11 +61,8 @@ func (c *QQClient) SendGroupMessage(groupCode int64, m *message.SendingMessage,
|
|||||||
|
|
||||||
// SendGroupForwardMessage 发送群合并转发消息
|
// SendGroupForwardMessage 发送群合并转发消息
|
||||||
func (c *QQClient) SendGroupForwardMessage(groupCode int64, m *message.ForwardMessage) *message.GroupMessage {
|
func (c *QQClient) SendGroupForwardMessage(groupCode int64, m *message.ForwardMessage) *message.GroupMessage {
|
||||||
mg := c.UploadGroupForwardMessage(groupCode, m)
|
|
||||||
return c.sendGroupMessage(groupCode, true,
|
return c.sendGroupMessage(groupCode, true,
|
||||||
&message.SendingMessage{Elements: []message.IMessageElement{
|
&message.SendingMessage{Elements: []message.IMessageElement{c.UploadGroupForwardMessage(groupCode, m)}},
|
||||||
&mg.ServiceElement,
|
|
||||||
}},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,25 +149,10 @@ func (c *QQClient) uploadGroupLongMessage(groupCode int64, m *message.ForwardMes
|
|||||||
ts := time.Now().UnixNano()
|
ts := time.Now().UnixNano()
|
||||||
seq := c.nextGroupSeq()
|
seq := c.nextGroupSeq()
|
||||||
data, hash := m.CalculateValidationData(seq, rand.Int31(), groupCode)
|
data, hash := m.CalculateValidationData(seq, rand.Int31(), groupCode)
|
||||||
i, err := c.sendAndWait(c.buildMultiApplyUpPacket(data, hash, 1, utils.ToGroupUin(groupCode)))
|
rsp, body, err := c.multiMsgApplyUp(groupCode, data, hash, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
rsp := i.(*multimsg.MultiMsgApplyUpRsp)
|
|
||||||
body, _ := proto.Marshal(&longmsg.LongReqBody{
|
|
||||||
Subcmd: 1,
|
|
||||||
TermType: 5,
|
|
||||||
PlatformType: 9,
|
|
||||||
MsgUpReq: []*longmsg.LongMsgUpReq{
|
|
||||||
{
|
|
||||||
MsgType: 3,
|
|
||||||
DstUin: utils.ToGroupUin(groupCode),
|
|
||||||
MsgContent: data,
|
|
||||||
StoreType: 2,
|
|
||||||
MsgUkey: rsp.MsgUkey,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
for i, ip := range rsp.Uint32UpIp {
|
for i, ip := range rsp.Uint32UpIp {
|
||||||
err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27)
|
err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -197,10 +179,28 @@ func (c *QQClient) UploadGroupForwardMessage(groupCode int64, m *message.Forward
|
|||||||
ts := time.Now().UnixNano()
|
ts := time.Now().UnixNano()
|
||||||
seq := c.nextGroupSeq()
|
seq := c.nextGroupSeq()
|
||||||
data, hash, items := m.CalculateValidationDataForward(seq, rand.Int31(), groupCode)
|
data, hash, items := m.CalculateValidationDataForward(seq, rand.Int31(), groupCode)
|
||||||
i, err := c.sendAndWait(c.buildMultiApplyUpPacket(data, hash, 2, utils.ToGroupUin(groupCode)))
|
rsp, body, err := c.multiMsgApplyUp(groupCode, data, hash, 2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
for i, ip := range rsp.Uint32UpIp {
|
||||||
|
err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27)
|
||||||
|
if err == nil {
|
||||||
|
var pv string
|
||||||
|
for i := 0; i < int(math.Min(4, float64(len(m.Nodes)))); i++ {
|
||||||
|
pv += fmt.Sprintf(`<title size="26" color="#777777">%s: %s</title>`, m.Nodes[i].SenderName, message.ToReadableString(m.Nodes[i].Message))
|
||||||
|
}
|
||||||
|
return genForwardTemplate(rsp.MsgResid, pv, "群聊的聊天记录", "[聊天记录]", "聊天记录", fmt.Sprintf("查看 %d 条转发消息", len(m.Nodes)), ts, items)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *QQClient) multiMsgApplyUp(groupCode int64, data []byte, hash []byte, buType int32) (*multimsg.MultiMsgApplyUpRsp, []byte, error) {
|
||||||
|
i, err := c.sendAndWait(c.buildMultiApplyUpPacket(data, hash, buType, utils.ToGroupUin(groupCode)))
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
rsp := i.(*multimsg.MultiMsgApplyUpRsp)
|
rsp := i.(*multimsg.MultiMsgApplyUpRsp)
|
||||||
body, _ := proto.Marshal(&longmsg.LongReqBody{
|
body, _ := proto.Marshal(&longmsg.LongReqBody{
|
||||||
Subcmd: 1,
|
Subcmd: 1,
|
||||||
@ -216,17 +216,7 @@ func (c *QQClient) UploadGroupForwardMessage(groupCode int64, m *message.Forward
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
for i, ip := range rsp.Uint32UpIp {
|
return rsp, body, nil
|
||||||
err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27)
|
|
||||||
if err == nil {
|
|
||||||
var pv string
|
|
||||||
for i := 0; i < int(math.Min(4, float64(len(m.Nodes)))); i++ {
|
|
||||||
pv += fmt.Sprintf(`<title size="26" color="#777777">%s: %s</title>`, m.Nodes[i].SenderName, message.ToReadableString(m.Nodes[i].Message))
|
|
||||||
}
|
|
||||||
return genForwardTemplate(rsp.MsgResid, pv, "群聊的聊天记录", "[聊天记录]", "聊天记录", fmt.Sprintf("查看 %d 条转发消息", len(m.Nodes)), ts, items)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageSvc.PbSendMsg
|
// MessageSvc.PbSendMsg
|
||||||
|
@ -560,6 +560,42 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (forMsg *ForwardMessage) CalculateValidationData(seq, random int32, groupCode int64) ([]byte, []byte) {
|
func (forMsg *ForwardMessage) CalculateValidationData(seq, random int32, groupCode int64) ([]byte, []byte) {
|
||||||
|
msgs := forMsg.packForwardMsg(seq, random, groupCode)
|
||||||
|
trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{
|
||||||
|
{
|
||||||
|
FileName: proto.String("MultiMsg"),
|
||||||
|
Buffer: &msg.PbMultiMsgNew{Msg: msgs},
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
b, _ := proto.Marshal(trans)
|
||||||
|
data := binary.GZipCompress(b)
|
||||||
|
hash := md5.Sum(data)
|
||||||
|
return data, hash[:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalculateValidationDataForward 屎代码
|
||||||
|
func (forMsg *ForwardMessage) CalculateValidationDataForward(seq, random int32, groupCode int64) ([]byte, []byte, []*msg.PbMultiMsgItem) {
|
||||||
|
msgs := forMsg.packForwardMsg(seq, random, groupCode)
|
||||||
|
trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{
|
||||||
|
{
|
||||||
|
FileName: proto.String("MultiMsg"),
|
||||||
|
Buffer: &msg.PbMultiMsgNew{Msg: msgs},
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
for _, node := range forMsg.Nodes {
|
||||||
|
for _, message := range node.Message {
|
||||||
|
if forwardElement, ok := message.(*ForwardElement); ok {
|
||||||
|
trans.PbItemList = append(trans.PbItemList, forwardElement.Items...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b, _ := proto.Marshal(trans)
|
||||||
|
data := binary.GZipCompress(b)
|
||||||
|
hash := md5.Sum(data)
|
||||||
|
return data, hash[:], trans.PbItemList
|
||||||
|
}
|
||||||
|
|
||||||
|
func (forMsg *ForwardMessage) packForwardMsg(seq int32, random int32, groupCode int64) []*msg.Message {
|
||||||
var msgs []*msg.Message
|
var msgs []*msg.Message
|
||||||
for _, node := range forMsg.Nodes {
|
for _, node := range forMsg.Nodes {
|
||||||
msgs = append(msgs, &msg.Message{
|
msgs = append(msgs, &msg.Message{
|
||||||
@ -586,65 +622,7 @@ func (forMsg *ForwardMessage) CalculateValidationData(seq, random int32, groupCo
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{
|
return msgs
|
||||||
{
|
|
||||||
FileName: proto.String("MultiMsg"),
|
|
||||||
Buffer: &msg.PbMultiMsgNew{Msg: msgs},
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
b, _ := proto.Marshal(trans)
|
|
||||||
data := binary.GZipCompress(b)
|
|
||||||
hash := md5.Sum(data)
|
|
||||||
return data, hash[:]
|
|
||||||
}
|
|
||||||
|
|
||||||
// CalculateValidationDataForward 屎代码
|
|
||||||
func (forMsg *ForwardMessage) CalculateValidationDataForward(seq, random int32, groupCode int64) ([]byte, []byte, []*msg.PbMultiMsgItem) {
|
|
||||||
var msgs []*msg.Message
|
|
||||||
for _, node := range forMsg.Nodes {
|
|
||||||
msgs = append(msgs, &msg.Message{
|
|
||||||
Head: &msg.MessageHead{
|
|
||||||
FromUin: &node.SenderId,
|
|
||||||
MsgSeq: &seq,
|
|
||||||
MsgTime: &node.Time,
|
|
||||||
MsgUid: proto.Int64(0x01000000000000000 | (int64(random) & 0xFFFFFFFF)),
|
|
||||||
MutiltransHead: &msg.MutilTransHead{
|
|
||||||
MsgId: proto.Int32(1),
|
|
||||||
},
|
|
||||||
MsgType: proto.Int32(82),
|
|
||||||
GroupInfo: &msg.GroupInfo{
|
|
||||||
GroupCode: &groupCode,
|
|
||||||
GroupRank: []byte{},
|
|
||||||
GroupName: []byte{},
|
|
||||||
GroupCard: &node.SenderName,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Body: &msg.MessageBody{
|
|
||||||
RichText: &msg.RichText{
|
|
||||||
Elems: func() []*msg.Elem {
|
|
||||||
return ToProtoElems(node.Message, false)
|
|
||||||
}(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{
|
|
||||||
{
|
|
||||||
FileName: proto.String("MultiMsg"),
|
|
||||||
Buffer: &msg.PbMultiMsgNew{Msg: msgs},
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
for _, item1 := range forMsg.Nodes {
|
|
||||||
for _, item2 := range item1.Message {
|
|
||||||
if item3, ok := item2.(*ForwardElement); ok {
|
|
||||||
trans.PbItemList = append(trans.PbItemList, item3.Items...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
b, _ := proto.Marshal(trans)
|
|
||||||
data := binary.GZipCompress(b)
|
|
||||||
hash := md5.Sum(data)
|
|
||||||
return data, hash[:], trans.PbItemList
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToReadableString(m []IMessageElement) (r string) {
|
func ToReadableString(m []IMessageElement) (r string) {
|
||||||
@ -658,10 +636,6 @@ func ToReadableString(m []IMessageElement) (r string) {
|
|||||||
r += "/" + e.Name
|
r += "/" + e.Name
|
||||||
case *GroupImageElement:
|
case *GroupImageElement:
|
||||||
r += "[图片]"
|
r += "[图片]"
|
||||||
case *ServiceElement:
|
|
||||||
if e.SubType == "Forward" {
|
|
||||||
r += "[聊天记录]"
|
|
||||||
}
|
|
||||||
case *ForwardElement:
|
case *ForwardElement:
|
||||||
r += "[聊天记录]"
|
r += "[聊天记录]"
|
||||||
// NOTE: flash pic is singular
|
// NOTE: flash pic is singular
|
||||||
|
@ -125,21 +125,7 @@ func (e *FriendImageElement) Pack() (r []*msg.Elem) {
|
|||||||
|
|
||||||
func (e *ServiceElement) Pack() (r []*msg.Elem) {
|
func (e *ServiceElement) Pack() (r []*msg.Elem) {
|
||||||
r = []*msg.Elem{}
|
r = []*msg.Elem{}
|
||||||
if e.Id == 35 {
|
// id =35 已移至 ForwardElement
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
RichMsg: &msg.RichMsg{
|
|
||||||
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
|
||||||
ServiceId: &e.Id,
|
|
||||||
MsgResId: []byte{},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
Text: &msg.Text{
|
|
||||||
Str: proto.String("你的QQ暂不支持查看[转发多条消息],请期待后续版本。"),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if e.Id == 33 {
|
if e.Id == 33 {
|
||||||
r = append(r, &msg.Elem{
|
r = append(r, &msg.Elem{
|
||||||
Text: &msg.Text{Str: &e.ResId},
|
Text: &msg.Text{Str: &e.ResId},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user