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
|
var g *message.GroupMessage
|
||||||
g = &message.GroupMessage{
|
g = &message.GroupMessage{
|
||||||
Id: m.Head.GetMsgSeq(),
|
Id: m.Head.GetMsgSeq(),
|
||||||
GroupCode: group.Code,
|
GroupCode: group.Code,
|
||||||
GroupName: string(m.Head.GroupInfo.GroupName),
|
GroupName: string(m.Head.GroupInfo.GroupName),
|
||||||
Sender: sender,
|
Sender: sender,
|
||||||
Time: m.Head.GetMsgTime(),
|
Time: m.Head.GetMsgTime(),
|
||||||
Elements: message.ParseMessageElems(m.Body.RichText.Elems),
|
Elements: message.ParseMessageElems(m.Body.RichText.Elems),
|
||||||
|
OriginalObject: m,
|
||||||
}
|
}
|
||||||
var extInfo *msg.ExtraInfo
|
var extInfo *msg.ExtraInfo
|
||||||
// pre parse
|
// pre parse
|
||||||
|
@ -2,6 +2,7 @@ package client
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||||
|
"github.com/Mrs4s/MiraiGo/message"
|
||||||
"github.com/Mrs4s/MiraiGo/protocol/packets"
|
"github.com/Mrs4s/MiraiGo/protocol/packets"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
@ -10,10 +11,32 @@ import (
|
|||||||
// 撤回相关处理逻辑
|
// 撤回相关处理逻辑
|
||||||
|
|
||||||
func (c *QQClient) RecallGroupMessage(groupCode int64, msgId, msgInternalId int32) error {
|
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))
|
_, err := c.sendAndWait(c.buildGroupRecallPacket(groupCode, msgId, msgInternalId))
|
||||||
return err
|
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 {
|
func (c *QQClient) RecallPrivateMessage(uin, ts int64, msgId, msgInternalId int32) error {
|
||||||
_, err := c.sendAndWait(c.buildPrivateRecallPacket(uin, ts, msgId, msgInternalId))
|
_, err := c.sendAndWait(c.buildPrivateRecallPacket(uin, ts, msgId, msgInternalId))
|
||||||
return err
|
return err
|
||||||
|
@ -34,13 +34,14 @@ type (
|
|||||||
}
|
}
|
||||||
|
|
||||||
GroupMessage struct {
|
GroupMessage struct {
|
||||||
Id int32
|
Id int32
|
||||||
InternalId int32
|
InternalId int32
|
||||||
GroupCode int64
|
GroupCode int64
|
||||||
GroupName string
|
GroupName string
|
||||||
Sender *Sender
|
Sender *Sender
|
||||||
Time int32
|
Time int32
|
||||||
Elements []IMessageElement
|
Elements []IMessageElement
|
||||||
|
OriginalObject *msg.Message
|
||||||
//OriginalElements []*msg.Elem
|
//OriginalElements []*msg.Elem
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user