Skip to content

Commit 68980a6

Browse files
committed
🐛 ✨ 增加百人一首 修复Lazy不关闭
1 parent 636f14c commit 68980a6

File tree

9 files changed

+204
-65
lines changed

9 files changed

+204
-65
lines changed

data

go.mod

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

55
require (
6-
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da
6+
github.com/FloatTech/AnimeAPI v1.3.2-0.20220328090901-d01ce41ecaca
77
github.com/FloatTech/sqlite v0.2.1
8-
github.com/FloatTech/zbputils v1.3.2-0.20220327063325-1389d5a92fff
8+
github.com/FloatTech/zbputils v1.3.2-0.20220328090754-b949b4e868e5
99
github.com/antchfx/htmlquery v1.2.4
1010
github.com/corona10/goimagehash v1.0.3
1111
github.com/fogleman/gg v1.3.0
1212
github.com/fumiama/cron v1.3.0
1313
github.com/fumiama/go-base16384 v1.4.0
14-
github.com/fumiama/go-registry v0.1.1
14+
github.com/fumiama/go-registry v0.1.2
1515
github.com/fumiama/gofastTEA v0.0.10
1616
github.com/fumiama/gotracemoe v0.0.3
1717
github.com/fumiama/sqlite3 v1.14.6
@@ -47,7 +47,7 @@ require (
4747
github.com/tklauser/numcpus v0.4.0 // indirect
4848
github.com/yusufpapurcu/wmi v1.2.2 // indirect
4949
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
50-
golang.org/x/sys v0.0.0-20220325203850-36772127a21f // indirect
50+
golang.org/x/sys v0.0.0-20220327210214-530d0810a4d0 // indirect
5151
golang.org/x/text v0.3.7 // indirect
5252
modernc.org/libc v1.14.12 // indirect
5353
modernc.org/mathutil v1.4.1 // indirect

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da h1:KbJujP8k2/3BYRb+F292zLmDOV79uTOu/24n3fhIwRU=
2-
github.com/FloatTech/AnimeAPI v1.3.2-0.20220326161751-d0d2797b91da/go.mod h1:aC3EOKpb0R0VOdW9QIQCfqN6ZFymOfvCgzVY1/Fz3Og=
1+
github.com/FloatTech/AnimeAPI v1.3.2-0.20220328090901-d01ce41ecaca h1:mHrQLnuanvGeqc2EkKrNuBDSUMp8uhlPXBhLuinyMlI=
2+
github.com/FloatTech/AnimeAPI v1.3.2-0.20220328090901-d01ce41ecaca/go.mod h1:EPRv+7KfmYwTq8xeLXpZLqzyjw7692fWE+2InqAn8t0=
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.3.2-0.20220327063325-1389d5a92fff h1:h72B2RgFc4ObczhlS38+seue7/6CLhQBcOAwMe3TBmw=
6-
github.com/FloatTech/zbputils v1.3.2-0.20220327063325-1389d5a92fff/go.mod h1:qZlHzG1s1giQrXaosjOAA2utGNaPZjwJsVZfBog2bhg=
5+
github.com/FloatTech/zbputils v1.3.2-0.20220328090754-b949b4e868e5 h1:qHuSftyvTepeXLdFIBKuAy7Ni9jlNBxXxp03efkqUJY=
6+
github.com/FloatTech/zbputils v1.3.2-0.20220328090754-b949b4e868e5/go.mod h1:AcOSnCQjZe0jFzAre1YBwUXi/WQIKZXTD4pcsMro+p4=
77
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
88
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0=
99
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0=
@@ -33,8 +33,8 @@ github.com/fumiama/cron v1.3.0 h1:ZWlwuexF+HQHl3cYytEE5HNwD99q+3vNZF1GrEiXCFo=
3333
github.com/fumiama/cron v1.3.0/go.mod h1:bz5Izvgi/xEUI8tlBN8BI2jr9Moo8N4or0KV8xXuPDY=
3434
github.com/fumiama/go-base16384 v1.4.0 h1:4KrtewnmAChrZjPA7/QYc72t+vvsKF+DYB0q1iRPdpo=
3535
github.com/fumiama/go-base16384 v1.4.0/go.mod h1:OEn+947GV5gsbTAnyuUW/SrfxJYUdYupSIQXOuGOcXM=
36-
github.com/fumiama/go-registry v0.1.1 h1:cmCRizjXHFW2ApwUHCXi8wKLJ6Gtt4GrShJlamGPbVI=
37-
github.com/fumiama/go-registry v0.1.1/go.mod h1:iJT3DVgH7KXpJZs6waXEjnWtJPUBBGhF+ByJIMRfngk=
36+
github.com/fumiama/go-registry v0.1.2 h1:mlH9QtbgzfV+uvm5YM8YZau/2yrekVziPuyn3UTzrYw=
37+
github.com/fumiama/go-registry v0.1.2/go.mod h1:iJT3DVgH7KXpJZs6waXEjnWtJPUBBGhF+ByJIMRfngk=
3838
github.com/fumiama/gofastTEA v0.0.10 h1:JJJ+brWD4kie+mmK2TkspDXKzqq0IjXm89aGYfoGhhQ=
3939
github.com/fumiama/gofastTEA v0.0.10/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk=
4040
github.com/fumiama/gotracemoe v0.0.3 h1:iI5EbE9A3UUbfukG6+/soYPjp1S31eCNYf4tw7s6/Jc=
@@ -168,8 +168,8 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc
168168
golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
169169
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
170170
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
171-
golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU=
172-
golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
171+
golang.org/x/sys v0.0.0-20220327210214-530d0810a4d0 h1:G6WAvvcMaaFYQhMbC0L5ZWNExEcJ3j3yFTxx4mwOHtM=
172+
golang.org/x/sys v0.0.0-20220327210214-530d0810a4d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
173173
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
174174
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
175175
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ import (
8080
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/gif" // 制图
8181
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/github" // 搜索GitHub仓库
8282
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/hs" // 炉石
83+
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/hyaku" // 百人一首
8384
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/image_finder" // 关键字搜图
8485
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/inject" // 注入指令
8586
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/jandan" // 煎蛋网无聊图

plugin/ai_reply/ai_tts.go

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,7 @@ import (
2323

2424
const ttsServiceName = "tts"
2525

26-
var (
27-
t = &ttsInstances{
28-
m: map[string]tts.TTS{
29-
"百度女声": baidutts.NewBaiduTTS(0),
30-
"百度男声": baidutts.NewBaiduTTS(1),
31-
"百度度逍遥": baidutts.NewBaiduTTS(3),
32-
"百度度丫丫": baidutts.NewBaiduTTS(4),
33-
"拟声鸟阿梓": mockingbird.NewMockingBirdTTS(0),
34-
"拟声鸟药水哥": mockingbird.NewMockingBirdTTS(1),
35-
},
36-
l: []string{"拟声鸟阿梓", "拟声鸟药水哥", "百度女声", "百度男声", "百度度逍遥", "百度度丫丫"},
37-
}
38-
re = regexp.MustCompile(`(\-|\+)?\d+(\.\d+)?`)
39-
)
26+
var re = regexp.MustCompile(`(\-|\+)?\d+(\.\d+)?`)
4027

4128
type ttsInstances struct {
4229
sync.RWMutex
@@ -53,6 +40,17 @@ func (t *ttsInstances) List() []string {
5340
}
5441

5542
func init() {
43+
t := &ttsInstances{
44+
m: map[string]tts.TTS{
45+
"百度女声": baidutts.NewBaiduTTS(0),
46+
"百度男声": baidutts.NewBaiduTTS(1),
47+
"百度度逍遥": baidutts.NewBaiduTTS(3),
48+
"百度度丫丫": baidutts.NewBaiduTTS(4),
49+
"拟声鸟阿梓": nil,
50+
"拟声鸟药水哥": nil,
51+
},
52+
l: []string{"拟声鸟阿梓", "拟声鸟药水哥", "百度女声", "百度男声", "百度度逍遥", "百度度丫丫"},
53+
}
5654
engine := control.Register(ttsServiceName, order.AcquirePrio(), &control.Options{
5755
DisableOnDefault: true,
5856
Help: "语音回复(包括拟声鸟和百度)\n" +
@@ -65,19 +63,21 @@ func init() {
6563
msg := ctx.ExtractPlainText()
6664
r := aireply.NewAIReply(getReplyMode(ctx))
6765
tts := t.new(t.getSoundMode(ctx))
68-
ctx.SendChain(message.Record(tts.Speak(ctx.Event.UserID, func() string {
69-
reply := r.TalkPlain(msg, zero.BotConfig.NickName[0])
70-
reply = re.ReplaceAllStringFunc(reply, func(s string) string {
71-
f, err := strconv.ParseFloat(s, 64)
72-
if err != nil {
73-
log.Errorln("[tts]:", err)
74-
return s
75-
}
76-
return numcn.EncodeFromFloat64(f)
77-
})
78-
log.Println("[tts]:", reply)
79-
return reply
80-
})))
66+
if tts != nil {
67+
ctx.SendChain(message.Record(tts.Speak(ctx.Event.UserID, func() string {
68+
reply := r.TalkPlain(msg, zero.BotConfig.NickName[0])
69+
reply = re.ReplaceAllStringFunc(reply, func(s string) string {
70+
f, err := strconv.ParseFloat(s, 64)
71+
if err != nil {
72+
log.Errorln("[tts]:", err)
73+
return s
74+
}
75+
return numcn.EncodeFromFloat64(f)
76+
})
77+
log.Println("[tts]:", reply)
78+
return reply
79+
})))
80+
}
8181
})
8282
engine.OnRegex(`^设置语音模式(.*)$`, ctxext.FirstValueInList(t)).SetBlock(true).
8383
Handle(func(ctx *zero.Ctx) {
@@ -98,8 +98,23 @@ func init() {
9898
}
9999

100100
// new 语音简单工厂
101-
func (t *ttsInstances) new(name string) tts.TTS {
102-
return t.m[name]
101+
func (t *ttsInstances) new(name string) (ts tts.TTS) {
102+
t.RLock()
103+
ts = t.m[name]
104+
t.RUnlock()
105+
if ts == nil {
106+
switch name {
107+
case "拟声鸟阿梓":
108+
t.Lock()
109+
ts, _ = mockingbird.NewMockingBirdTTS(0)
110+
t.Unlock()
111+
case "拟声鸟药水哥":
112+
t.Lock()
113+
ts, _ = mockingbird.NewMockingBirdTTS(1)
114+
t.Unlock()
115+
}
116+
}
117+
return
103118
}
104119

105120
func (t *ttsInstances) setSoundMode(ctx *zero.Ctx, name string) error {

plugin/fortune/fortune.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@ func init() {
5858
"- 设置底图[车万 | DC4 | 爱因斯坦 | 星空列车 | 樱云之恋 | 富婆妹 | 李清歌 | 公主连结 | 原神 | 明日方舟 | 碧蓝航线 | 碧蓝幻想 | 战双 | 阴阳师 | 赛马娘 | 东方归言录]",
5959
PublicDataFolder: "Fortune",
6060
})
61+
_ = os.RemoveAll(cache)
62+
err := os.MkdirAll(cache, 0755)
63+
if err != nil {
64+
panic(err)
65+
}
6166
go func() {
6267
for i, s := range table {
6368
index[s] = uint8(i)
6469
}
65-
_ = os.RemoveAll(cache)
66-
err := os.MkdirAll(cache, 0755)
67-
if err != nil {
68-
panic(err)
69-
}
7070
data, err := file.GetLazyData(omikujson, true, false)
7171
if err != nil {
7272
panic(err)
@@ -75,7 +75,9 @@ func init() {
7575
if err != nil {
7676
panic(err)
7777
}
78-
_, err = file.GetLazyData(font, false, true)
78+
}()
79+
go func() {
80+
_, err := file.GetLazyData(font, false, true)
7981
if err != nil {
8082
panic(err)
8183
}

plugin/hyaku/main.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package hyaku
2+
3+
import (
4+
"encoding/csv"
5+
"fmt"
6+
"math/rand"
7+
"os"
8+
"strconv"
9+
"unsafe"
10+
11+
"github.com/FloatTech/zbputils/control"
12+
"github.com/FloatTech/zbputils/control/order"
13+
"github.com/FloatTech/zbputils/ctxext"
14+
"github.com/FloatTech/zbputils/file"
15+
zero "github.com/wdvxdr1123/ZeroBot"
16+
"github.com/wdvxdr1123/ZeroBot/message"
17+
)
18+
19+
const bed = "https://gitcode.net/u011570312/OguraHyakuninIsshu/-/raw/master/"
20+
21+
type line struct {
22+
no, 歌人, 上の句, 下の句, 上の句ひらがな, 下の句ひらがな string
23+
}
24+
25+
var lines [100]*line
26+
27+
func init() {
28+
engine := control.Register("hyaku", order.AcquirePrio(), &control.Options{
29+
DisableOnDefault: false,
30+
Help: "百人一首\n" +
31+
"- 百人一首(随机发一首)\n" +
32+
"- 百人一首之n",
33+
PrivateDataFolder: "hyaku",
34+
})
35+
csvfile := engine.DataFolder() + "hyaku.csv"
36+
go func() {
37+
if file.IsNotExist(csvfile) {
38+
err := file.DownloadTo(bed+"小倉百人一首.csv", csvfile, true)
39+
if err != nil {
40+
_ = os.Remove(csvfile)
41+
panic(err)
42+
}
43+
}
44+
f, err := os.Open(csvfile)
45+
if err != nil {
46+
panic(err)
47+
}
48+
records, err := csv.NewReader(f).ReadAll()
49+
if err != nil {
50+
panic(err)
51+
}
52+
records = records[1:] // skip title
53+
if len(records) != 100 {
54+
panic("invalid csvfile")
55+
}
56+
for j, r := range records {
57+
i, err := strconv.Atoi(r[0])
58+
if err != nil {
59+
panic(err)
60+
}
61+
i--
62+
if j != i {
63+
panic("invalid csvfile")
64+
}
65+
lines[i] = (*line)(*(*unsafe.Pointer)(unsafe.Pointer(&r)))
66+
}
67+
}()
68+
engine.OnFullMatch("百人一首").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) {
69+
i := rand.Intn(100)
70+
ctx.SendChain(
71+
message.Image(fmt.Sprintf(bed+"img/%03d.jpg", i+1)),
72+
message.Text("\n",
73+
"●番 号: ", lines[i].no, "\n",
74+
"●歌 人: ", lines[i].歌人, "\n",
75+
"●上の句: ", lines[i].上の句, "\n",
76+
"●下の句: ", lines[i].下の句, "\n",
77+
"●上の句ひらがな: ", lines[i].上の句ひらがな, "\n",
78+
"●下の句ひらがな: ", lines[i].下の句ひらがな, "\n",
79+
),
80+
message.Image(fmt.Sprintf(bed+"img/%03d.png", i+1)),
81+
)
82+
})
83+
engine.OnRegex(`^百人一首之\s?(\d+)$`).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) {
84+
i, err := strconv.Atoi(ctx.State["regex_matched"].([]string)[1])
85+
if err != nil {
86+
ctx.SendChain(message.Text("ERROR:", err))
87+
return
88+
}
89+
if i > 100 || i < 1 {
90+
ctx.SendChain(message.Text("ERROR:超出范围"))
91+
return
92+
}
93+
i--
94+
ctx.SendChain(
95+
message.Image(fmt.Sprintf(bed+"img/%03d.jpg", i+1)),
96+
message.Text("\n",
97+
"●番 号: ", lines[i].no, "\n",
98+
"●歌 人: ", lines[i].歌人, "\n",
99+
"●上の句: ", lines[i].上の句, "\n",
100+
"●下の句: ", lines[i].下の句, "\n",
101+
"●上の句ひらがな: ", lines[i].上の句ひらがな, "\n",
102+
"●下の句ひらがな: ", lines[i].下の句ひらがな, "\n",
103+
),
104+
message.Image(fmt.Sprintf(bed+"img/%03d.png", i+1)),
105+
)
106+
})
107+
}

plugin/score/sign_in.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,6 @@ func init() {
4747
if err != nil {
4848
panic(err)
4949
}
50-
_, err = file.GetLazyData(text.BoldFontFile, false, true)
51-
if err != nil {
52-
panic(err)
53-
}
54-
_, err = file.GetLazyData(text.FontFile, false, true)
55-
if err != nil {
56-
panic(err)
57-
}
5850
sdb = initialize(engine.DataFolder() + "score.db")
5951
log.Println("[score]加载score数据库")
6052
}()
@@ -99,6 +91,11 @@ func init() {
9991

10092
monthWord := now.Format("01/02")
10193
hourWord := getHourWord(now)
94+
_, err = file.GetLazyData(text.BoldFontFile, false, true)
95+
if err != nil {
96+
ctx.SendChain(message.Text("ERROR:", err))
97+
return
98+
}
10299
if err = canvas.LoadFontFace(text.BoldFontFile, float64(back.Bounds().Size().X)*0.1); err != nil {
103100
ctx.SendChain(message.Text("ERROR:", err))
104101
return
@@ -107,6 +104,11 @@ func init() {
107104
canvas.DrawString(hourWord, float64(back.Bounds().Size().X)*0.1, float64(back.Bounds().Size().Y)*1.2)
108105
canvas.DrawString(monthWord, float64(back.Bounds().Size().X)*0.6, float64(back.Bounds().Size().Y)*1.2)
109106
nickName := ctx.CardOrNickName(uid)
107+
_, err = file.GetLazyData(text.FontFile, false, true)
108+
if err != nil {
109+
ctx.SendChain(message.Text("ERROR:", err))
110+
return
111+
}
110112
if err = canvas.LoadFontFace(text.FontFile, float64(back.Bounds().Size().X)*0.04); err != nil {
111113
ctx.SendChain(message.Text("ERROR:", err))
112114
return

0 commit comments

Comments
 (0)