diff --git a/client/client.go b/client/client.go
index 19f6eb7d..44b68483 100644
--- a/client/client.go
+++ b/client/client.go
@@ -316,7 +316,7 @@ func (c *QQClient) SendForwardMessage(groupCode int64, m *message.ForwardMessage
for i := 0; i < int(math.Min(4, float64(len(m.Nodes)))); i++ {
pv += fmt.Sprintf(`
%s: %s`, m.Nodes[i].SenderName, message.ToReadableString(m.Nodes[i].Message))
}
- return c.SendGroupMessage(groupCode, genForwardMessage(rsp.MsgResid, pv, "群聊的聊天记录", "[聊天记录]", "聊天记录", fmt.Sprintf("查看 %d 条转发消息", len(m.Nodes)), ts))
+ return c.SendGroupMessage(groupCode, genForwardCard(rsp.MsgResid, pv, "群聊的聊天记录", "[聊天记录]", "聊天记录", fmt.Sprintf("查看 %d 条转发消息", len(m.Nodes)), ts))
}
}
return nil
diff --git a/client/global.go b/client/global.go
index 07a8fc22..7b16a40a 100644
--- a/client/global.go
+++ b/client/global.go
@@ -278,7 +278,7 @@ func packRequestDataV3(data []byte) (r []byte) {
return
}
-func genForwardMessage(resId, preview, title, brief, source, summary string, ts int64) *message.SendingMessage {
+func genForwardCard(resId, preview, title, brief, source, summary string, ts int64) *message.SendingMessage {
template := fmt.Sprintf(`
diff --git a/message/elements.go b/message/elements.go
index 5136b1c9..31825b9f 100644
--- a/message/elements.go
+++ b/message/elements.go
@@ -53,6 +53,10 @@ type ServiceElement struct {
Content string
}
+type ForwardElement struct {
+ ResId string
+}
+
func NewText(s string) *TextElement {
return &TextElement{Content: s}
}
@@ -142,6 +146,10 @@ func (e *ReplyElement) Type() ElementType {
return Reply
}
+func (e *ForwardElement) Type() ElementType {
+ return Forward
+}
+
var faceMap = map[int]string{
14: "微笑",
1: "撇嘴",
diff --git a/message/message.go b/message/message.go
index 672ed1c7..36a489ca 100644
--- a/message/message.go
+++ b/message/message.go
@@ -7,6 +7,7 @@ import (
"github.com/Mrs4s/MiraiGo/client/pb/msg"
"github.com/golang/protobuf/proto"
"reflect"
+ "regexp"
"strconv"
"strings"
)
@@ -76,6 +77,7 @@ const (
At
Reply
Service
+ Forward
)
func (s *Sender) IsAnonymous() bool {
@@ -307,6 +309,11 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
content = string(binary.ZlibUncompress(elem.RichMsg.Template1[1:]))
}
if content != "" {
+ if elem.RichMsg.ServiceId == 35 {
+ reg := regexp.MustCompile(`m_resid="(\w+?.*?)"`)
+ res = append(res, &ForwardElement{ResId: reg.FindAllStringSubmatch(content, -1)[0][1]})
+ continue
+ }
res = append(res, NewText(content))
}
}