From c99d09ea637fc4059eafc37fda98e19e8d2a1d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Sat, 7 Jan 2023 16:24:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +-- data | 2 +- go.mod | 12 ++-- go.sum | 24 ++++---- main.go | 1 - plugin/coser/coser.go | 48 ++++++++++----- plugin/epidemic/epidemic.go | 120 ------------------------------------ plugin/fortune/fortune.go | 4 +- plugin/heisi/heisi.go | 59 +++++++++++++----- 9 files changed, 97 insertions(+), 183 deletions(-) delete mode 100644 plugin/epidemic/epidemic.go diff --git a/README.md b/README.md index 38a79f36..3aa54fe5 100644 --- a/README.md +++ b/README.md @@ -669,14 +669,6 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] [emoji][emoji] - -
- 城市疫情查询 - - `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/epidemic"` - - - [x] xxx疫情 -
好友申请及群聊邀请事件处理 @@ -704,7 +696,7 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 运势 | 抽签 - - [x] 设置底图[车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师 赛马娘 东方归言录 奇异恩典 夏日口袋 ASoul] + - [x] 设置底图[车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师 赛马娘 东方归言录 奇异恩典 夏日口袋 ASoul Hololive]
diff --git a/data b/data index e8d06b15..00088d0e 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit e8d06b150b2cf84d9c7dc2f8a9f573da2b2290fd +Subproject commit 00088d0e74496fce52a48ac12540f1d849c44c56 diff --git a/go.mod b/go.mod index 1a0cb4c7..328a4f80 100644 --- a/go.mod +++ b/go.mod @@ -5,12 +5,12 @@ go 1.19 require ( github.com/Baidu-AIP/golang-sdk v1.1.1 github.com/Coloured-glaze/gg v1.3.4 - github.com/FloatTech/AnimeAPI v1.6.1-0.20221226052349-99c1398c6713 - github.com/FloatTech/floatbox v0.0.0-20221228150204-a2bededce74d + github.com/FloatTech/AnimeAPI v1.6.1-0.20230107074849-392b0b10b149 + github.com/FloatTech/floatbox v0.0.0-20230107061309-dcd5c0012dd3 github.com/FloatTech/sqlite v1.5.7 github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b github.com/FloatTech/zbpctrl v1.5.3-0.20221210051848-740ab7bd6ec3 - github.com/FloatTech/zbputils v1.6.1-0.20221230110225-f0786b77b297 + github.com/FloatTech/zbputils v1.6.1-0.20230107061700-dadcf8500e7a github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 github.com/antchfx/htmlquery v1.2.5 @@ -34,12 +34,12 @@ require ( github.com/wcharczuk/go-chart/v2 v2.1.0 github.com/wdvxdr1123/ZeroBot v1.6.6 gitlab.com/gomidi/midi/v2 v2.0.25 - golang.org/x/image v0.1.0 + golang.org/x/image v0.3.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - github.com/FloatTech/rendercard v0.0.2 // indirect + github.com/FloatTech/rendercard v0.0.3 // indirect github.com/antchfx/xpath v1.2.1 // indirect github.com/disintegration/imaging v1.6.2 // indirect github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 // indirect @@ -80,7 +80,7 @@ require ( golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/net v0.0.0-20221014081412-f15817d10f9b // indirect golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect golang.org/x/tools v0.1.12 // indirect modernc.org/libc v1.21.5 // indirect modernc.org/mathutil v1.5.0 // indirect diff --git a/go.sum b/go.sum index 15ed4c0a..0fc9113a 100644 --- a/go.sum +++ b/go.sum @@ -4,20 +4,20 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/Coloured-glaze/gg v1.3.4 h1:l31zIF/HaVwkzjrj+A56RGQoSKyKuR1IWtIrqXGFStI= github.com/Coloured-glaze/gg v1.3.4/go.mod h1:Ih5NLNNDHOy3RJbB0EPqGTreIzq/H02TGThIagh8HJg= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/FloatTech/AnimeAPI v1.6.1-0.20221226052349-99c1398c6713 h1:jK94NVITfIcekb6HuK6UQbPT4b/S3XlfG//DT2ERbqk= -github.com/FloatTech/AnimeAPI v1.6.1-0.20221226052349-99c1398c6713/go.mod h1:8wsdxt90jVHX67xFqArQpqs5kVsxOds0Cps2MyHkZtQ= -github.com/FloatTech/floatbox v0.0.0-20221228150204-a2bededce74d h1:nvkui8iKLsOC10Hpo/f/NSkFXdYDX0NqoCaanRQicgc= -github.com/FloatTech/floatbox v0.0.0-20221228150204-a2bededce74d/go.mod h1:e51vYUkDUw6dBJYTErXLHi8lt9frSOik9a6xdYRRt5w= -github.com/FloatTech/rendercard v0.0.2 h1:2SNPDXsOjxPpefxqA1xvIgXWNmeSEvjKEak24q7pEKY= -github.com/FloatTech/rendercard v0.0.2/go.mod h1:FwwKoWpv1fW7AZ1mwBVWF8GCH9mEqYYIE9LzdmozCZQ= +github.com/FloatTech/AnimeAPI v1.6.1-0.20230107074849-392b0b10b149 h1:luwPT3dGLRYLjRfLlz4Uo1r4Us7UkrCL9tz9cFUuuJs= +github.com/FloatTech/AnimeAPI v1.6.1-0.20230107074849-392b0b10b149/go.mod h1:Kg0LSMN9KjqbAGzcd4T6xvL/hvlnzlOU/nWJ63we3oo= +github.com/FloatTech/floatbox v0.0.0-20230107061309-dcd5c0012dd3 h1:LSuKljwLeoW/jFrIprWpD0yUT0YUTKqukK/fPrS5BGw= +github.com/FloatTech/floatbox v0.0.0-20230107061309-dcd5c0012dd3/go.mod h1:/k2zxRJtAJ17w9fSpc7xf2QjPDTUBmqhBsOGyHVyX0U= +github.com/FloatTech/rendercard v0.0.3 h1:eKOKlmotlDq/YbAcJKe0GMzBjGTsT5eSsyEfjT+hy10= +github.com/FloatTech/rendercard v0.0.3/go.mod h1:FwwKoWpv1fW7AZ1mwBVWF8GCH9mEqYYIE9LzdmozCZQ= github.com/FloatTech/sqlite v1.5.7 h1:Bvo4LSojcZ6dVtbHrkqvt6z4v8e+sj0G5PSUIvdawsk= github.com/FloatTech/sqlite v1.5.7/go.mod h1:zFbHzRfB+CJ+VidfjuVbrcin3DAz283F7hF1hIeHzpY= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJGLDNIdRX3BI546D3O7k7vrVueZw= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= github.com/FloatTech/zbpctrl v1.5.3-0.20221210051848-740ab7bd6ec3 h1:dxARTVta2i48OOYa0xMRzWTO0lr6bM4M6JmQWLkHdNE= github.com/FloatTech/zbpctrl v1.5.3-0.20221210051848-740ab7bd6ec3/go.mod h1:KFfMTzItP5usfnUYs7cFWjk89dzjtdO1eI+B1BVQNig= -github.com/FloatTech/zbputils v1.6.1-0.20221230110225-f0786b77b297 h1:fNzUbc/1d2fu3OwgyhJ8QBz4vPMiObRMP/UmmzLw1f8= -github.com/FloatTech/zbputils v1.6.1-0.20221230110225-f0786b77b297/go.mod h1:KBxpGdtIS2MweGAba0TrenOt2Nlddbsk3BaXHaAQ9Zk= +github.com/FloatTech/zbputils v1.6.1-0.20230107061700-dadcf8500e7a h1:nv3+ss6kID+nn1ZC5e3DJC59aHljeXPb0Tx0xMpbmQI= +github.com/FloatTech/zbputils v1.6.1-0.20230107061700-dadcf8500e7a/go.mod h1:cbIXoOF4IEBSUiI175cpfiC7XV70+TMQpbLGuTrRoLA= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA= github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w= @@ -214,8 +214,8 @@ golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMx golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200927104501-e162460cd6b5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk= -golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c= +golang.org/x/image v0.3.0 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg= +golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f h1:kgfVkAEEQXXQ0qc6dH7n6y37NAYmTFmz0YRwrRjgxKw= @@ -266,8 +266,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= diff --git a/main.go b/main.go index 866ab7fd..5024dcf8 100644 --- a/main.go +++ b/main.go @@ -81,7 +81,6 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/dress" // 女装 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/drift_bottle" // 漂流瓶 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/emojimix" // 合成emoji - _ "github.com/FloatTech/ZeroBot-Plugin/plugin/epidemic" // 城市疫情查询 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/event" // 好友申请群聊邀请事件处理 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/font" // 渲染任意文字到图片 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/fortune" // 运势 diff --git a/plugin/coser/coser.go b/plugin/coser/coser.go index 7c0fbe86..331b2967 100644 --- a/plugin/coser/coser.go +++ b/plugin/coser/coser.go @@ -2,7 +2,10 @@ package coser import ( - "regexp" + "errors" + "math/rand" + "os" + "time" "github.com/tidwall/gjson" @@ -10,6 +13,8 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" + "github.com/FloatTech/AnimeAPI/setu" + "github.com/FloatTech/floatbox/file" "github.com/FloatTech/floatbox/web" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/control" @@ -19,35 +24,44 @@ import ( var ( ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36" coserURL = "http://ovooa.com/API/cosplay/api.php" - datestr = regexp.MustCompile(`/\d{4}-\d{2}-\d{2}/`) ) func init() { + p, err := setu.NewPool(setu.DefaultPoolDir, + func(s string) (string, error) { + if s != "coser" { + return "", errors.New("invalid call") + } + typ := setu.DefaultPoolDir + "/" + "coser" + if file.IsNotExist(typ) { + err := os.MkdirAll(typ, 0755) + if err != nil { + return "", err + } + } + data, err := web.RequestDataWith(web.NewDefaultClient(), coserURL, "GET", "", ua) + if err != nil { + return "", err + } + arr := gjson.Get(helper.BytesToString(data), "data.data").Array() + pic := arr[rand.Intn(len(arr))] + return pic.String(), nil + }, web.GetData, time.Minute) + if err != nil { + panic(err) + } control.Register("coser", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "三次元coser", Help: "- coser", }).ApplySingle(ctxext.DefaultSingle).OnFullMatch("coser").SetBlock(true).Limit(ctxext.LimitByGroup). Handle(func(ctx *zero.Ctx) { - ctx.SendChain(message.Text("少女祈祷中......")) - data, err := web.RequestDataWith(web.NewDefaultClient(), coserURL, "GET", "", ua) + pic, err := p.Roll("coser") if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return } - text := gjson.Get(helper.BytesToString(data), "data.Title").String() - m := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Text(text))} - ds := "" - gjson.Get(helper.BytesToString(data), "data.data").ForEach(func(_, value gjson.Result) bool { - if ds == "" { - ds = datestr.FindString(value.String()) - } else if ds != datestr.FindString(value.String()) { - return false - } - m = append(m, ctxext.FakeSenderForwardNode(ctx, message.Image(value.String()))) - return true - }) - if id := ctx.Send(m).ID(); id == 0 { + if id := ctx.Send(message.Message{ctxext.FakeSenderForwardNode(ctx, message.Image(pic))}).ID(); id == 0 { ctx.SendChain(message.Text("ERROR: 可能被风控或下载图片用时过长,请耐心等待")) } }) diff --git a/plugin/epidemic/epidemic.go b/plugin/epidemic/epidemic.go deleted file mode 100644 index c9545fbf..00000000 --- a/plugin/epidemic/epidemic.go +++ /dev/null @@ -1,120 +0,0 @@ -// Package epidemic 城市疫情查询 -package epidemic - -import ( - "encoding/json" - - zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/message" - - "github.com/FloatTech/floatbox/web" - ctrl "github.com/FloatTech/zbpctrl" - "github.com/FloatTech/zbputils/control" - "github.com/FloatTech/zbputils/ctxext" -) - -const txurl = "https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf" - -// result 疫情查询结果 -type result struct { - Data struct { - Epidemic epidemic `json:"diseaseh5Shelf"` - } `json:"data"` -} - -// epidemic 疫情数据 -type epidemic struct { - LastUpdateTime string `json:"lastUpdateTime"` - AreaTree []*area `json:"areaTree"` -} - -// area 城市疫情数据 -type area struct { - Name string `json:"name"` - Today struct { - Confirm int `json:"confirm"` - Wzzadd any `json:"wzz_add"` - } `json:"today"` - Total struct { - NowConfirm int `json:"nowConfirm"` - Confirm int `json:"confirm"` - Dead int `json:"dead"` - Heal int `json:"heal"` - Grade string `json:"grade"` - Wzz int `json:"wzz"` - } `json:"total"` - Children []*area `json:"children"` -} - -func init() { - engine := control.Register("epidemic", &ctrl.Options[*zero.Ctx]{ - DisableOnDefault: false, - Brief: "城市疫情查询", - Help: "- xxx疫情\n", - }) - engine.OnSuffix("疫情").SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - city := ctx.State["args"].(string) - if city == "" { - ctx.SendChain(message.Text("你还没有输入城市名字呢!")) - return - } - data, time, err := queryEpidemic(city) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - if data == nil { - ctx.SendChain(message.Text("没有找到【", city, "】城市的疫情数据.")) - return - } - ctx.SendChain( - message.Text( - "【", data.Name, "】疫情数据\n", - "新增人数:", data.Today.Confirm, "\n", - "现有确诊:", data.Total.NowConfirm, "\n", - "累计确诊:", data.Total.Confirm, "\n", - "治愈人数:", data.Total.Heal, "\n", - "死亡人数:", data.Total.Dead, "\n", - "无症状人数:", data.Total.Wzz, "\n", - "新增无症状:", data.Today.Wzzadd, "\n", - "更新时间:\n『", time, "』", - ), - ) - }) -} - -// rcity 查找城市 -func rcity(a *area, cityName string) *area { - if a == nil { - return nil - } - if a.Name == cityName { - return a - } - for _, v := range a.Children { - if v.Name == cityName { - return v - } - c := rcity(v, cityName) - if c != nil { - return c - } - } - return nil -} - -// queryEpidemic 查询城市疫情 -func queryEpidemic(findCityName string) (citydata *area, times string, err error) { - data, err := web.GetData(txurl) - if err != nil { - return - } - var r result - err = json.Unmarshal(data, &r) - if err != nil { - return - } - citydata = rcity(r.Data.Epidemic.AreaTree[0], findCityName) - return citydata, r.Data.Epidemic.LastUpdateTime, nil -} diff --git a/plugin/fortune/fortune.go b/plugin/fortune/fortune.go index 61e7a100..2a39e91c 100644 --- a/plugin/fortune/fortune.go +++ b/plugin/fortune/fortune.go @@ -40,7 +40,7 @@ const ( var ( // 底图类型列表 - table = [...]string{"车万", "DC4", "爱因斯坦", "星空列车", "樱云之恋", "富婆妹", "李清歌", "公主连结", "原神", "明日方舟", "碧蓝航线", "碧蓝幻想", "战双", "阴阳师", "赛马娘", "东方归言录", "奇异恩典", "夏日口袋", "ASoul"} + table = [...]string{"车万", "DC4", "爱因斯坦", "星空列车", "樱云之恋", "富婆妹", "李清歌", "公主连结", "原神", "明日方舟", "碧蓝航线", "碧蓝幻想", "战双", "阴阳师", "赛马娘", "东方归言录", "奇异恩典", "夏日口袋", "ASoul", "Hololive"} // 映射底图与 index index = make(map[string]uint8) // 签文 @@ -53,7 +53,7 @@ func init() { DisableOnDefault: false, Brief: "每日运势", Help: "- 运势 | 抽签\n" + - "- 设置底图[车万 | DC4 | 爱因斯坦 | 星空列车 | 樱云之恋 | 富婆妹 | 李清歌 | 公主连结 | 原神 | 明日方舟 | 碧蓝航线 | 碧蓝幻想 | 战双 | 阴阳师 | 赛马娘 | 东方归言录 | 奇异恩典 | 夏日口袋 | ASoul]", + "- 设置底图[车万 | DC4 | 爱因斯坦 | 星空列车 | 樱云之恋 | 富婆妹 | 李清歌 | 公主连结 | 原神 | 明日方舟 | 碧蓝航线 | 碧蓝幻想 | 战双 | 阴阳师 | 赛马娘 | 东方归言录 | 奇异恩典 | 夏日口袋 | ASoul | Hololive]", PublicDataFolder: "Fortune", }) _ = os.RemoveAll(cache) diff --git a/plugin/heisi/heisi.go b/plugin/heisi/heisi.go index a1135fd2..218187b3 100644 --- a/plugin/heisi/heisi.go +++ b/plugin/heisi/heisi.go @@ -2,11 +2,17 @@ package heisi import ( + "errors" "math/rand" + "os" "strconv" + "time" "unsafe" + "github.com/FloatTech/AnimeAPI/setu" fbctxext "github.com/FloatTech/floatbox/ctxext" + "github.com/FloatTech/floatbox/file" + "github.com/FloatTech/floatbox/web" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" @@ -25,6 +31,39 @@ var ( ) func init() { // 插件主体 + p, err := setu.NewPool(setu.DefaultPoolDir, + func(s string) (string, error) { + if s != "黑丝" && s != "白丝" && s != "jk" && s != "巨乳" && s != "足控" && s != "网红" { + return "", errors.New("invalid call") + } + typ := setu.DefaultPoolDir + "/" + s + if file.IsNotExist(typ) { + err := os.MkdirAll(typ, 0755) + if err != nil { + return "", err + } + } + var pic item + switch s { + case "黑丝": + pic = heisiPic[rand.Intn(len(heisiPic))] + case "白丝": + pic = baisiPic[rand.Intn(len(baisiPic))] + case "jk": + pic = jkPic[rand.Intn(len(jkPic))] + case "巨乳": + pic = jurPic[rand.Intn(len(jurPic))] + case "足控": + pic = zukPic[rand.Intn(len(zukPic))] + case "网红": + pic = mcnPic[rand.Intn(len(mcnPic))] + } + return pic.String(), nil + }, web.GetData, time.Minute) + if err != nil { + panic(err) + } + engine := control.Register("heisi", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "黑丝", @@ -65,22 +104,12 @@ func init() { // 插件主体 })).SetBlock(true). Handle(func(ctx *zero.Ctx) { matched := ctx.State["matched"].(string) - var pic item - switch matched { - case "来点黑丝": - pic = heisiPic[rand.Intn(len(heisiPic))] - case "来点白丝": - pic = baisiPic[rand.Intn(len(baisiPic))] - case "来点jk": - pic = jkPic[rand.Intn(len(jkPic))] - case "来点巨乳": - pic = jurPic[rand.Intn(len(jurPic))] - case "来点足控": - pic = zukPic[rand.Intn(len(zukPic))] - case "来点网红": - pic = mcnPic[rand.Intn(len(mcnPic))] + pic, err := p.Roll(matched[3*2:]) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return } - m := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Image(pic.String()))} + m := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Image(pic))} if id := ctx.Send(m).ID(); id == 0 { ctx.SendChain(message.Text("ERROR: 可能被风控或下载图片用时过长,请耐心等待")) }