1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

fix fragmented msg recall.

This commit is contained in:
Mrs4s 2020-12-02 20:16:33 +08:00
parent a56a314a61
commit 9fca2495b1
3 changed files with 38 additions and 13 deletions

View File

@ -470,12 +470,13 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
}
var g *message.GroupMessage
g = &message.GroupMessage{
Id: m.Head.GetMsgSeq(),
GroupCode: group.Code,
GroupName: string(m.Head.GroupInfo.GroupName),
Sender: sender,
Time: m.Head.GetMsgTime(),
Elements: message.ParseMessageElems(m.Body.RichText.Elems),
Id: m.Head.GetMsgSeq(),
GroupCode: group.Code,
GroupName: string(m.Head.GroupInfo.GroupName),
Sender: sender,
Time: m.Head.GetMsgTime(),
Elements: message.ParseMessageElems(m.Body.RichText.Elems),
OriginalObject: m,
}
var extInfo *msg.ExtraInfo
// pre parse

View File

@ -2,6 +2,7 @@ package client
import (
"github.com/Mrs4s/MiraiGo/client/pb/msg"
"github.com/Mrs4s/MiraiGo/message"
"github.com/Mrs4s/MiraiGo/protocol/packets"
"github.com/pkg/errors"
"google.golang.org/protobuf/proto"
@ -10,10 +11,32 @@ import (
// 撤回相关处理逻辑
func (c *QQClient) RecallGroupMessage(groupCode int64, msgId, msgInternalId int32) error {
if m, _ := c.GetGroupMessages(groupCode, int64(msgId), int64(msgId)); len(m) > 0 {
content := m[0].OriginalObject.Content
if content.GetPkgNum() > 1 {
if m, err := c.GetGroupMessages(groupCode, int64(msgId-content.GetPkgIndex()-1), int64(msgId+(content.GetPkgNum()-content.GetPkgIndex()+1))); err == nil {
if flag, _ := c.internalGroupRecall(groupCode, msgInternalId, m); flag {
return nil
}
}
}
}
_, err := c.sendAndWait(c.buildGroupRecallPacket(groupCode, msgId, msgInternalId))
return err
}
func (c *QQClient) internalGroupRecall(groupCode int64, msgInternalId int32, m []*message.GroupMessage) (flag bool, err error) {
for _, item := range m {
if item.InternalId == msgInternalId {
flag = true
if _, err := c.sendAndWait(c.buildGroupRecallPacket(groupCode, item.Id, item.InternalId)); err != nil {
return false, err
}
}
}
return flag, nil
}
func (c *QQClient) RecallPrivateMessage(uin, ts int64, msgId, msgInternalId int32) error {
_, err := c.sendAndWait(c.buildPrivateRecallPacket(uin, ts, msgId, msgInternalId))
return err

View File

@ -34,13 +34,14 @@ type (
}
GroupMessage struct {
Id int32
InternalId int32
GroupCode int64
GroupName string
Sender *Sender
Time int32
Elements []IMessageElement
Id int32
InternalId int32
GroupCode int64
GroupName string
Sender *Sender
Time int32
Elements []IMessageElement
OriginalObject *msg.Message
//OriginalElements []*msg.Elem
}