diff --git a/message/elements.go b/message/elements.go index e5a645cb..634ef306 100644 --- a/message/elements.go +++ b/message/elements.go @@ -1,6 +1,7 @@ package message import ( + "fmt" "strconv" "strings" ) @@ -123,6 +124,18 @@ func NewReply(m *GroupMessage) *ReplyElement { } } +func NewUrlShare(url, title, content, image string) *ServiceElement { + template := fmt.Sprintf(`%s%s`, + url, url, image, title, content, + ) + return &ServiceElement{ + Id: 33, + Content: template, + ResId: url, + SubType: "UrlShare", + } +} + func (e *TextElement) Type() ElementType { return Text } diff --git a/message/message.go b/message/message.go index ec5581f1..76b057d7 100644 --- a/message/message.go +++ b/message/message.go @@ -301,6 +301,18 @@ func ToProtoElems(elems []IMessageElement, generalFlags bool) (r []*msg.Elem) { }, }) } + if e.Id == 33 { + r = append(r, &msg.Elem{ + Text: &msg.Text{Str: e.ResId}, + }) + r = append(r, &msg.Elem{ + RichMsg: &msg.RichMsg{ + Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...), + ServiceId: e.Id, + MsgResId: []byte{}, + }, + }) + } } } if generalFlags { @@ -404,6 +416,9 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement { res = append(res, &ForwardElement{ResId: reg.FindAllStringSubmatch(content, -1)[0][1]}) continue } + if elem.RichMsg.ServiceId == 33 { + continue // 前面一个 elem 已经解析到链接 + } res = append(res, NewText(content)) } }