Skip to content

Commit 864f92a

Browse files
authored
增加签到3 (#644)
1 parent 6ea50cf commit 864f92a

File tree

5 files changed

+124
-6
lines changed

5 files changed

+124
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,7 @@ print("run[CQ:image,file="+j["img"]+"]")
12391239

12401240
- [x] 签到
12411241
- [x] 获得签到背景[@xxx] | 获得签到背景
1242+
- [x] 设置[默认]签到预设(1~9)
12421243
- [x] 查看等级排名
12431244
- 注:跨群排行
12441245
- [x] 查看我的钱包

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
github.com/FloatTech/sqlite v1.5.7
1313
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b
1414
github.com/FloatTech/zbpctrl v1.5.3-0.20230316111343-dd078fa43fe3
15-
github.com/FloatTech/zbputils v1.6.2-0.20230316111555-2d1ec958de04
15+
github.com/FloatTech/zbputils v1.6.2-0.20230320041820-731f824ff8f4
1616
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e
1717
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
1818
github.com/antchfx/htmlquery v1.2.5
@@ -24,7 +24,6 @@ require (
2424
github.com/fumiama/go-base16384 v1.6.4
2525
github.com/fumiama/go-registry v0.2.6
2626
github.com/fumiama/gotracemoe v0.0.3
27-
github.com/fumiama/imgsz v0.0.2
2827
github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565
2928
github.com/fumiama/unibase2n v0.0.0-20221020155353-02876e777430
3029
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
@@ -52,6 +51,7 @@ require (
5251
github.com/faiface/beep v1.1.0 // indirect
5352
github.com/fumiama/go-simple-protobuf v0.1.0 // indirect
5453
github.com/fumiama/gofastTEA v0.0.10 // indirect
54+
github.com/fumiama/imgsz v0.0.2 // indirect
5555
github.com/gabriel-vasile/mimetype v1.0.4 // indirect
5656
github.com/go-ole/go-ole v1.2.6 // indirect
5757
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ github.com/FloatTech/zbpctrl v1.5.3-0.20230316111343-dd078fa43fe3 h1:mCVrTvS2LMN
2020
github.com/FloatTech/zbpctrl v1.5.3-0.20230316111343-dd078fa43fe3/go.mod h1:IagyEhY38VcbbQgVRzAM9f9mhaUn90rM5BTPfudtl1g=
2121
github.com/FloatTech/zbputils v1.6.2-0.20230316111555-2d1ec958de04 h1:ovL+7SAPTBCXy6XNRSdJhNvHtbueWCwEb/jtztmizAc=
2222
github.com/FloatTech/zbputils v1.6.2-0.20230316111555-2d1ec958de04/go.mod h1:jUmX4WBgGRcfjGeIobmVao10AHmXtL3gT00qLbx3/yo=
23+
github.com/FloatTech/zbputils v1.6.2-0.20230320041820-731f824ff8f4 h1:OrqldcPSJWnPxZtmkOd9HJmFFD3rl0Qrob89rHHpoXw=
24+
github.com/FloatTech/zbputils v1.6.2-0.20230320041820-731f824ff8f4/go.mod h1:jUmX4WBgGRcfjGeIobmVao10AHmXtL3gT00qLbx3/yo=
2325
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
2426
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA=
2527
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w=

plugin/score/draw.go

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Package score 签到,答题得分
1+
// Package score 签到
22
package score
33

44
import (
@@ -175,3 +175,97 @@ func drawScore15(a *scdata) (image.Image, error) {
175175
canvas.DrawString(fmt.Sprintf("%d/%d", a.level, nextrankScore), float64(back.Bounds().Size().X)*0.75, float64(back.Bounds().Size().Y)*1.62)
176176
return canvas.Image(), nil
177177
}
178+
179+
func drawScore17(a *scdata) (image.Image, error) {
180+
getAvatar, err := initPic(a.picfile, a.uid)
181+
if err != nil {
182+
return nil, err
183+
}
184+
back, err := gg.LoadImage(a.picfile)
185+
if err != nil {
186+
return nil, err
187+
}
188+
// 避免图片过大,最大 1280*720
189+
back = imgfactory.Limit(back, 1280, 720)
190+
imgDX := back.Bounds().Dx()
191+
imgDY := back.Bounds().Dy()
192+
canvas := gg.NewContext(imgDX, imgDY)
193+
194+
// draw background
195+
canvas.DrawImage(back, 0, 0)
196+
197+
// Create smaller Aero Style boxes
198+
createAeroBox := func(x, y, width, height float64) {
199+
aeroStyle := gg.NewContext(int(width), int(height))
200+
aeroStyle.DrawRoundedRectangle(0, 0, width, height, 8)
201+
aeroStyle.SetLineWidth(2)
202+
aeroStyle.SetRGBA255(255, 255, 255, 100)
203+
aeroStyle.StrokePreserve()
204+
aeroStyle.SetRGBA255(255, 255, 255, 140)
205+
aeroStyle.Fill()
206+
canvas.DrawImage(aeroStyle.Image(), int(x), int(y))
207+
}
208+
209+
// draw aero boxes for text
210+
createAeroBox(20, float64(imgDY-120), 280, 100) // left bottom
211+
createAeroBox(float64(imgDX-272), float64(imgDY-60), 252, 40) // right bottom
212+
213+
// draw info(name, coin, etc)
214+
hourWord := getHourWord(time.Now())
215+
canvas.SetRGB255(0, 0, 0)
216+
data, err := file.GetLazyData(text.MaokenFontFile, control.Md5File, true)
217+
if err != nil {
218+
return nil, err
219+
}
220+
if err = canvas.ParseFontFace(data, 24); err != nil {
221+
return nil, err
222+
}
223+
getNameLengthWidth, _ := canvas.MeasureString(a.nickname)
224+
// draw aero box
225+
if getNameLengthWidth > 140 {
226+
createAeroBox(20, 40, 140+getNameLengthWidth, 100) // left top
227+
} else {
228+
createAeroBox(20, 40, 280, 100) // left top
229+
}
230+
231+
// draw avatar
232+
avatar, _, err := image.Decode(bytes.NewReader(getAvatar))
233+
if err != nil {
234+
return nil, err
235+
}
236+
avatarf := imgfactory.Size(avatar, 100, 100)
237+
canvas.DrawImage(avatarf.Circle(0).Image(), 30, 20)
238+
239+
canvas.DrawString(a.nickname, 140, 80)
240+
canvas.DrawStringAnchored(hourWord, 140, 120, 0, 0)
241+
242+
if err = canvas.ParseFontFace(data, 20); err != nil {
243+
return nil, err
244+
}
245+
canvas.DrawStringAnchored("ATRI币 + "+strconv.Itoa(a.inc), 40, float64(imgDY-90), 0, 0)
246+
canvas.DrawStringAnchored("当前ATRI币:"+strconv.Itoa(a.score), 40, float64(imgDY-60), 0, 0)
247+
canvas.DrawStringAnchored("LEVEL: "+strconv.Itoa(getrank(a.level)), 40, float64(imgDY-30), 0, 0)
248+
249+
// Draw Info(Time, etc.)
250+
getTime := time.Now().Format("2006-01-02 15:04:05")
251+
canvas.DrawStringAnchored(getTime, float64(imgDX)-146, float64(imgDY)-40, 0.5, 0.5) // time
252+
var nextrankScore int
253+
if a.rank < 10 {
254+
nextrankScore = rankArray[a.rank+1]
255+
} else {
256+
nextrankScore = SCOREMAX
257+
}
258+
nextLevelStyle := strconv.Itoa(a.level) + "/" + strconv.Itoa(nextrankScore)
259+
canvas.DrawStringAnchored(nextLevelStyle, 190, float64(imgDY-30), 0, 0) // time
260+
261+
// Draw Zerobot-Plugin information
262+
canvas.SetRGB255(255, 255, 255)
263+
if err = canvas.ParseFontFace(data, 20); err != nil {
264+
return nil, err
265+
}
266+
canvas.DrawStringAnchored("Created By Zerobot-Plugin "+banner.Version, float64(imgDX)/2, float64(imgDY)-20, 0.5, 0.5) // zbp
267+
canvas.SetRGB255(0, 0, 0)
268+
canvas.DrawStringAnchored("Created By Zerobot-Plugin "+banner.Version, float64(imgDX)/2-3, float64(imgDY)-19, 0.5, 0.5) // zbp
269+
canvas.SetRGB255(255, 255, 255)
270+
return canvas.Image(), nil
271+
}

plugin/score/sign_in.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Package score 签到,答题得分
1+
// Package score 签到
22
package score
33

44
import (
@@ -40,7 +40,7 @@ var (
4040
engine = control.Register("score", &ctrl.Options[*zero.Ctx]{
4141
DisableOnDefault: false,
4242
Brief: "签到",
43-
Help: "- 签到\n- 获得签到背景[@xxx] | 获得签到背景\n- 查看等级排名\n注:为跨群排名\n- 查看我的钱包\n- 查看钱包排名\n注:为本群排行,若群人数太多不建议使用该功能!!!",
43+
Help: "- 签到\n- 获得签到背景[@xxx] | 获得签到背景\n- 设置[默认]签到预设(1~9)\n- 查看等级排名\n注:为跨群排名\n- 查看我的钱包\n- 查看钱包排名\n注:为本群排行,若群人数太多不建议使用该功能!!!",
4444
PrivateDataFolder: "score",
4545
})
4646
initDef = fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
@@ -83,6 +83,10 @@ func init() {
8383
_ = m.Manager.GetExtra(defKeyID, &key)
8484
}
8585
}
86+
if !isExist(key) {
87+
ctx.SendChain(message.Text("未找到签到设定:", key)) // 避免签到配置错误造成无图发送,但是已经签到的情况
88+
return
89+
}
8690
uid := ctx.Event.UserID
8791
today := time.Now().Format("20060102")
8892
// 签到图片
@@ -156,8 +160,14 @@ func init() {
156160
ctx.SendChain(message.Text("ERROR: ", err))
157161
return
158162
}
163+
case "3":
164+
drawimage, err = drawScore17(&alldata)
165+
if err != nil {
166+
ctx.SendChain(message.Text("ERROR: ", err))
167+
return
168+
}
159169
default:
160-
ctx.SendChain(message.Text("未找到签到设定:", key))
170+
ctx.SendChain(message.Text("未添加签到设定:", key))
161171
return
162172
}
163173
// done.
@@ -274,6 +284,10 @@ func init() {
274284
} else {
275285
s := ctx.State["regex_matched"].([]string)[1]
276286
key := ctx.State["regex_matched"].([]string)[2]
287+
if !isExist(key) {
288+
ctx.SendChain(message.Text("未找到签到设定:", key)) // 避免签到配置错误
289+
return
290+
}
277291
gid := ctx.Event.GroupID
278292
if gid == 0 {
279293
gid = -ctx.Event.UserID
@@ -339,3 +353,10 @@ func initPic(picFile string, uid int64) (avatar []byte, err error) {
339353
}
340354
return avatar, os.WriteFile(picFile, data, 0644)
341355
}
356+
357+
func isExist(key string) bool {
358+
if key != "1" && key != "2" && key != "3" {
359+
return false
360+
}
361+
return true
362+
}

0 commit comments

Comments
 (0)