diff --git a/main.go b/main.go index a354c511a0..866ab7fd0e 100644 --- a/main.go +++ b/main.go @@ -132,6 +132,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/translation" // 翻译 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/vitsnyaru" // vits猫雷 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/vtb_quotation" // vtb语录 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wallet" // 钱包 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wangyiyun" // 网易云音乐热评 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenben" // 文本指令大全 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenxinAI" // 百度文心AI画图 diff --git a/plugin/score/sign_in.go b/plugin/score/sign_in.go index ad225277b0..c2253b207a 100644 --- a/plugin/score/sign_in.go +++ b/plugin/score/sign_in.go @@ -54,11 +54,6 @@ func init() { } sdb = initialize(engine.DataFolder() + "score.db") }() - zero.OnFullMatch("查看我的钱包").SetBlock(true).Handle(func(ctx *zero.Ctx) { - uid := ctx.Event.UserID - money := wallet.GetWalletOf(uid) - ctx.SendChain(message.At(uid), message.Text("你的钱包当前有", money, "ATRI币")) - }) engine.OnFullMatch("签到").Limit(ctxext.LimitByUser).SetBlock(true). Handle(func(ctx *zero.Ctx) { uid := ctx.Event.UserID @@ -275,88 +270,6 @@ func init() { } ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + drawedFile)) }) - engine.OnFullMatch("查看钱包排名", zero.OnlyGroup).Limit(ctxext.LimitByGroup).SetBlock(true). - Handle(func(ctx *zero.Ctx) { - gid := strconv.FormatInt(ctx.Event.GroupID, 10) - today := time.Now().Format("20060102") - drawedFile := cachePath + gid + today + "walletRank.png" - if file.IsExist(drawedFile) { - ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + drawedFile)) - return - } - // 无缓存获取群员列表 - temp := ctx.GetThisGroupMemberListNoCache().Array() - usergroup := make([]int64, len(temp)) - for i, info := range temp { - usergroup[i] = info.Get("user_id").Int() - } - // 获取钱包信息 - st, err := wallet.GetGroupWalletOf(true, usergroup...) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - if len(st) == 0 { - ctx.SendChain(message.Text("ERROR: 当前没人获取过ATRI币")) - return - } else if len(st) > 10 { - st = st[:10] - } - _, err = file.GetLazyData(text.FontFile, control.Md5File, true) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - b, err := os.ReadFile(text.FontFile) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - font, err := freetype.ParseFont(b) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - f, err := os.Create(drawedFile) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - var bars []chart.Value - for _, v := range st { - if v.Money != 0 { - bars = append(bars, chart.Value{ - Label: ctx.CardOrNickName(v.UID), - Value: float64(v.Money), - }) - } - } - err = chart.BarChart{ - Font: font, - Title: "ATRI币排名(1天只刷新1次)", - Background: chart.Style{ - Padding: chart.Box{ - Top: 40, - }, - }, - YAxis: chart.YAxis{ - Range: &chart.ContinuousRange{ - Min: 0, - Max: math.Ceil(bars[0].Value/10) * 10, - }, - }, - Height: 500, - BarWidth: 50, - Bars: bars, - }.Render(chart.PNG, f) - _ = f.Close() - if err != nil { - _ = os.Remove(drawedFile) - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + drawedFile)) - }) } func getHourWord(t time.Time) string { diff --git a/plugin/wallet/wallet.go b/plugin/wallet/wallet.go new file mode 100644 index 0000000000..e8c4898cd0 --- /dev/null +++ b/plugin/wallet/wallet.go @@ -0,0 +1,125 @@ +// Package wallet 钱包 +package wallet + +import ( + "math" + "os" + "strconv" + "time" + + "github.com/FloatTech/AnimeAPI/wallet" + "github.com/FloatTech/floatbox/file" + ctrl "github.com/FloatTech/zbpctrl" + "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/img/text" + "github.com/golang/freetype" + "github.com/wcharczuk/go-chart/v2" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +func init() { + en := control.Register("wallet", &ctrl.Options[*zero.Ctx]{ + DisableOnDefault: false, + Brief: "钱包", + Help: "- 查看我的钱包\n- 查看钱包排名", + PrivateDataFolder: "wallet", + }) + cachePath := en.DataFolder() + "cache/" + go func() { + _ = os.RemoveAll(cachePath) + err := os.MkdirAll(cachePath, 0755) + if err != nil { + panic(err) + } + }() + en.OnFullMatch("查看我的钱包").SetBlock(true).Handle(func(ctx *zero.Ctx) { + uid := ctx.Event.UserID + money := wallet.GetWalletOf(uid) + ctx.SendChain(message.At(uid), message.Text("你的钱包当前有", money, "ATRI币")) + }) + + en.OnFullMatch("查看钱包排名", zero.OnlyGroup).Limit(ctxext.LimitByGroup).SetBlock(true). + Handle(func(ctx *zero.Ctx) { + gid := strconv.FormatInt(ctx.Event.GroupID, 10) + today := time.Now().Format("20060102") + drawedFile := cachePath + gid + today + "walletRank.png" + if file.IsExist(drawedFile) { + ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + drawedFile)) + return + } + // 无缓存获取群员列表 + temp := ctx.GetThisGroupMemberListNoCache().Array() + usergroup := make([]int64, len(temp)) + for i, info := range temp { + usergroup[i] = info.Get("user_id").Int() + } + // 获取钱包信息 + st, err := wallet.GetGroupWalletOf(true, usergroup...) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + if len(st) == 0 { + ctx.SendChain(message.Text("ERROR: 当前没人获取过ATRI币")) + return + } else if len(st) > 10 { + st = st[:10] + } + _, err = file.GetLazyData(text.FontFile, control.Md5File, true) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + b, err := os.ReadFile(text.FontFile) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + font, err := freetype.ParseFont(b) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + f, err := os.Create(drawedFile) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + var bars []chart.Value + for _, v := range st { + if v.Money != 0 { + bars = append(bars, chart.Value{ + Label: ctx.CardOrNickName(v.UID), + Value: float64(v.Money), + }) + } + } + err = chart.BarChart{ + Font: font, + Title: "ATRI币排名(1天只刷新1次)", + Background: chart.Style{ + Padding: chart.Box{ + Top: 40, + }, + }, + YAxis: chart.YAxis{ + Range: &chart.ContinuousRange{ + Min: 0, + Max: math.Ceil(bars[0].Value/10) * 10, + }, + }, + Height: 500, + BarWidth: 50, + Bars: bars, + }.Render(chart.PNG, f) + _ = f.Close() + if err != nil { + _ = os.Remove(drawedFile) + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + drawedFile)) + }) +}