diff --git a/coolq/bot.go b/coolq/bot.go index ba120bd..979bfa3 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -135,6 +135,7 @@ func (bot *CQBot) UploadLocalImageAsPrivate(userId int64, img *LocalImageElement if err != nil { return nil, err } + defer f.Close() return bot.Client.UploadPrivateImage(userId, f) } diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 0475e01..6e3023f 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -810,7 +810,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf _, err = v.video.Read(header) if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // ftyp _, _ = v.video.Seek(0, io.SeekStart) - hash, _ := utils.GetMd5AndLength(v.video) + hash, _ := utils.ComputeMd5AndLength(v.video) cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".mp4") if global.PathExists(cacheFile) { goto ok diff --git a/global/net.go b/global/net.go index 715b1a0..7bdf83f 100644 --- a/global/net.go +++ b/global/net.go @@ -23,7 +23,7 @@ import ( var ( client = &http.Client{ - Timeout: time.Second * 30, + Timeout: time.Second * 120, Transport: &http.Transport{ Proxy: func(request *http.Request) (u *url.URL, e error) { if Proxy == "" { @@ -47,6 +47,8 @@ var ( Proxy string ErrOverSize = errors.New("oversize") + + UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66" ) func GetBytes(url string) ([]byte, error) { @@ -54,7 +56,7 @@ func GetBytes(url string) ([]byte, error) { if err != nil { return nil, err } - req.Header["User-Agent"] = []string{"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.61"} + req.Header["User-Agent"] = []string{UserAgent} resp, err := client.Do(req) if err != nil { return nil, err @@ -74,7 +76,7 @@ func GetBytes(url string) ([]byte, error) { return body, nil } -func DownloadFile(url, path string, limit int64) error { +func DownloadFile(url, path string, limit int64, headers map[string]string) error { file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { return err @@ -84,6 +86,14 @@ func DownloadFile(url, path string, limit int64) error { if err != nil { return err } + if headers != nil { + for k, v := range headers { + req.Header.Set(k, v) + } + } + if _, ok := headers["User-Agent"]; ok { + req.Header["User-Agent"] = []string{UserAgent} + } resp, err := client.Do(req) if err != nil { return err @@ -101,7 +111,7 @@ func DownloadFile(url, path string, limit int64) error { func DownloadFileMultiThreading(url, path string, limit int64, threadCount int, headers map[string]string) error { if threadCount < 2 { - return DownloadFile(url, path, limit) + return DownloadFile(url, path, limit, headers) } type BlockMetaData struct { BeginOffset int64 @@ -133,6 +143,9 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int, req.Header.Set(k, v) } } + if _, ok := headers["User-Agent"]; ok { + req.Header["User-Agent"] = []string{UserAgent} + } req.Header.Set("range", "bytes=0-") resp, err := client.Do(req) if err != nil { @@ -194,6 +207,9 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int, req.Header.Set(k, v) } } + if _, ok := headers["User-Agent"]; ok { + req.Header["User-Agent"] = []string{UserAgent} + } req.Header.Set("range", "bytes="+strconv.FormatInt(block.BeginOffset, 10)+"-"+strconv.FormatInt(block.EndOffset, 10)) resp, err := client.Do(req) if err != nil { diff --git a/go.mod b/go.mod index 596999c..edf8397 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp go 1.15 require ( - github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f + github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606 github.com/dustin/go-humanize v1.0.0 github.com/gin-contrib/pprof v1.3.0 github.com/gin-gonic/gin v1.6.3 diff --git a/go.sum b/go.sum index d70f8d8..fc51ca3 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f h1:I+rP4wxfLXZw6UpYCeNXWTItmeO4FPw1ZUrRjTVbAME= -github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo= +github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606 h1:SD8GLZcVmgbvYiojJhv698AJNVB1YHqx2QI63Qz4zHo= +github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=