Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 满足合并需要 #1094

Closed
wants to merge 6 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 47 additions & 58 deletions plugin/tarot/tarot.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,15 @@ import (
fcext "github.com/FloatTech/floatbox/ctxext"
"github.com/FloatTech/floatbox/file"
"github.com/FloatTech/floatbox/process"
"github.com/FloatTech/floatbox/web"
ctrl "github.com/FloatTech/zbpctrl"
"github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/ctxext"
"github.com/FloatTech/zbputils/img/pool"
"github.com/FloatTech/zbputils/img/text"
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)

const bed = "https://gitcode.net/shudorcl/zbp-tarot/-/raw/master/"

type cardInfo struct {
Description string `json:"description"`
ReverseDescription string `json:"reverseDescription"`
Expand Down Expand Up @@ -61,11 +57,38 @@ func init() {
PublicDataFolder: "Tarot",
}).ApplySingle(ctxext.DefaultSingle)

cache := engine.DataFolder() + "cache"
_ = os.RemoveAll(cache)
err := os.MkdirAll(cache, 0755)
if err != nil {
panic(err)
logrus.Infof("[tarot]uri: %s", engine.DataFolder())

MajorArcana := engine.DataFolder() + "MajorArcana"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不必检测是否存在此文件夹,MkdirAll在文件夹存在时不会报错。直接每次执行即可。对于报错,直接panic(err),return没用。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

检测了又能咋样?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Github源在国内能拉取到的地方能有多少,大部分地区都是timeout,raw.githubusercontent.com的可访问性几乎为0,只有github.io的可访问性比较高,github.com能不能访问纯属看当地sni阻断程度,绝大部分时间都是无法访问

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

有没有一种可能,就是说我有办法绕过去,并且已经在zbp实装了。只要DNS正确就能下载,多的就不说了,你自己试试不就知道了。

if _, err := os.Stat(MajorArcana); os.IsNotExist(err) {
err := os.MkdirAll(MajorArcana, 0755)
if err != nil {
return
}
}

MinorArcana := engine.DataFolder() + "MinorArcana"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

变量名全部以小写开头。

if _, err := os.Stat(MinorArcana); os.IsNotExist(err) {
err := os.MkdirAll(MinorArcana, 0755)
if err != nil {
return
}
}

ReverseMajorArcana := engine.DataFolder() + "Reverse/MajorArcana"
if _, err := os.Stat(ReverseMajorArcana); os.IsNotExist(err) {
err := os.MkdirAll(ReverseMajorArcana, 0755)
if err != nil {
return
}
}

ReverseMinorArcana := engine.DataFolder() + "Reverse/MinorArcana"
if _, err := os.Stat(ReverseMinorArcana); os.IsNotExist(err) {
err := os.MkdirAll(ReverseMinorArcana, 0755)
if err != nil {
return
}
}

getTarot := fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
Expand Down Expand Up @@ -140,30 +163,14 @@ func init() {
if p == 1 {
description = card.ReverseDescription
}
imgurl := bed + reverse[p] + card.ImgURL
imgname := ""
if p == 1 {
imgname = reverse[p][:len(reverse[p])-1] + name
} else {
imgname = name
}
imgpath := cache + "/" + imgname + ".png"
err := pool.SendImageFromPool(imgpath, func(pth string) error {
data, err := web.RequestDataWith(web.NewTLS12Client(), imgurl, "GET", "gitcode.net", web.RandUA(), nil)
if err != nil {
return err
}
f, err := os.Create(pth)
if err != nil {
return err
}
defer f.Close()
return os.WriteFile(f.Name(), data, 0755)
}, ctxext.Send(ctx))
imgurl := reverse[p] + card.ImgURL
_, err := engine.GetLazyData(imgurl, true) // 获取数据和错误
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

直接使用返回的data, 发 base64,即message.ImageBytes(data)

if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
logrus.Infof("[tarot]下载数据错误: %s", err)
return
}
imgpath := "/" + engine.DataFolder() + "/" + imgurl
ctx.SendChain(message.Image("file:///" + file.BOTPATH + imgpath))
process.SleepAbout1sTo2s()
ctx.SendChain(message.Text(reasons[rand.Intn(len(reasons))], position[p], "的『", name, "』\n其释义为: ", description))
return
Expand All @@ -185,15 +192,11 @@ func init() {
if p == 1 {
description = card.ReverseDescription
}
imgurl := bed + reverse[p] + card.ImgURL
imgurl := reverse[p] + card.ImgURL
tarotmsg := message.Message{message.Text(reasons[rand.Intn(len(reasons))], position[p], "的『", name, "』\n")}
var imgmsg message.Segment
var err error
if p == 1 {
imgmsg, err = poolimg(imgurl, reverse[p][:len(reverse[p])-1]+name, cache)
} else {
imgmsg, err = poolimg(imgurl, name, cache)
}
imgmsg, err = poolimg(engine, imgurl, engine.DataFolder())
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
Expand All @@ -211,9 +214,9 @@ func init() {
match := ctx.State["regex_matched"].([]string)[1]
info, ok := infoMap[match]
if ok {
imgurl := bed + info.ImgURL
imgurl := info.ImgURL
var tarotmsg message.Message
imgmsg, err := poolimg(imgurl, match, cache)
imgmsg, err := poolimg(engine, imgurl, engine.DataFolder())
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
Expand Down Expand Up @@ -280,14 +283,10 @@ func init() {
description = card.ReverseDescription
}
var tarotmsg message.Message
imgurl := bed + reverse[p] + card.ImgURL
imgurl := reverse[p] + card.ImgURL
var imgmsg message.Segment
var err error
if p == 1 {
imgmsg, err = poolimg(imgurl, reverse[p][:len(reverse[p])-1]+name, cache)
} else {
imgmsg, err = poolimg(imgurl, name, cache)
}
imgmsg, err = poolimg(engine, imgurl, engine.DataFolder())
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
Expand Down Expand Up @@ -319,23 +318,13 @@ func init() {
})
}

func poolimg(imgurl, imgname, cache string) (msg message.Segment, err error) {
imgfile := cache + "/" + imgname + ".png"
func poolimg(engine *control.Engine, imgurl, cache string) (msg message.Segment, err error) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

可直接删去pool/cache。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个函数并无它名字的意义,它只是为了减少代码的修改量而存在,并且对于imgfile的拼凑这个提交的最新的代码为:
imgfile := cache + "/" + imgurl aimgfile := file.BOTPATH + "/" + imgfile,它是为了拼凑出一个合适的路径

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

那你应当把函数名和入参名都改了,该改的时候不该说减少修改量,反而影响之后看的人阅读代码。

imgfile := cache + "/" + imgurl
aimgfile := file.BOTPATH + "/" + imgfile
if file.IsNotExist(aimgfile) {
var data []byte
data, err = web.RequestDataWith(web.NewTLS12Client(), imgurl, "GET", "gitcode.net", web.RandUA(), nil)
if err != nil {
return
}
var f *os.File
f, err = os.Create(imgfile)
if err != nil {
return
}
defer f.Close()
err = os.WriteFile(f.Name(), data, 0755)
_, err = engine.GetLazyData(imgurl, true) // 获取数据和错误
if err != nil {
logrus.Infof("[tarot]下载数据错误: %s", err)
return
}
}
Expand Down
Loading