1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-06 03:53:50 +08:00

refactor: simply ToStringMessage

This commit is contained in:
wdvxdr 2021-05-18 14:12:58 +08:00
parent 3c6dfa8e48
commit 9c323c6a4e
No known key found for this signature in database
GPG Key ID: 55FF1414A69CEBA6

View File

@ -135,7 +135,7 @@ func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []M
"seq": strconv.FormatInt(int64(replyElem.ReplySeq), 10), "seq": strconv.FormatInt(int64(replyElem.ReplySeq), 10),
"qq": strconv.FormatInt(replyElem.Sender, 10), "qq": strconv.FormatInt(replyElem.Sender, 10),
"time": strconv.FormatInt(int64(replyElem.Time), 10), "time": strconv.FormatInt(int64(replyElem.Time), 10),
"text": CQCodeEscapeValue(CQCodeEscapeText(ToStringMessage(replyElem.Elements, id))), "text": ToStringMessage(replyElem.Elements, id),
}, },
}) })
} else { } else {
@ -288,6 +288,9 @@ func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []M
func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r string) { func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r string) {
sb := global.NewBuffer() sb := global.NewBuffer()
sb.Reset() sb.Reset()
write := func(format string, a ...interface{}) {
_, _ = fmt.Fprintf(sb, format, a...)
}
ur := false ur := false
if len(isRaw) != 0 { if len(isRaw) != 0 {
ur = isRaw[0] ur = isRaw[0]
@ -301,12 +304,12 @@ func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r st
if reply != nil { if reply != nil {
replyElem := reply.(*message.ReplyElement) replyElem := reply.(*message.ReplyElement)
if ExtraReplyData { if ExtraReplyData {
sb.WriteString(fmt.Sprintf("[CQ:reply,id=%d,seq=%d,qq=%d,time=%d,text=%s]", write("[CQ:reply,id=%d,seq=%d,qq=%d,time=%d,text=%s]",
toGlobalID(id, replyElem.ReplySeq), toGlobalID(id, replyElem.ReplySeq),
replyElem.ReplySeq, replyElem.Sender, replyElem.Time, replyElem.ReplySeq, replyElem.Sender, replyElem.Time,
CQCodeEscapeValue(ToStringMessage(replyElem.Elements, id)))) CQCodeEscapeValue(ToStringMessage(replyElem.Elements, id)))
} else { } else {
sb.WriteString(fmt.Sprintf("[CQ:reply,id=%d]", toGlobalID(id, replyElem.ReplySeq))) write("[CQ:reply,id=%d]", toGlobalID(id, replyElem.ReplySeq))
} }
} }
for i, elem := range e { for i, elem := range e {
@ -322,45 +325,45 @@ func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r st
sb.WriteString(CQCodeEscapeText(o.Content)) sb.WriteString(CQCodeEscapeText(o.Content))
case *message.AtElement: case *message.AtElement:
if o.Target == 0 { if o.Target == 0 {
sb.WriteString("[CQ:at,qq=all]") write("[CQ:at,qq=all]")
continue continue
} }
sb.WriteString(fmt.Sprintf("[CQ:at,qq=%d]", o.Target)) write("[CQ:at,qq=%d]", o.Target)
case *message.RedBagElement: case *message.RedBagElement:
sb.WriteString(fmt.Sprintf("[CQ:redbag,title=%s]", o.Title)) write("[CQ:redbag,title=%s]", o.Title)
case *message.ForwardElement: case *message.ForwardElement:
sb.WriteString(fmt.Sprintf("[CQ:forward,id=%s]", o.ResId)) write("[CQ:forward,id=%s]", o.ResId)
case *message.FaceElement: case *message.FaceElement:
sb.WriteString(fmt.Sprintf(`[CQ:face,id=%d]`, o.Index)) write(`[CQ:face,id=%d]`, o.Index)
case *message.VoiceElement: case *message.VoiceElement:
if ur { if ur {
sb.WriteString(fmt.Sprintf(`[CQ:record,file=%s]`, o.Name)) write(`[CQ:record,file=%s]`, o.Name)
} else { } else {
sb.WriteString(fmt.Sprintf(`[CQ:record,file=%s,url=%s]`, o.Name, CQCodeEscapeValue(o.Url))) write(`[CQ:record,file=%s,url=%s]`, o.Name, CQCodeEscapeValue(o.Url))
} }
case *message.ShortVideoElement: case *message.ShortVideoElement:
if ur { if ur {
sb.WriteString(fmt.Sprintf(`[CQ:video,file=%s]`, o.Name)) write(`[CQ:video,file=%s]`, o.Name)
} else { } else {
sb.WriteString(fmt.Sprintf(`[CQ:video,file=%s,url=%s]`, o.Name, CQCodeEscapeValue(o.Url))) write(`[CQ:video,file=%s,url=%s]`, o.Name, CQCodeEscapeValue(o.Url))
} }
case *message.ImageElement: case *message.ImageElement:
if ur { if ur {
sb.WriteString(fmt.Sprintf(`[CQ:image,file=%s]`, o.Filename)) write(`[CQ:image,file=%s]`, o.Filename)
} else { } else {
sb.WriteString(fmt.Sprintf(`[CQ:image,file=%s,url=%s]`, o.Filename, CQCodeEscapeValue(o.Url))) write(`[CQ:image,file=%s,url=%s]`, o.Filename, CQCodeEscapeValue(o.Url))
} }
case *message.GroupImageElement: case *message.GroupImageElement:
if ur { if ur {
sb.WriteString(fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")) write("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
} else { } else {
sb.WriteString(fmt.Sprintf("[CQ:image,file=%s,url=%s]", hex.EncodeToString(o.Md5)+".image", CQCodeEscapeValue(o.Url))) write("[CQ:image,file=%s,url=%s]", hex.EncodeToString(o.Md5)+".image", CQCodeEscapeValue(o.Url))
} }
case *message.FriendImageElement: case *message.FriendImageElement:
if ur { if ur {
sb.WriteString(fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")) write("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
} else { } else {
sb.WriteString(fmt.Sprintf("[CQ:image,file=%s,url=%s]", hex.EncodeToString(o.Md5)+".image", CQCodeEscapeValue(o.Url))) write("[CQ:image,file=%s,url=%s]", hex.EncodeToString(o.Md5)+".image", CQCodeEscapeValue(o.Url))
} }
case *message.GroupFlashImgElement: case *message.GroupFlashImgElement:
return fmt.Sprintf("[CQ:image,type=flash,file=%s]", o.Filename) return fmt.Sprintf("[CQ:image,type=flash,file=%s]", o.Filename)
@ -368,12 +371,12 @@ func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r st
return fmt.Sprintf("[CQ:image,type=flash,file=%s]", o.Filename) return fmt.Sprintf("[CQ:image,type=flash,file=%s]", o.Filename)
case *message.ServiceElement: case *message.ServiceElement:
if isOk := strings.Contains(o.Content, "<?xml"); isOk { if isOk := strings.Contains(o.Content, "<?xml"); isOk {
sb.WriteString(fmt.Sprintf(`[CQ:xml,data=%s,resid=%d]`, CQCodeEscapeValue(o.Content), o.Id)) write(`[CQ:xml,data=%s,resid=%d]`, CQCodeEscapeValue(o.Content), o.Id)
} else { } else {
sb.WriteString(fmt.Sprintf(`[CQ:json,data=%s,resid=%d]`, CQCodeEscapeValue(o.Content), o.Id)) write(`[CQ:json,data=%s,resid=%d]`, CQCodeEscapeValue(o.Content), o.Id)
} }
case *message.LightAppElement: case *message.LightAppElement:
sb.WriteString(fmt.Sprintf(`[CQ:json,data=%s]`, CQCodeEscapeValue(o.Content))) write(`[CQ:json,data=%s]`, CQCodeEscapeValue(o.Content))
} }
} }
r = sb.String() // 内部已拷贝 r = sb.String() // 内部已拷贝