mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
✨ add plugin 渲染任意文字到图片
This commit is contained in:
parent
1bfb76a4b3
commit
5837a765f1
@ -119,6 +119,8 @@ print("run[CQ:image,file="+j["img"]+"]")
|
|||||||
```
|
```
|
||||||

|

|
||||||
|
|
||||||
|
- **渲染任意文字到图片** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/font"`
|
||||||
|
- [x] (用[终末体|终末变体|紫罗兰体|樱酥体|Consolas体|苹方体])渲染文字xxx
|
||||||
- **聊天** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat"`
|
- **聊天** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat"`
|
||||||
- [x] [BOT名字]
|
- [x] [BOT名字]
|
||||||
- [x] [戳一戳BOT]
|
- [x] [戳一戳BOT]
|
||||||
|
|||||||
2
data
2
data
@ -1 +1 @@
|
|||||||
Subproject commit c6f5b6ed318cc0cb8e729812e9dc58275f8438a6
|
Subproject commit d6efc79f18395853ea23bf4f98f848f5dda3ce55
|
||||||
2
go.mod
2
go.mod
@ -5,7 +5,7 @@ go 1.18
|
|||||||
require (
|
require (
|
||||||
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da
|
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da
|
||||||
github.com/FloatTech/sqlite v0.2.1
|
github.com/FloatTech/sqlite v0.2.1
|
||||||
github.com/FloatTech/zbputils v1.3.2-0.20220326161600-f9554b2fb9a4
|
github.com/FloatTech/zbputils v1.3.2-0.20220327052638-95033087f201
|
||||||
github.com/antchfx/htmlquery v1.2.4
|
github.com/antchfx/htmlquery v1.2.4
|
||||||
github.com/corona10/goimagehash v1.0.3
|
github.com/corona10/goimagehash v1.0.3
|
||||||
github.com/fogleman/gg v1.3.0
|
github.com/fogleman/gg v1.3.0
|
||||||
|
|||||||
4
go.sum
4
go.sum
@ -2,8 +2,8 @@ github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da h1:KbJujP8k2/
|
|||||||
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da/go.mod h1:aC3EOKpb0R0VOdW9QIQCfqN6ZFymOfvCgzVY1/Fz3Og=
|
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da/go.mod h1:aC3EOKpb0R0VOdW9QIQCfqN6ZFymOfvCgzVY1/Fz3Og=
|
||||||
github.com/FloatTech/sqlite v0.2.1 h1:9t6Me48XJJCIoPy4nLRvcdhcVKfT0c2lilp7SEKROG8=
|
github.com/FloatTech/sqlite v0.2.1 h1:9t6Me48XJJCIoPy4nLRvcdhcVKfT0c2lilp7SEKROG8=
|
||||||
github.com/FloatTech/sqlite v0.2.1/go.mod h1:6NfHRzqOo9RWeMJEoAQVuo51Omd5LFNxCNQhMF02/9U=
|
github.com/FloatTech/sqlite v0.2.1/go.mod h1:6NfHRzqOo9RWeMJEoAQVuo51Omd5LFNxCNQhMF02/9U=
|
||||||
github.com/FloatTech/zbputils v1.3.2-0.20220326161600-f9554b2fb9a4 h1:+OnHN8QcMqwEx37a3TMBw7CT5OTyFs8qqa4Hub+Igbk=
|
github.com/FloatTech/zbputils v1.3.2-0.20220327052638-95033087f201 h1:7x73xvsTmz7HWL4CjmX0jmfp2XAr2Hvpt2ay+DPOo6c=
|
||||||
github.com/FloatTech/zbputils v1.3.2-0.20220326161600-f9554b2fb9a4/go.mod h1:qZlHzG1s1giQrXaosjOAA2utGNaPZjwJsVZfBog2bhg=
|
github.com/FloatTech/zbputils v1.3.2-0.20220327052638-95033087f201/go.mod h1:qZlHzG1s1giQrXaosjOAA2utGNaPZjwJsVZfBog2bhg=
|
||||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||||
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0=
|
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0=
|
||||||
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0=
|
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0=
|
||||||
|
|||||||
1
main.go
1
main.go
@ -73,6 +73,7 @@ import (
|
|||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/drift_bottle" // 漂流瓶
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/drift_bottle" // 漂流瓶
|
||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/emojimix" // 合成emoji
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/emojimix" // 合成emoji
|
||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/epidemic" // 城市疫情查询
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/epidemic" // 城市疫情查询
|
||||||
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/font" // 渲染任意文字到图片
|
||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/fortune" // 运势
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/fortune" // 运势
|
||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/funny" // 笑话
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/funny" // 笑话
|
||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/genshin" // 原神抽卡
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/genshin" // 原神抽卡
|
||||||
|
|||||||
@ -27,7 +27,7 @@ func init() {
|
|||||||
keyword := ctx.State["regex_matched"].([]string)[1]
|
keyword := ctx.State["regex_matched"].([]string)[1]
|
||||||
rest, err := uid(keyword)
|
rest, err := uid(keyword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
id := rest.Get("data.result.0.mid").String()
|
id := rest.Get("data.result.0.mid").String()
|
||||||
@ -36,20 +36,20 @@ func init() {
|
|||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
req, err := http.NewRequest(method, url, nil)
|
req, err := http.NewRequest(method, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
req.Header.Add("cookie", "CURRENT_FNVAL=80; _uuid=772B88E8-3ED1-D589-29BB-F6CB5214239A06137infoc; blackside_state=1; bfe_id=6f285c892d9d3c1f8f020adad8bed553; rpdid=|(umY~Jkl|kJ0J'uYkR|)lu|); fingerprint=0ec2b1140fb30b56d7b5e415bc3b5fb1; buvid_fp=C91F5265-3DF4-4D5A-9FF3-C546370B14C0143096infoc; buvid_fp_plain=C91F5265-3DF4-4D5A-9FF3-C546370B14C0143096infoc; SESSDATA=9e0266f6%2C1639637127%2Cb0172%2A61; bili_jct=96ddbd7e22d527abdc0501339a12d4d3; DedeUserID=695737880; DedeUserID__ckMd5=0117660e75db7b01; sid=5labuhaf; PVID=1; bfe_id=1e33d9ad1cb29251013800c68af42315")
|
req.Header.Add("cookie", "CURRENT_FNVAL=80; _uuid=772B88E8-3ED1-D589-29BB-F6CB5214239A06137infoc; blackside_state=1; bfe_id=6f285c892d9d3c1f8f020adad8bed553; rpdid=|(umY~Jkl|kJ0J'uYkR|)lu|); fingerprint=0ec2b1140fb30b56d7b5e415bc3b5fb1; buvid_fp=C91F5265-3DF4-4D5A-9FF3-C546370B14C0143096infoc; buvid_fp_plain=C91F5265-3DF4-4D5A-9FF3-C546370B14C0143096infoc; SESSDATA=9e0266f6%2C1639637127%2Cb0172%2A61; bili_jct=96ddbd7e22d527abdc0501339a12d4d3; DedeUserID=695737880; DedeUserID__ckMd5=0117660e75db7b01; sid=5labuhaf; PVID=1; bfe_id=1e33d9ad1cb29251013800c68af42315")
|
||||||
res, err := client.Do(req)
|
res, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
|
|
||||||
body, err := io.ReadAll(res.Body)
|
body, err := io.ReadAll(res.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
data := string(body)
|
data := string(body)
|
||||||
|
|||||||
@ -19,14 +19,14 @@ func init() {
|
|||||||
keyword := ctx.State["regex_matched"].([]string)[1]
|
keyword := ctx.State["regex_matched"].([]string)[1]
|
||||||
res, err := uid(keyword)
|
res, err := uid(keyword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
id := res.Get("data.result.0.mid").String()
|
id := res.Get("data.result.0.mid").String()
|
||||||
// 获取详情
|
// 获取详情
|
||||||
fo, err := fansapi(id)
|
fo, err := fansapi(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.SendChain(message.Text(
|
ctx.SendChain(message.Text(
|
||||||
|
|||||||
@ -214,7 +214,7 @@ func init() {
|
|||||||
log.Errorln("[bilibilipush]:", err)
|
log.Errorln("[bilibilipush]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Image("base64://" + binary.BytesToString(data))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Image("base64://" + binary.BytesToString(data))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@ func init() {
|
|||||||
log.Println("err:", err)
|
log.Println("err:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Image("base64://" + binary.BytesToString(data))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Image("base64://" + binary.BytesToString(data))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ func init() {
|
|||||||
log.Println("err:", err)
|
log.Println("err:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Image("base64://" + binary.BytesToString(data))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Image("base64://" + binary.BytesToString(data))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,7 +43,7 @@ func init() {
|
|||||||
if id := ctx.SendGroupForwardMessage(
|
if id := ctx.SendGroupForwardMessage(
|
||||||
ctx.Event.GroupID,
|
ctx.Event.GroupID,
|
||||||
m).Get("message_id").Int(); id == 0 {
|
m).Get("message_id").Int(); id == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,7 +46,7 @@ func init() {
|
|||||||
Handle(func(ctx *zero.Ctx) {
|
Handle(func(ctx *zero.Ctx) {
|
||||||
err := data.AddText(ctx.State["regex_matched"].([]string)[1])
|
err := data.AddText(ctx.State["regex_matched"].([]string)[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
} else {
|
} else {
|
||||||
ctx.SendChain(message.Text("记住啦!"))
|
ctx.SendChain(message.Text("记住啦!"))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
data, time, err := queryEpidemic(city)
|
data, time, err := queryEpidemic(city)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if data == nil {
|
if data == nil {
|
||||||
|
|||||||
43
plugin/font/main.go
Normal file
43
plugin/font/main.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Package font 渲染任意文字到图片
|
||||||
|
package font
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/FloatTech/zbputils/binary"
|
||||||
|
"github.com/FloatTech/zbputils/control"
|
||||||
|
"github.com/FloatTech/zbputils/control/order"
|
||||||
|
"github.com/FloatTech/zbputils/ctxext"
|
||||||
|
"github.com/FloatTech/zbputils/img/text"
|
||||||
|
zero "github.com/wdvxdr1123/ZeroBot"
|
||||||
|
"github.com/wdvxdr1123/ZeroBot/message"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
control.Register("font", order.AcquirePrio(), &control.Options{
|
||||||
|
DisableOnDefault: false,
|
||||||
|
Help: "渲染任意文字到图片\n- (用[终末体|终末变体|紫罗兰体|樱酥体|Consolas体|苹方体])渲染文字xxx",
|
||||||
|
}).OnRegex(`^(用.+)?渲染文字([\s\S]+)$`).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) {
|
||||||
|
fnt := ctx.State["regex_matched"].([]string)[1]
|
||||||
|
txt := ctx.State["regex_matched"].([]string)[2]
|
||||||
|
switch fnt {
|
||||||
|
case "用终末体":
|
||||||
|
fnt = text.SyumatuFontFile
|
||||||
|
case "用终末变体":
|
||||||
|
fnt = text.NisiFontFile
|
||||||
|
case "用紫罗兰体":
|
||||||
|
fnt = text.VioletEvergardenFontFile
|
||||||
|
case "用樱酥体":
|
||||||
|
fnt = text.SakuraFontFile
|
||||||
|
case "用Consolas体":
|
||||||
|
fnt = text.ConsolasFontFile
|
||||||
|
case "用苹方体":
|
||||||
|
default:
|
||||||
|
fnt = text.FontFile
|
||||||
|
}
|
||||||
|
b, err := text.RenderToBase64(txt, fnt, 400, 20)
|
||||||
|
if err != nil {
|
||||||
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.SendChain(message.Image("base64://" + binary.BytesToString(b)))
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -125,7 +125,7 @@ func init() {
|
|||||||
zipfile := images + kind + ".zip"
|
zipfile := images + kind + ".zip"
|
||||||
_, err := file.GetLazyData(zipfile, false, false)
|
_, err := file.GetLazyData(zipfile, false, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ func init() {
|
|||||||
// 随机获取背景
|
// 随机获取背景
|
||||||
background, index, err := randimage(zipfile, seed)
|
background, index, err := randimage(zipfile, seed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ func init() {
|
|||||||
return err
|
return err
|
||||||
}, ctxext.Send(ctx), ctxext.GetMessage(ctx))
|
}, ctxext.Send(ctx), ctxext.GetMessage(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -36,12 +36,12 @@ func init() { // 插件主体
|
|||||||
}.Encode()
|
}.Encode()
|
||||||
body, err := netGet(api.String(), header)
|
body, err := netGet(api.String(), header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
}
|
}
|
||||||
// 解析请求
|
// 解析请求
|
||||||
info := gjson.ParseBytes(body)
|
info := gjson.ParseBytes(body)
|
||||||
if info.Get("total_count").Int() == 0 {
|
if info.Get("total_count").Int() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 没有找到这样的仓库"))
|
ctx.SendChain(message.Text("ERROR:没有找到这样的仓库"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
repo := info.Get("items.0")
|
repo := info.Get("items.0")
|
||||||
|
|||||||
@ -83,7 +83,7 @@ func init() {
|
|||||||
ctx.Event.GroupID,
|
ctx.Event.GroupID,
|
||||||
sk,
|
sk,
|
||||||
).Get("message_id").Int(); id == 0 {
|
).Get("message_id").Int(); id == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// 卡组
|
// 卡组
|
||||||
|
|||||||
@ -44,13 +44,13 @@ func init() {
|
|||||||
keyword := ctx.State["regex_matched"].([]string)[1]
|
keyword := ctx.State["regex_matched"].([]string)[1]
|
||||||
soutujson, err := soutuapi(keyword)
|
soutujson, err := soutuapi(keyword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rannum := rand.Intn(len(soutujson.Data.Illusts))
|
rannum := rand.Intn(len(soutujson.Data.Illusts))
|
||||||
illust, err := pixiv.Works(soutujson.Data.Illusts[rannum].ID)
|
illust, err := pixiv.Works(soutujson.Data.Illusts[rannum].ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
u := illust.ImageUrls[0]
|
u := illust.ImageUrls[0]
|
||||||
@ -62,7 +62,7 @@ func init() {
|
|||||||
return illust.DownloadToCache(0)
|
return illust.DownloadToCache(0)
|
||||||
}, ctxext.SendFakeForwardToGroup(ctx), ctxext.GetFirstMessageInForward(ctx))
|
}, ctxext.SendFakeForwardToGroup(ctx), ctxext.GetFirstMessageInForward(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -39,12 +39,12 @@ func init() {
|
|||||||
for i := 0; i < math.Min(cap(queue)-len(queue), 2); i++ {
|
for i := 0; i < math.Min(cap(queue)-len(queue), 2); i++ {
|
||||||
data, err := web.GetData(api)
|
data, err := web.GetData(api)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
json := gjson.ParseBytes(data)
|
json := gjson.ParseBytes(data)
|
||||||
if e := json.Get("error").Str; e != "" {
|
if e := json.Get("error").Str; e != "" {
|
||||||
ctx.SendChain(message.Text("ERROR: ", e))
|
ctx.SendChain(message.Text("ERROR:", e))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
url := json.Get("data.0.urls.original").Str
|
url := json.Get("data.0.urls.original").Str
|
||||||
@ -65,7 +65,7 @@ func init() {
|
|||||||
}()
|
}()
|
||||||
select {
|
select {
|
||||||
case <-time.After(time.Minute):
|
case <-time.After(time.Minute):
|
||||||
ctx.SendChain(message.Text("ERROR: 等待填充,请稍后再试......"))
|
ctx.SendChain(message.Text("ERROR:等待填充,请稍后再试......"))
|
||||||
case img := <-queue:
|
case img := <-queue:
|
||||||
id := ctx.SendChain(message.Image(img))
|
id := ctx.SendChain(message.Image(img))
|
||||||
if id.ID() == 0 {
|
if id.ID() == 0 {
|
||||||
|
|||||||
@ -38,17 +38,17 @@ func init() {
|
|||||||
title := fmt.Sprintf("摸鱼人日历 %d月%d日", time.Now().Month(), time.Now().Day())
|
title := fmt.Sprintf("摸鱼人日历 %d月%d日", time.Now().Month(), time.Now().Day())
|
||||||
sg, cookies, err := sougou(title, "摸鱼人日历", ua)
|
sg, cookies, err := sougou(title, "摸鱼人日历", ua)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
wx, err := redirect(sg, cookies, ua)
|
wx, err := redirect(sg, cookies, ua)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
image, err := calendar(wx, ua)
|
image, err := calendar(wx, ua)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.SendChain(message.Image(image))
|
ctx.SendChain(message.Image(image))
|
||||||
|
|||||||
@ -51,7 +51,7 @@ func init() {
|
|||||||
err := ns.db.Pick(imgtype, sc)
|
err := ns.db.Pick(imgtype, sc)
|
||||||
ns.mu.RUnlock()
|
ns.mu.RUnlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
} else {
|
} else {
|
||||||
p := "file:///" + setupath + "/" + sc.Path
|
p := "file:///" + setupath + "/" + sc.Path
|
||||||
if ctx.Event.GroupID != 0 {
|
if ctx.Event.GroupID != 0 {
|
||||||
@ -71,7 +71,7 @@ func init() {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
ctx.SendChain(message.Text("成功!"))
|
ctx.SendChain(message.Text("成功!"))
|
||||||
} else {
|
} else {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
engine.OnRegex(`^设置本地setu绝对路径(.*)$`, zero.SuperUserPermission).SetBlock(true).
|
engine.OnRegex(`^设置本地setu绝对路径(.*)$`, zero.SuperUserPermission).SetBlock(true).
|
||||||
@ -81,7 +81,7 @@ func init() {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
ctx.SendChain(message.Text("成功!"))
|
ctx.SendChain(message.Text("成功!"))
|
||||||
} else {
|
} else {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
engine.OnFullMatch("刷新所有本地setu", zero.SuperUserPermission).SetBlock(true).
|
engine.OnFullMatch("刷新所有本地setu", zero.SuperUserPermission).SetBlock(true).
|
||||||
@ -90,7 +90,7 @@ func init() {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
ctx.SendChain(message.Text("成功!"))
|
ctx.SendChain(message.Text("成功!"))
|
||||||
} else {
|
} else {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
engine.OnFullMatch("所有本地setu分类").SetBlock(true).
|
engine.OnFullMatch("所有本地setu分类").SetBlock(true).
|
||||||
|
|||||||
@ -84,7 +84,7 @@ func init() {
|
|||||||
log.Println("err:", err)
|
log.Println("err:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Image("base64://" + helper.BytesToString(data))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Image("base64://" + helper.BytesToString(data))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
text := htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@id='tipss']"))
|
text := htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@id='tipss']"))
|
||||||
|
|||||||
@ -61,7 +61,7 @@ func init() { // 插件主体
|
|||||||
log.Errorln("[omikuji]:", err)
|
log.Errorln("[omikuji]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.At(ctx.Event.UserID), message.Image("base64://"+helper.BytesToString(kujiBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.At(ctx.Event.UserID), message.Image("base64://"+helper.BytesToString(kujiBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -132,7 +132,7 @@ func init() {
|
|||||||
// 运行失败
|
// 运行失败
|
||||||
ctx.SendChain(
|
ctx.SendChain(
|
||||||
message.Text("> ", ctx.Event.Sender.NickName, "\n"),
|
message.Text("> ", ctx.Event.Sender.NickName, "\n"),
|
||||||
message.Text("ERROR: ", err),
|
message.Text("ERROR:", err),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
// 运行成功
|
// 运行成功
|
||||||
|
|||||||
@ -36,7 +36,7 @@ func init() { // 插件主体
|
|||||||
// 获取P站插图信息
|
// 获取P站插图信息
|
||||||
illust, err := pixiv.Works(id)
|
illust, err := pixiv.Works(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if illust.Pid > 0 {
|
if illust.Pid > 0 {
|
||||||
@ -91,7 +91,7 @@ func init() { // 插件主体
|
|||||||
for _, pic := range ctx.State["image_url"].([]string) {
|
for _, pic := range ctx.State["image_url"].([]string) {
|
||||||
fmt.Println(pic)
|
fmt.Println(pic)
|
||||||
if result, err := saucenao.SauceNAO(pic); err != nil {
|
if result, err := saucenao.SauceNAO(pic); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
} else {
|
} else {
|
||||||
// 返回SauceNAO的结果
|
// 返回SauceNAO的结果
|
||||||
ctx.SendChain(
|
ctx.SendChain(
|
||||||
@ -110,7 +110,7 @@ func init() { // 插件主体
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if result, err := yandex.Yandex(pic); err != nil {
|
if result, err := yandex.Yandex(pic); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
} else {
|
} else {
|
||||||
ctx.SendChain(
|
ctx.SendChain(
|
||||||
message.Text("也许是这个?"),
|
message.Text("也许是这个?"),
|
||||||
@ -126,7 +126,7 @@ func init() { // 插件主体
|
|||||||
}
|
}
|
||||||
// 不论结果如何都执行 ascii2d 搜索
|
// 不论结果如何都执行 ascii2d 搜索
|
||||||
if result, err := ascii2d.Ascii2d(pic); err != nil {
|
if result, err := ascii2d.Ascii2d(pic); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
msg := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Text("ascii2d搜图结果"))}
|
msg := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Text("ascii2d搜图结果"))}
|
||||||
@ -147,7 +147,7 @@ func init() { // 插件主体
|
|||||||
ctx.Event.GroupID,
|
ctx.Event.GroupID,
|
||||||
msg,
|
msg,
|
||||||
).Get("message_id").Int(); id == 0 {
|
).Get("message_id").Int(); id == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -86,13 +86,13 @@ func init() { // 插件主体
|
|||||||
ctx.SendChain(message.Text("INFO: 正在填充弹药......"))
|
ctx.SendChain(message.Text("INFO: 正在填充弹药......"))
|
||||||
time.Sleep(time.Second * 10)
|
time.Sleep(time.Second * 10)
|
||||||
if pool.size(imgtype) == 0 {
|
if pool.size(imgtype) == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 等待填充,请稍后再试......"))
|
ctx.SendChain(message.Text("ERROR:等待填充,请稍后再试......"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 从缓冲池里抽一张
|
// 从缓冲池里抽一张
|
||||||
if id := ctx.SendChain(*pool.pop(imgtype)); id.ID() == 0 {
|
if id := ctx.SendChain(*pool.pop(imgtype)); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ func init() { // 插件主体
|
|||||||
)
|
)
|
||||||
// 查询数据库
|
// 查询数据库
|
||||||
if err := pool.remove(imgtype, id); err != nil {
|
if err := pool.remove(imgtype, id); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.SendChain(message.Text("删除成功"))
|
ctx.SendChain(message.Text("删除成功"))
|
||||||
@ -159,7 +159,7 @@ func (p *imgpool) push(ctx *zero.Ctx, imgtype string, illust *pixiv.Illust) {
|
|||||||
if fileutil.IsNotExist(f) {
|
if fileutil.IsNotExist(f) {
|
||||||
// 下载图片
|
// 下载图片
|
||||||
if err := illust.DownloadToCache(0); err != nil {
|
if err := illust.DownloadToCache(0); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ func (p *imgpool) fill(ctx *zero.Ctx, imgtype string) {
|
|||||||
illust := &pixiv.Illust{}
|
illust := &pixiv.Illust{}
|
||||||
// 查询出一张图片
|
// 查询出一张图片
|
||||||
if err := p.db.Pick(imgtype, illust); err != nil {
|
if err := p.db.Pick(imgtype, illust); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// 向缓冲池添加一张图片
|
// 向缓冲池添加一张图片
|
||||||
|
|||||||
@ -69,7 +69,7 @@ func handlepic(ctx *zero.Ctx) {
|
|||||||
log.Errorln("[shindan]:", err)
|
log.Errorln("[shindan]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Image("base64://" + helper.BytesToString(data))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Image("base64://" + helper.BytesToString(data))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,7 @@ func init() { // 插件主体
|
|||||||
for _, pic := range ctx.State["image_url"].([]string) {
|
for _, pic := range ctx.State["image_url"].([]string) {
|
||||||
fmt.Println(pic)
|
fmt.Println(pic)
|
||||||
if result, err := moe.Search(pic, true, true); err != nil {
|
if result, err := moe.Search(pic, true, true); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
} else if len(result.Result) > 0 {
|
} else if len(result.Result) > 0 {
|
||||||
r := result.Result[0]
|
r := result.Result[0]
|
||||||
hint := "我有把握是这个!"
|
hint := "我有把握是这个!"
|
||||||
|
|||||||
@ -24,7 +24,7 @@ func init() {
|
|||||||
msg := []string{ctx.State["regex_matched"].([]string)[2]}
|
msg := []string{ctx.State["regex_matched"].([]string)[2]}
|
||||||
data, err := web.GetData("https://api.cloolc.club/fanyi?data=" + msg[0])
|
data, err := web.GetData("https://api.cloolc.club/fanyi?data=" + msg[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
}
|
}
|
||||||
info := gjson.ParseBytes(data)
|
info := gjson.ParseBytes(data)
|
||||||
repo := info.Get("data.0")
|
repo := info.Get("data.0")
|
||||||
|
|||||||
@ -70,7 +70,7 @@ func init() {
|
|||||||
log.Errorln("[vtb]:", err)
|
log.Errorln("[vtb]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(firstStepImageBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(firstStepImageBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
// 步骤0,1,2,依次选择3个类别
|
// 步骤0,1,2,依次选择3个类别
|
||||||
step := 0
|
step := 0
|
||||||
@ -102,7 +102,7 @@ func init() {
|
|||||||
log.Errorln("[vtb]:", err)
|
log.Errorln("[vtb]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(firstStepImageBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(firstStepImageBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
errorCount++
|
errorCount++
|
||||||
} else {
|
} else {
|
||||||
@ -111,7 +111,7 @@ func init() {
|
|||||||
log.Errorln("[vtb]:", err)
|
log.Errorln("[vtb]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(secondStepMessageBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(secondStepMessageBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
step++
|
step++
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ func init() {
|
|||||||
log.Errorln("[vtb]:", err)
|
log.Errorln("[vtb]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(secondStepMessageBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(secondStepMessageBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
errorCount++
|
errorCount++
|
||||||
} else {
|
} else {
|
||||||
@ -142,7 +142,7 @@ func init() {
|
|||||||
log.Errorln("[vtb]:", err)
|
log.Errorln("[vtb]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(thirdStepMessageBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(thirdStepMessageBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
step++
|
step++
|
||||||
}
|
}
|
||||||
@ -165,7 +165,7 @@ func init() {
|
|||||||
log.Errorln("[vtb]:", err)
|
log.Errorln("[vtb]:", err)
|
||||||
}
|
}
|
||||||
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(firstStepImageBytes))); id.ID() == 0 {
|
if id := ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Image("base64://"+helper.BytesToString(firstStepImageBytes))); id.ID() == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
errorCount++
|
errorCount++
|
||||||
step = 1
|
step = 1
|
||||||
|
|||||||
@ -31,7 +31,7 @@ func init() {
|
|||||||
// 调用接口
|
// 调用接口
|
||||||
i, err := strconv.Atoi(ctx.State["regex_matched"].([]string)[1])
|
i, err := strconv.Atoi(ctx.State["regex_matched"].([]string)[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w := newWtf(i)
|
w := newWtf(i)
|
||||||
@ -54,7 +54,7 @@ func init() {
|
|||||||
text, err = w.predict(name)
|
text, err = w.predict(name)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR: ", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// TODO: 可注入
|
// TODO: 可注入
|
||||||
|
|||||||
@ -71,6 +71,6 @@ func sendYmgal(y ymgal, ctx *zero.Ctx) {
|
|||||||
if id := ctx.SendGroupForwardMessage(
|
if id := ctx.SendGroupForwardMessage(
|
||||||
ctx.Event.GroupID,
|
ctx.Event.GroupID,
|
||||||
m).Get("message_id").Int(); id == 0 {
|
m).Get("message_id").Int(); id == 0 {
|
||||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
ctx.SendChain(message.Text("ERROR:可能被风控了"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user