From dd302a50a637ab0c2ffbe4c5a35a803432e1f998 Mon Sep 17 00:00:00 2001 From: cdle <798731886@qq.com> Date: Sat, 23 Oct 2021 14:04:46 +0800 Subject: [PATCH] update --- im/tg/tg.go | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/im/tg/tg.go b/im/tg/tg.go index 958bcca..b57be43 100644 --- a/im/tg/tg.go +++ b/im/tg/tg.go @@ -1,6 +1,8 @@ package tg import ( + "bytes" + "encoding/base64" "fmt" "net/http" "net/url" @@ -264,6 +266,7 @@ func (sender *Sender) Reply(msgs ...interface{}) (int, error) { case []byte: rt, err = b.Send(r, string(msg.([]byte)), options...) case string: + message := msg.(string) if edit != nil && sender.reply != nil { if *edit == 0 { if sender.reply != nil { @@ -279,12 +282,44 @@ func (sender *Sender) Reply(msgs ...interface{}) (int, error) { } return sender.reply.ID, nil } + paths := []string{} + for _, v := range regexp.MustCompile(`\[CQ:image,file=([^\[\]]+)\]`).FindAllStringSubmatch(message, -1) { + paths = append(paths, "data/images/"+v[1]) + message = strings.Replace(message, fmt.Sprintf(`[CQ:image,file=%s]`, v[1]), "", -1) + } + if len(paths) > 0 { + is := []tb.InputMedia{} + for index, path := range paths { + if strings.Contains(message, "base64") { + decodeBytes, _ := base64.StdEncoding.DecodeString(path) + i := &tb.Photo{File: tb.FromReader(bytes.NewReader(decodeBytes))} + if index == 0 { + i.Caption = message + } + is = append(is, i) + } else { + data, err := os.ReadFile(path) + if err == nil { + url := regexp.MustCompile("(https.*)").FindString(string(data)) + if url != "" { + i := &tb.Photo{File: tb.FromURL(url)} + if index == 0 { + i.Caption = message + } + is = append(is, i) + } + } + } + } + b.SendAlbum(r, is) + } else { + rt, err = b.Send(r, message, options...) + } if replace != nil { b.Delete(&tb.Message{ ID: int(*edit), }) } - rt, err = b.Send(r, msg.(string), options...) case core.ImagePath: f, err := os.Open(string(msg.(core.ImagePath))) if err != nil {