Skip to content

Commit 4a0dc59

Browse files
committed
优化 saucenao
1 parent b1dd8f5 commit 4a0dc59

File tree

4 files changed

+132
-38
lines changed

4 files changed

+132
-38
lines changed

go.mod

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ module github.com/FloatTech/ZeroBot-Plugin
33
go 1.18
44

55
require (
6-
github.com/FloatTech/AnimeAPI v1.4.1-0.20220510153300-44a0551f6f51
6+
github.com/FloatTech/AnimeAPI v1.4.1-0.20220512034947-4dd25b414348
77
github.com/FloatTech/sqlite v0.2.1
8-
github.com/FloatTech/zbputils v1.4.0
8+
github.com/FloatTech/zbputils v1.4.1-0.20220510155433-a0cc1629b1df
99
github.com/antchfx/htmlquery v1.2.4
1010
github.com/corona10/goimagehash v1.0.3
1111
github.com/fogleman/gg v1.3.0
@@ -17,6 +17,7 @@ require (
1717
github.com/fumiama/sqlite3 v1.14.6
1818
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
1919
github.com/jinzhu/gorm v1.9.16
20+
github.com/jozsefsallai/gophersauce v1.0.1
2021
github.com/mroth/weightedrand v0.4.1
2122
github.com/pkumza/numcn v1.0.0
2223
github.com/shirou/gopsutil/v3 v3.22.3
@@ -33,6 +34,7 @@ require (
3334
github.com/antchfx/xpath v1.2.0 // indirect
3435
github.com/disintegration/imaging v1.6.2 // indirect
3536
github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 // indirect
37+
github.com/gabriel-vasile/mimetype v1.0.4 // indirect
3638
github.com/go-ole/go-ole v1.2.6 // indirect
3739
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
3840
github.com/google/uuid v1.3.0 // indirect

go.sum

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
github.com/FloatTech/AnimeAPI v1.4.1-0.20220510153300-44a0551f6f51 h1:eTfn1HRSS3l7VmfUGmKjnw6Y1i0xU1asAJsYuv3boyw=
2-
github.com/FloatTech/AnimeAPI v1.4.1-0.20220510153300-44a0551f6f51/go.mod h1:isziaRAqDpCpekOZcOqA/S5PwOGiKYVW1qAZms6cK/Y=
1+
github.com/FloatTech/AnimeAPI v1.4.1-0.20220512034947-4dd25b414348 h1:UQRYPg3hXqF/tcqMMcNKPdgOWkjhfNamC1FXi6e1cek=
2+
github.com/FloatTech/AnimeAPI v1.4.1-0.20220512034947-4dd25b414348/go.mod h1:NAGWR4TXLwEVEx0e8yoMj6j5DS0bNWrFcuATozNkT2I=
33
github.com/FloatTech/sqlite v0.2.1 h1:9t6Me48XJJCIoPy4nLRvcdhcVKfT0c2lilp7SEKROG8=
44
github.com/FloatTech/sqlite v0.2.1/go.mod h1:6NfHRzqOo9RWeMJEoAQVuo51Omd5LFNxCNQhMF02/9U=
5-
github.com/FloatTech/zbputils v1.4.0 h1:zjFiTJ5UHFjnDX6iP+f1KMCO9uqFbDjFFVzW8cyMbe8=
6-
github.com/FloatTech/zbputils v1.4.0/go.mod h1:Cf2wAFtq7OUj4RUHcSQtcAYgAspP06wQseKZwtCJRXQ=
5+
github.com/FloatTech/zbputils v1.4.1-0.20220510155433-a0cc1629b1df h1:zt+Um+D9UqF5SZmYPmklLh7ff/u0ByU53KX1pqlFEhM=
6+
github.com/FloatTech/zbputils v1.4.1-0.20220510155433-a0cc1629b1df/go.mod h1:Cf2wAFtq7OUj4RUHcSQtcAYgAspP06wQseKZwtCJRXQ=
77
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
88
github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c h1:cNPOdTNiVwxLpROLjXCgbIPvdkE+BwvxDvgmdYmWx6Q=
99
github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c/go.mod h1:KqZzu7slNKROh3TSYEH/IUMG6f4M+1qubZ5e52QypsE=
@@ -42,6 +42,8 @@ github.com/fumiama/gotracemoe v0.0.3 h1:iI5EbE9A3UUbfukG6+/soYPjp1S31eCNYf4tw7s6
4242
github.com/fumiama/gotracemoe v0.0.3/go.mod h1:tyqahdUzHf0bQIAVY/GYmDWvYYe5ik1ZbhnGYh+zl40=
4343
github.com/fumiama/sqlite3 v1.14.6 h1:+e+iygyiDXQJVi7xeXIviBvR7hAc5y20WA9hRwfKn10=
4444
github.com/fumiama/sqlite3 v1.14.6/go.mod h1:Xx9a2/OtHuy9pBjow0N+bE/RhNeZ7zZz5xh25vqbA5A=
45+
github.com/gabriel-vasile/mimetype v1.0.4 h1:uBejfH8l3/2f+5vjl1e4xIaSyNEhRBZ5N/ij7ohpNd8=
46+
github.com/gabriel-vasile/mimetype v1.0.4/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To=
4547
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
4648
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
4749
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
@@ -65,6 +67,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
6567
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
6668
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
6769
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
70+
github.com/jozsefsallai/gophersauce v1.0.1 h1:BA3ovtQRrAb1qYU9JoRLbDHpxnDunlNcEkEfhCvDDCM=
71+
github.com/jozsefsallai/gophersauce v1.0.1/go.mod h1:YVEI7djliMTmZ1Vh01YPF8bUHi+oKhe3yXgKf1T49vg=
6872
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
6973
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
7074
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=

plugin/danbooru/main.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"encoding/hex"
77

88
"github.com/FloatTech/AnimeAPI/danbooru"
9-
"github.com/FloatTech/AnimeAPI/saucenao"
109
"github.com/FloatTech/zbputils/control"
1110
"github.com/FloatTech/zbputils/file"
1211
"github.com/FloatTech/zbputils/img/writer"
@@ -30,14 +29,7 @@ func init() { // 插件主体
3029
Handle(func(ctx *zero.Ctx) {
3130
ctx.SendChain(message.Text("少女祈祷中..."))
3231
for _, url := range ctx.State["image_url"].([]string) {
33-
name := ""
34-
r, err := saucenao.SauceNAO(url)
35-
if err != nil {
36-
name = "未知图片"
37-
} else {
38-
name = r[0].Title
39-
}
40-
t, err := danbooru.TagURL(name, url)
32+
t, err := danbooru.TagURL("", url)
4133
if err != nil {
4234
ctx.SendChain(message.Text("ERROR:", err))
4335
return

plugin/saucenao/searcher.go

Lines changed: 119 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package saucenao
33

44
import (
55
"fmt"
6+
"os"
67
"strconv"
78

89
"github.com/sirupsen/logrus"
@@ -11,21 +12,41 @@ import (
1112

1213
"github.com/FloatTech/AnimeAPI/ascii2d"
1314
"github.com/FloatTech/AnimeAPI/pixiv"
14-
"github.com/FloatTech/AnimeAPI/saucenao"
15+
"github.com/jozsefsallai/gophersauce"
1516

17+
"github.com/FloatTech/zbputils/binary"
1618
"github.com/FloatTech/zbputils/control"
1719
"github.com/FloatTech/zbputils/ctxext"
1820
"github.com/FloatTech/zbputils/file"
1921
"github.com/FloatTech/zbputils/img/pool"
2022
)
2123

24+
var (
25+
saucenaocli *gophersauce.Client
26+
)
27+
2228
func init() { // 插件主体
2329
engine := control.Register("saucenao", &control.Options{
2430
DisableOnDefault: false,
2531
Help: "搜图\n" +
2632
"- 以图搜图 | 搜索图片 | 以图识图[图片]\n" +
2733
"- 搜图[P站图片ID]",
34+
PrivateDataFolder: "saucenao",
2835
})
36+
apikeyfile := engine.DataFolder() + "apikey.txt"
37+
if file.IsExist(apikeyfile) {
38+
key, err := os.ReadFile(apikeyfile)
39+
if err != nil {
40+
panic(err)
41+
}
42+
saucenaocli, err = gophersauce.NewClient(&gophersauce.Settings{
43+
MaxResults: 1,
44+
APIKey: binary.BytesToString(key),
45+
})
46+
if err != nil {
47+
panic(err)
48+
}
49+
}
2950
// 根据 PID 搜图
3051
engine.OnRegex(`^搜图(\d+)$`).SetBlock(true).
3152
Handle(func(ctx *zero.Ctx) {
@@ -64,11 +85,11 @@ func init() { // 插件主体
6485
imgs = append(imgs, message.Image("file:///"+f))
6586
}
6687
txt := message.Text(
67-
"标题", illust.Title, "\n",
68-
"插画ID", illust.Pid, "\n",
69-
"画师", illust.UserName, "\n",
70-
"画师ID", illust.UserId, "\n",
71-
"直链", "https://pixivel.moe/detail?id=", illust.Pid,
88+
"标题: ", illust.Title, "\n",
89+
"插画ID: ", illust.Pid, "\n",
90+
"画师: ", illust.UserName, "\n",
91+
"画师ID: ", illust.UserId, "\n",
92+
"直链: ", "https://pixivel.moe/detail?id=", illust.Pid,
7293
)
7394
if imgs != nil {
7495
// 发送搜索结果
@@ -87,24 +108,81 @@ func init() { // 插件主体
87108
// 开始搜索图片
88109
ctx.SendChain(message.Text("少女祈祷中......"))
89110
for _, pic := range ctx.State["image_url"].([]string) {
90-
if result, err := saucenao.SauceNAO(pic); err != nil {
111+
if saucenaocli != nil {
112+
resp, err := saucenaocli.FromURL(pic)
113+
if err == nil && resp.Count() > 0 {
114+
result := resp.First()
115+
// 返回SauceNAO的结果
116+
picid := 0
117+
picidstr := ""
118+
source := ""
119+
switch {
120+
case result.IsPixiv():
121+
picid = result.Data.PixivID
122+
source = "Pixiv"
123+
case result.IsAniDB():
124+
picid = result.Data.AniDBAID
125+
source = "AniDB"
126+
case result.IsBcy():
127+
picid = result.Data.BcyID
128+
source = "Bcy"
129+
case result.IsDanbooru():
130+
picid = result.Data.DanbooruID
131+
source = "Danbooru"
132+
case result.IsDeviantArt():
133+
picid = result.Data.DeviantArtID
134+
source = "DeviantArt"
135+
case result.IsIMDb():
136+
picidstr = result.Data.IMDbID
137+
source = "IMDb"
138+
case result.IsPawoo():
139+
picid = result.Data.PawooID
140+
source = "Pawoo"
141+
case result.IsSankaku():
142+
picid = result.Data.SankakuID
143+
source = "Sankaku"
144+
case result.IsSeiga():
145+
picid = result.Data.SeigaID
146+
source = "Seiga"
147+
}
148+
if picid != 0 {
149+
ctx.SendChain(
150+
message.Text("我有把握是这个!"),
151+
message.Image(result.Header.Thumbnail),
152+
message.Text(
153+
"\n",
154+
"图源: ", source, "\n",
155+
"相似度: ", result.Header.Similarity, "\n",
156+
"标题: ", result.Data.Title, "\n",
157+
"插画ID: ", picid, "\n",
158+
"画师: ", result.Data.MemberName, "\n",
159+
"画师ID: ", result.Data.MemberID, "\n",
160+
"直链: ", "https://pixivel.moe/detail?id=", result.Data.PixivID,
161+
),
162+
)
163+
continue
164+
}
165+
if picidstr != "" {
166+
ctx.SendChain(
167+
message.Text("我有把握是这个!"),
168+
message.Image(result.Header.Thumbnail),
169+
message.Text(
170+
"\n",
171+
"图源: ", source, "\n",
172+
"相似度: ", result.Header.Similarity, "\n",
173+
"标题: ", result.Data.Title, "\n",
174+
"插画ID: ", picidstr, "\n",
175+
"画师: ", result.Data.MemberName, "\n",
176+
"画师ID: ", result.Data.MemberID, "\n",
177+
"直链: ", "https://pixivel.moe/detail?id=", result.Data.PixivID,
178+
),
179+
)
180+
continue
181+
}
182+
}
91183
ctx.SendChain(message.Text("ERROR:", err))
92184
} else {
93-
// 返回SauceNAO的结果
94-
ctx.SendChain(
95-
message.Text("我有把握是这个!"),
96-
message.Image(result[0].Thumbnail),
97-
message.Text(
98-
"\n",
99-
"相似度:", result[0].Similarity, "\n",
100-
"标题:", result[0].Title, "\n",
101-
"插画ID:", result[0].PixivID, "\n",
102-
"画师:", result[0].MemberName, "\n",
103-
"画师ID:", result[0].MemberID, "\n",
104-
"直链:", "https://pixivel.moe/detail?id=", result[0].PixivID,
105-
),
106-
)
107-
continue
185+
ctx.SendChain(message.Text("请私聊发送 设置 saucenao api key [apikey] 以启用 saucenao 搜图, key 请前往 https://saucenao.com/user.php?page=search-api 获取"))
108186
}
109187
// ascii2d 搜索
110188
if result, err := ascii2d.Ascii2d(pic); err != nil {
@@ -116,7 +194,7 @@ func init() { // 插件主体
116194
msg = append(msg, ctxext.FakeSenderForwardNode(ctx,
117195
message.Image(result[i].Thumb),
118196
message.Text(fmt.Sprintf(
119-
"标题%s\n图源%s\n画师%s\n画师链接%s\n图片链接%s",
197+
"标题: %s\n图源: %s\n画师: %s\n画师链接: %s\n图片链接: %s",
120198
result[i].Name,
121199
result[i].Type,
122200
result[i].AuthNm,
@@ -134,4 +212,22 @@ func init() { // 插件主体
134212
}
135213
}
136214
})
215+
engine.OnRegex(`^设置\s?saucenao\s?api\s?key\s?([0-9a-f]{40})$`, zero.SuperUserPermission, zero.OnlyPrivate).SetBlock(true).
216+
Handle(func(ctx *zero.Ctx) {
217+
var err error
218+
saucenaocli, err = gophersauce.NewClient(&gophersauce.Settings{
219+
MaxResults: 1,
220+
APIKey: ctx.State["regex_matched"].([]string)[1],
221+
})
222+
if err != nil {
223+
ctx.SendChain(message.Text("ERROR:", err))
224+
return
225+
}
226+
err = os.WriteFile(apikeyfile, binary.StringToBytes(saucenaocli.APIKey), 0644)
227+
if err != nil {
228+
ctx.SendChain(message.Text("ERROR:", err))
229+
return
230+
}
231+
ctx.SendChain(message.Text("成功!"))
232+
})
137233
}

0 commit comments

Comments
 (0)