diff --git a/go.mod b/go.mod index afb3548..3cf9250 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,13 @@ require github.com/BurntSushi/toml v1.3.2 require ( github.com/goccy/go-json v0.10.2 github.com/mattn/go-sqlite3 v1.14.22 - github.com/parnurzeal/gorequest v0.3.0 ) require ( github.com/andybalholm/cascadia v1.3.2 // indirect github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect @@ -21,19 +21,33 @@ require ( github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.17.8 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/onsi/ginkgo/v2 v2.16.0 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/quic-go v0.41.0 // indirect + github.com/refraction-networking/utls v1.6.3 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect + go.uber.org/mock v0.4.0 // indirect golang.org/x/arch v0.8.0 // indirect golang.org/x/crypto v0.24.0 // indirect + golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect + golang.org/x/mod v0.17.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -41,12 +55,9 @@ require ( require ( github.com/PuerkitoBio/goquery v1.9.2 github.com/andybalholm/brotli v1.1.0 - github.com/elazarl/goproxy v0.0.0-20240618083138-03be62527ccb // indirect github.com/gin-gonic/gin v1.10.0 - github.com/moul/http2curl v1.0.0 // indirect - github.com/pkg/errors v0.9.1 // indirect + github.com/imroc/req/v3 v3.44.0 github.com/sashabaranov/go-openai v1.29.0 github.com/sirupsen/logrus v1.9.3 - github.com/smartystreets/goconvey v1.8.1 // indirect golang.org/x/net v0.26.0 // indirect ) diff --git a/go.sum b/go.sum index c1ba61f..20f48d4 100644 --- a/go.sum +++ b/go.sum @@ -10,22 +10,24 @@ github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elazarl/goproxy v0.0.0-20240618083138-03be62527ccb h1:2SoxRauy2IqekRMggrQk3yNI5X6omSnk6ugVbFywwXs= -github.com/elazarl/goproxy v0.0.0-20240618083138-03be62527ccb/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -34,21 +36,36 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= -github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= +github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q= +github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/imroc/req/v3 v3.44.0 h1:JBrxoN5DykYvkeEZx3dski8/A+WVz9HD147cwEeyFlM= +github.com/imroc/req/v3 v3.44.0/go.mod h1:6cQ91w7qPn+bYjcWnA1S/LmTh6z3cz8Oa9qdwm7gS8w= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -60,30 +77,33 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/parnurzeal/gorequest v0.3.0 h1:SoFyqCDC9COr1xuS6VA8fC8RU7XyrJZN2ona1kEX7FI= -github.com/parnurzeal/gorequest v0.3.0/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE= +github.com/onsi/ginkgo/v2 v2.16.0 h1:7q1w9frJDzninhXxjZd+Y/x54XNjG/UlRLIYPZafsPM= +github.com/onsi/ginkgo/v2 v2.16.0/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= +github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k= +github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA= +github.com/refraction-networking/utls v1.6.3 h1:MFOfRN35sSx6K5AZNIoESsBuBxS2LCgRilRIdHb6fDc= +github.com/refraction-networking/utls v1.6.3/go.mod h1:yil9+7qSl+gBwJqztoQseO6Pr3h62pQoY1lXiNR/FPs= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/sashabaranov/go-openai v1.29.0 h1:eBH6LSjtX4md5ImDCX8hNhHQvaRf22zujiERoQpsvLo= github.com/sashabaranov/go-openai v1.29.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smarty/assertions v1.15.0 h1:cR//PqUBUiQRakZWqBiFFQ9wb8emQGDb0HeGdqGByCY= -github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec= -github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY= -github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -96,6 +116,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2 github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= @@ -103,8 +125,12 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -115,6 +141,8 @@ golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -141,13 +169,14 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/test/test.go b/test/test.go index 7859a57..f7b7da9 100644 --- a/test/test.go +++ b/test/test.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/parnurzeal/gorequest" + "github.com/imroc/req/v3" ) func main() { @@ -60,8 +60,10 @@ func main() { // log.Fatal(err) // } url := "http://" + cfg["APIURL"].(string) - request := gorequest.New() - _, _, err := request.Post(url).Send(message).End() + client := req.C() + _, err := client.R(). + SetBodyJsonMarshal(message). + Post(url) if err != nil { fmt.Println("Error:", err) } diff --git a/workers/ai.go b/workers/ai.go index 3d329e3..57a54c2 100644 --- a/workers/ai.go +++ b/workers/ai.go @@ -180,11 +180,15 @@ func (a *AI) GetMsg() string { func stripMarkdown(text string) string { - println("before:", text) + // println("before:", text) // 移除代码块,但保留代码内容 - re := regexp.MustCompile("(?s)```.*?```") + re := regexp.MustCompile("(?s)```(?:\\w+\\s*\n)?(.*?)```") text = re.ReplaceAllStringFunc(text, func(match string) string { - return strings.TrimPrefix(strings.TrimSuffix(match, "```"), "```") + submatches := re.FindStringSubmatch(match) + if len(submatches) > 1 { + return strings.TrimSpace(submatches[1]) + } + return match }) // 移除行内代码 @@ -226,7 +230,7 @@ func stripMarkdown(text string) string { // 移除多余的空行 re = regexp.MustCompile(`\n{3,}`) text = re.ReplaceAllString(text, "\n\n") - println("after:", text) + // println("after:", text) return strings.TrimSpace(text) } diff --git a/workers/core.go b/workers/core.go index ccff9de..0f1e10a 100644 --- a/workers/core.go +++ b/workers/core.go @@ -1,11 +1,10 @@ package workers import ( - "encoding/json" "fmt" "go-bot/config" - "github.com/parnurzeal/gorequest" + "github.com/imroc/req/v3" ) type Worker interface { @@ -123,20 +122,18 @@ func (s *StdAns) GetHisMsg(id string) (string, string, string) { } url := cfg["POSTURL"].(string) + "/get_msg?message_id=" + id - request := gorequest.New() - resp, body, errs := request.Post(url).End() - if len(errs) > 0 { - - fmt.Println("Error sending request:", errs) - return "", "", "" - } - defer resp.Body.Close() - data := make(map[string]interface{}) - err := json.Unmarshal([]byte(body), &data) + var data map[string]interface{} + cli := req.C() + resp, err := cli.R(). + SetSuccessResult(&data). + Get(url) if err != nil { - fmt.Println("解析JSON失败:", err) + fmt.Println("Error sending request:", err) return "", "", "" } + + defer resp.Body.Close() + if data["status"] == "ok" { message := data["data"].(map[string]interface{})["message"].([]interface{})[0].(map[string]interface{})["data"].(map[string]interface{}) @@ -153,34 +150,24 @@ func (s *StdAns) SendMsg(msg string) bool { if msg == "-1" { return false } - requestBody, err := json.Marshal(map[string]interface{}{ - // "action": "send_msg", - // "params": map[string]interface{}{ - "group_id": s.GID, - "message": msg, - // }, - }) - if err != nil { - fmt.Println("Error marshaling JSON:", err) - return false - } - _, err = json.MarshalIndent(requestBody, "", " ") - if err != nil { - fmt.Println("Error marshaling JSON:", err) - return false - } - // fmt.Println(string(re)) url := cfg["POSTURL"].(string) + "/send_msg" // println("core:", url) // fmt.Println("请求地址:", url) // fmt.Println("响应信息:\n", msg) - request := gorequest.New() - resp, _, errs := request.Post(url). - Set("Content-Type", "application/json"). - Send(string(requestBody)).End() - if len(errs) > 0 { + client := req.C() + resp, err := client.R(). + SetHeader("Content-Type", "application/json"). + SetBodyJsonMarshal(map[string]interface{}{ + // "action": "send_msg", + // "params": map[string]interface{}{ + "group_id": s.GID, + "message": msg, + // }, + }). + Post(url) + if err != nil { fmt.Println("Error sending request:", err) return false } @@ -196,20 +183,18 @@ func (s *StdAns) GetImage(file string) string { } url := cfg["POSTURL"].(string) + "/get_image?file=" + file - request := gorequest.New() - resp, body, errs := request.Post(url).End() - if len(errs) > 0 { + client := req.C() + var data map[string]interface{} + resp, err := client.R(). + SetSuccessResult(&data). + Get(url) + if err != nil { - fmt.Println("Error sending request:", errs) + fmt.Println("Error sending request:", err) return "" } defer resp.Body.Close() - data := make(map[string]interface{}) - err := json.Unmarshal([]byte(body), &data) - if err != nil { - fmt.Println("解析JSON失败:", err) - return "" - } + // fmt.Println("url:", url) path, ok := data["data"].(map[string]interface{})["file"].(string) if !ok { diff --git a/workers/hhsh.go b/workers/hhsh.go index 5b0ac05..eeb2371 100644 --- a/workers/hhsh.go +++ b/workers/hhsh.go @@ -2,11 +2,10 @@ package workers import ( "fmt" - "io" - "net/http" "strings" + "time" - "github.com/goccy/go-json" + "github.com/imroc/req/v3" ) func init() { @@ -34,23 +33,24 @@ func (a *Hhsh) GetMsg() string { url := "https://api.beiyu.vip/api/hhsh?str=" + parms[1] // 输出请求地址 + // fmt.Println("url:", url) - req, err := http.Get(url) + + var data map[string]interface{} + + client := req.C().SetTimeout(time.Second * 10) + + resp, err := client.R(). + SetSuccessResult(&data). + Get(url) if err != nil { return "接口异常!" } - defer req.Body.Close() - body, err := io.ReadAll(req.Body) - if err != nil { - return err.Error() - } - // fmt.Println("pkg body:", string(body)) + defer resp.Body.Close() + + fmt.Println("hhsh body:", resp.String()) // var pkg []Package - var data map[string]interface{} - err = json.Unmarshal(body, &data) - if err != nil { - return err.Error() - } + resultSlipe := data["data"].([]interface{}) fmt.Println("resultSlipe:", resultSlipe) if trans, ok := resultSlipe[0].(map[string]interface{})["trans"]; ok { diff --git a/workers/httpcat.go b/workers/httpcat.go index cb818bc..6b8593f 100644 --- a/workers/httpcat.go +++ b/workers/httpcat.go @@ -4,12 +4,12 @@ import ( "compress/gzip" "fmt" "io" - "log" + "time" "github.com/PuerkitoBio/goquery" "github.com/andybalholm/brotli" - "github.com/parnurzeal/gorequest" + "github.com/imroc/req/v3" ) func init() { @@ -30,11 +30,11 @@ func (a *HttpCat) GetMsg() string { } baseUrl := "https://http.cat/" picUrl := baseUrl + "images/" + a.Parms[1] + ".jpg" - // 使用 gorequest 发起 HEAD 请求检查资源是否存在 - request := gorequest.New() - resp, _, errs := request.Head(picUrl).End() - if len(errs) > 0 { - return "请求错误: " + fmt.Sprint(errs) + // 使用 req 发起 HEAD 请求检查资源是否存在 + client := req.C().SetTimeout(5 * time.Second) + resp, err := client.R().Head(picUrl) + if err != nil { + return "请求错误: " + err.Error() } // 判断资源是否存在 @@ -43,34 +43,34 @@ func (a *HttpCat) GetMsg() string { } respContent := "[CQ:image,file=" + picUrl + "]" docUrl := "https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/" + a.Parms[1] - res, _, errs := request.Get(docUrl). - Set("Host", "developer.mozilla.org"). - Set("User-Agent", "Apifox/1.0.0 (https://apifox.com)"). - Set("Accept", "*/*"). - Set("Content-Type", "text/plain"). - End() - if len(errs) > 0 { - log.Println("请求错误: " + fmt.Sprint(errs)) + resp, err = client.R(). + SetHeader("Host", "developer.mozilla.org"). + SetHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)"). + SetHeader("Accept", "*/*"). + SetHeader("Content-Type", "text/plain"). + Get(docUrl) + if err != nil { + return "请求错误: " + err.Error() } - if res != nil { - defer res.Body.Close() + if resp != nil { + defer resp.Body.Close() } - if res != nil && res.StatusCode == 200 { + if resp != nil && resp.StatusCode == 200 { // 解压缩响应体 var reader io.ReadCloser - switch res.Header.Get("Content-Encoding") { + switch resp.Header.Get("Content-Encoding") { case "br": - reader = io.NopCloser(brotli.NewReader(res.Body)) + reader = io.NopCloser(brotli.NewReader(resp.Body)) case "gzip": var err error - reader, err = gzip.NewReader(res.Body) + reader, err = gzip.NewReader(resp.Body) if err != nil { fmt.Println("gzip 解压错误:", err) return respContent } defer reader.Close() default: - reader = res.Body + reader = resp.Body } // 使用 goquery 解析 HTML diff --git a/workers/httpdog.go b/workers/httpdog.go index df5fd9a..8a90372 100644 --- a/workers/httpdog.go +++ b/workers/httpdog.go @@ -4,12 +4,12 @@ import ( "compress/gzip" "fmt" "io" - "log" + "time" "github.com/PuerkitoBio/goquery" "github.com/andybalholm/brotli" - "github.com/parnurzeal/gorequest" + "github.com/imroc/req/v3" ) func init() { @@ -30,11 +30,11 @@ func (a *HttpDog) GetMsg() string { } baseUrl := "https://http.dog/" picUrl := baseUrl + a.Parms[1] + ".jpg" - // 使用 gorequest 发起 HEAD 请求检查资源是否存在 - request := gorequest.New() - resp, _, errs := request.Head(picUrl).End() - if len(errs) > 0 { - return "请求错误: " + fmt.Sprint(errs) + // 使用 req 发起 HEAD 请求检查资源是否存在 + client := req.C().SetTimeout(time.Second * 5) + resp, err := client.R().Head(picUrl) + if err != nil { + return "请求错误: " + err.Error() } // 判断资源是否存在 @@ -43,34 +43,34 @@ func (a *HttpDog) GetMsg() string { } respContent := "[CQ:image,file=" + picUrl + "]" docUrl := "https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/" + a.Parms[1] - res, _, errs := request.Get(docUrl). - Set("Host", "developer.mozilla.org"). - Set("User-Agent", "Apifox/1.0.0 (https://apifox.com)"). - Set("Accept", "*/*"). - Set("Content-Type", "text/plain"). - End() - if len(errs) > 0 { - log.Println("请求错误: " + fmt.Sprint(errs)) + resp, err = client.R(). + SetHeader("Host", "developer.mozilla.org"). + SetHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)"). + SetHeader("Accept", "*/*"). + SetHeader("Content-Type", "text/plain"). + Get(docUrl) + if err != nil { + return "请求错误: " + err.Error() } - if res != nil { - defer res.Body.Close() + if resp != nil { + defer resp.Body.Close() } - if res != nil && res.StatusCode == 200 { + if resp != nil && resp.StatusCode == 200 { // 解压缩响应体 var reader io.ReadCloser - switch res.Header.Get("Content-Encoding") { + switch resp.Header.Get("Content-Encoding") { case "br": - reader = io.NopCloser(brotli.NewReader(res.Body)) + reader = io.NopCloser(brotli.NewReader(resp.Body)) case "gzip": var err error - reader, err = gzip.NewReader(res.Body) + reader, err = gzip.NewReader(resp.Body) if err != nil { fmt.Println("gzip 解压错误:", err) return respContent } defer reader.Close() default: - reader = res.Body + reader = resp.Body } // 使用 goquery 解析 HTML diff --git a/workers/ip.go b/workers/ip.go index 6f4ccc3..e17527b 100644 --- a/workers/ip.go +++ b/workers/ip.go @@ -1,15 +1,12 @@ package workers import ( - "bytes" "fmt" - "io" "net" - "net/http" "strings" "time" - "github.com/goccy/go-json" + "github.com/imroc/req/v3" ) func init() { @@ -30,8 +27,9 @@ func (a *Ip) GetMsg() string { } // 去除换行符 raw_msg := strings.TrimRight(a.RawMsg, "\n") - fmt.Println("raw_msg:", raw_msg) + // fmt.Println("raw_msg:", raw_msg) parms := strings.Fields(raw_msg) + client := req.C().SetTimeout(5 * time.Second) var ip string if net.ParseIP(parms[1]) != nil { ip = parms[1] @@ -40,65 +38,38 @@ func (a *Ip) GetMsg() string { data := map[string]string{ "url": parms[1], } - json_data, _ := json.Marshal(data) - req, _ := http.NewRequest("POST", url, bytes.NewBuffer(json_data)) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("x-api-key", "d84eae04-0654-4173-bc6a-c457c4fc3f4d") - - client := &http.Client{ - Timeout: 5 * time.Second, // 设置超时时间为5秒 - } - resp, err := client.Do(req) + var resp_data map[string]interface{} + _, err := client.R(). + SetSuccessResult(&resp_data). + SetBodyJsonMarshal(data). + SetHeader("Content-Type", "application/json"). + SetHeader("x-api-key", "d84eae04-0654-4173-bc6a-c457c4fc3f4d"). + Post(url) if err != nil { - fmt.Println("err:", err) - return "连接超时!" - } else { - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - println(string(body)) - if err != nil { - fmt.Println("err:", err) - - } else { - var resp_data map[string]interface{} - err := json.Unmarshal(body, &resp_data) - if err != nil { - return "DNS解析失败!" - } - ip = resp_data["data"].(map[string]interface{})["ip"].(string) - // print("ip: ", ip) - } + return "DNS解析失败!" } + if resp_data["data"] != nil { + ip = resp_data["data"].(map[string]interface{})["ip"].(string) + // print("ip: ", ip) + } + } url := "https://api.ip.sb/geoip/" + ip fmt.Println("url: ", url) - - req, err := http.NewRequest("GET", url, nil) - if err != nil { - fmt.Println("创建请求失败:", err) - } - req.Header.Set("User-Agent", "Mozilla/5.0") - resp, err := http.DefaultClient.Do(req) + var data map[string]interface{} + resp, err := client.R(). + SetSuccessResult(&data). + SetHeader("User-Agent", "Mozilla/5.0"). + Get(url) if err != nil { return "ip查询失败" } defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - return "ip查询失败" - } // fmt.Println("body: ", string(body)) - var data map[string]interface{} - err = json.Unmarshal(body, &data) - if err != nil { - fmt.Println("data: ", data) - - return err.Error() - } // 输出响应数据 fmt.Println("data: ", data) if _, ok := data["code"].(float64); ok { diff --git a/workers/lsp.go b/workers/lsp.go index 9bcfde6..f2f3c40 100644 --- a/workers/lsp.go +++ b/workers/lsp.go @@ -22,7 +22,6 @@ type Lsp struct { } func (a *Lsp) GetMsg() string { - a.AllowGroup = append(a.AllowGroup, []string{"313047773"}) url := "https://api.lolicon.app/setu/v2?r18=0&size=small" resp, err := http.Get(url) if err != nil { diff --git a/workers/mner.go b/workers/mner.go index ca62dc4..b975142 100644 --- a/workers/mner.go +++ b/workers/mner.go @@ -1,12 +1,12 @@ package workers import ( - "encoding/json" "fmt" "sort" "strconv" + "time" - "github.com/parnurzeal/gorequest" + "github.com/imroc/req/v3" ) func init() { @@ -26,17 +26,17 @@ func (a *Mner) GetMsg() string { return "请输入AUR的维护者 如:/mner user 查询 user 用户维护的包" } user := a.Parms[1] + client := req.C().SetTimeout(time.Second * 10) url := "https://aur.archlinux.org/rpc/v5/search/" + user + "?by=maintainer" - request := gorequest.New() - _, body, errs := request.Get(url).End() - if len(errs) > 0 { - return "服务器网络错误!" - } var result map[string]interface{} - err := json.Unmarshal([]byte(body), &result) + resp, err := client.R(). + SetSuccessResult(&result). + Get(url) if err != nil { - return err.Error() + return "网络错误!" } + defer resp.Body.Close() + results := result["results"].([]interface{}) if len(results) == 0 { return "未找到该维护者维护的包" diff --git a/workers/pkg.go b/workers/pkg.go index cf7ddb8..c2c4e8c 100644 --- a/workers/pkg.go +++ b/workers/pkg.go @@ -5,8 +5,7 @@ import ( "strings" "time" - "github.com/goccy/go-json" - "github.com/parnurzeal/gorequest" + "github.com/imroc/req/v3" ) func init() { @@ -30,7 +29,7 @@ func (a *Pkg) GetMsg() string { raw_msg := strings.TrimRight(a.RawMsg, "\n") raw_msg = strings.TrimRight(raw_msg, "\r") - fmt.Println("raw_msg:", raw_msg) + // fmt.Println("raw_msg:", raw_msg) parms := strings.Split(raw_msg, " ") url := "https://archlinux.org/packages/search/json/?name=" + parms[1] @@ -39,36 +38,34 @@ func (a *Pkg) GetMsg() string { } // 输出请求地址 // fmt.Println("pkg url:", url) - request := gorequest.New() - _, body, errs := request.Get(url).End() - if len(errs) > 0 { + + client := req.C().SetTimeout(time.Second * 10) + + var pkg map[string]interface{} + resp, err := client.R(). + SetSuccessResult(&pkg). + Get(url) + if err != nil { return "服务器网络错误!" } + defer resp.Body.Close() + // fmt.Println("pkg body:", string(body)) // var pkg []Package - var pkg map[string]interface{} - err := json.Unmarshal([]byte(body), &pkg) - if err != nil { - return err.Error() - } + // fmt.Println("pkg:", pkg) resultSlipe := pkg["results"].([]interface{}) if len(resultSlipe) == 0 { url := "https://aur.archlinux.org/rpc/v5/suggest/" + parms[1] - _, body, errs := request.Get(url).End() - if len(errs) > 0 { - fmt.Println(errs) - } - - // fmt.Println("aur suggest url:", url) - // fmt.Println(string(re)) - var suggestions []string - err := json.Unmarshal([]byte(body), &suggestions) + resp, err := client.R(). + SetSuccessResult(&suggestions).Get(url) if err != nil { - fmt.Println(err) + return "服务器网络错误!" } + defer resp.Body.Close() + // println(len(suggestions)) if len(suggestions) == 0 { return "没有找到相关软件" @@ -77,19 +74,12 @@ func (a *Pkg) GetMsg() string { var searchResult map[string]interface{} if len(suggestions) == 1 || suggestions[0] == parms[1] { searchUrl := "https://aur.archlinux.org/rpc/v5/info/" + suggestions[0] - _, body, errs = request.Get(searchUrl).End() - - if len(errs) > 0 { - fmt.Println("searchUrl err:", errs) - + resp, err := client.R().SetSuccessResult(&searchMap).Get(searchUrl) + if err != nil { return "服务器网络错误!" } + defer resp.Body.Close() - err = json.Unmarshal([]byte(body), &searchMap) - - if err != nil { - fmt.Println("解析失败:", err) - } searchResult = searchMap["results"].([]interface{})[0].(map[string]interface{}) } else { @@ -98,15 +88,11 @@ func (a *Pkg) GetMsg() string { var searchResults []map[string]interface{} for _, suggestion := range suggestions { searchUrl := "https://aur.archlinux.org/rpc/v5/info/" + suggestion - _, body, errs = request.Get(searchUrl).End() - if len(errs) > 0 { - fmt.Println("searchUrl err:", errs) - } - - err = json.Unmarshal([]byte(body), &searchMap) + resp, err := client.R().SetSuccessResult(&searchMap).Get(searchUrl) if err != nil { - fmt.Println(err) + return "服务器网络错误!" } + defer resp.Body.Close() results := searchMap["results"].([]interface{}) searchResults = append(searchResults, results[0].(map[string]interface{}))