mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
fix fragmented msg recall.
This commit is contained in:
parent
a56a314a61
commit
9fca2495b1
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user