From 410dd05600b777158d17873b947f5772df9d915e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=87=7E?= <158024940+xyy0411@users.noreply.github.com> Date: Wed, 9 Oct 2024 20:59:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=89=9B=E7=89=9B=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#996)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/niuniu/main.go | 9 ++- plugin/niuniu/model.go | 146 ++++++++++++++++++++++++++++++++++++++ plugin/niuniu/utils.go | 157 ++++------------------------------------- 3 files changed, 165 insertions(+), 147 deletions(-) diff --git a/plugin/niuniu/main.go b/plugin/niuniu/main.go index 22d7cb33..e00c6611 100644 --- a/plugin/niuniu/main.go +++ b/plugin/niuniu/main.go @@ -122,7 +122,7 @@ func init() { return } - money, err := purchaseItem(n, info) + money, err := info.purchaseItem(n) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) return @@ -296,7 +296,7 @@ func init() { return } - messages, err := processNiuniuAction(t, &niuniu, fiancee[1]) + messages, err := niuniu.processNiuNiuAction(t, fiancee[1]) if err != nil { ctx.SendChain(message.Text(err)) return @@ -378,7 +378,7 @@ func init() { jjLimiter.Delete(t) return } - fencingResult, f1, err := processJJuAction(&myniuniu, &adduserniuniu, t, fiancee[1]) + fencingResult, err := myniuniu.processJJuAction(&adduserniuniu, t, fiancee[1]) if err != nil { ctx.SendChain(message.Text(err)) return @@ -388,7 +388,6 @@ func init() { ctx.SendChain(message.Text("ERROR:", err)) return } - adduserniuniu.Length = f1 if err = db.insertNiuNiu(&adduserniuniu, gid); err != nil { ctx.SendChain(message.Text("ERROR:", err)) @@ -425,7 +424,7 @@ func init() { if c.Count > 5 { ctx.SendChain(message.Text(randomChoice([]string{fmt.Sprintf("你们太厉害了,对方已经被你们打了%d次了,你们可以继续找他🤺", c.Count), "你们不要再找ta🤺啦!"}))) - // 保证只发生一次 + // 保证只发送一次 if c.Count < 7 { id := ctx.SendPrivateMessage(adduser, message.Text(fmt.Sprintf("你在%d群里已经被厥冒烟了,快去群里赎回你原本的牛牛!\n发送:`赎牛牛`即可!", gid))) diff --git a/plugin/niuniu/model.go b/plugin/niuniu/model.go index a3d44455..9d1ce95e 100644 --- a/plugin/niuniu/model.go +++ b/plugin/niuniu/model.go @@ -2,6 +2,7 @@ package niuniu import ( + "errors" "fmt" "math" "math/rand" @@ -129,6 +130,151 @@ func (u *userInfo) useShenJi(adduserniuniu float64) (string, float64, float64) { return r, myLength, adduserniuniu + 0.7*change } +func (u *userInfo) processNiuNiuAction(t string, props string) (string, error) { + var ( + messages string + info userInfo + err error + f float64 + ) + load, ok := prop.Load(t) + info = *u + if props != "" { + if !contains(t, dajiaoProp) { + return "", errors.New("道具不能混着用哦") + } + if err = u.createUserInfoByProps(props); err != nil { + return "", err + } + } + switch { + case ok && load.Count > 1 && time.Since(load.TimeLimit) < time.Minute*8: + messages, f = generateRandomStingTwo(u.Length) + u.Length = f + errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(load.TimeLimit)) + err = errors.New(errMessage) + + case u.WeiGe-info.WeiGe != 0: + messages, f = u.useWeiGe() + u.Length = f + updateMap(t, true) + + case u.Philter-info.Philter != 0: + messages, f = u.usePhilter() + u.Length = f + updateMap(t, true) + + default: + messages, f = generateRandomStingTwo(u.Length) + u.Length = f + } + return messages, err +} + +func (u *userInfo) createUserInfoByProps(props string) error { + var ( + err error + ) + switch props { + case "伟哥": + if u.WeiGe > 0 { + u.WeiGe-- + } else { + err = errors.New("你还没有伟哥呢,不能使用") + } + case "媚药": + if u.Philter > 0 { + u.Philter-- + } else { + err = errors.New("你还没有媚药呢,不能使用") + } + case "击剑神器": + if u.Artifact > 0 { + u.Artifact-- + } else { + err = errors.New("你还没有击剑神器呢,不能使用") + } + case "击剑神稽": + if u.ShenJi > 0 { + u.ShenJi-- + } else { + err = errors.New("你还没有击剑神稽呢,不能使用") + } + default: + err = errors.New("道具不存在") + } + return err +} + +// 接收值依次是 被jj用户的信息 记录gid和uid的字符串 道具名称 +// 返回值依次是 要发送的消息 错误信息 +func (u *userInfo) processJJuAction(adduserniuniu *userInfo, t string, props string) (string, error) { + var ( + fencingResult string + f float64 + f1 float64 + info userInfo + err error + ) + v, ok := prop.Load(t) + info = *u + if props != "" { + if !contains(t, jjProp) { + return "", errors.New("道具不能混着用哦") + } + if err = u.createUserInfoByProps(props); err != nil { + return "", err + } + } + switch { + case ok && v.Count > 1 && time.Since(v.TimeLimit) < time.Minute*8: + fencingResult, f, f1 = fencing(u.Length, adduserniuniu.Length) + u.Length = f + adduserniuniu.Length = f1 + errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(v.TimeLimit)) + err = errors.New(errMessage) + case u.ShenJi-info.ShenJi != 0: + fencingResult, f, f1 = u.useShenJi(adduserniuniu.Length) + u.Length = f + adduserniuniu.Length = f1 + updateMap(t, true) + case u.Artifact-info.Artifact != 0: + fencingResult, f, f1 = u.useArtifact(adduserniuniu.Length) + u.Length = f + adduserniuniu.Length = f1 + updateMap(t, true) + default: + fencingResult, f, f1 = fencing(u.Length, adduserniuniu.Length) + u.Length = f + adduserniuniu.Length = f1 + } + return fencingResult, err +} + +func (u *userInfo) purchaseItem(n int) (int, error) { + var ( + money int + err error + ) + switch n { + case 1: + money = 300 + u.WeiGe += 5 + case 2: + money = 300 + u.Philter += 5 + case 3: + money = 500 + u.Artifact += 2 + case 4: + money = 500 + u.ShenJi += 2 + default: + err = errors.New("无效的选择") + } + return money, err +} + func (m users) positive() users { var m1 []*userInfo for _, i2 := range m { diff --git a/plugin/niuniu/utils.go b/plugin/niuniu/utils.go index 5e41f066..1af733af 100644 --- a/plugin/niuniu/utils.go +++ b/plugin/niuniu/utils.go @@ -2,153 +2,16 @@ package niuniu import ( - "errors" "fmt" "math" "math/rand" - "time" + "strings" ) -func createUserInfoByProps(props string, niuniu *userInfo) error { - var ( - err error - ) - switch props { - case "伟哥": - if niuniu.WeiGe > 0 { - niuniu.WeiGe-- - } else { - err = errors.New("你还没有伟哥呢,不能使用") - } - case "媚药": - if niuniu.Philter > 0 { - niuniu.Philter-- - } else { - err = errors.New("你还没有媚药呢,不能使用") - } - case "击剑神器": - if niuniu.Artifact > 0 { - niuniu.Artifact-- - } else { - err = errors.New("你还没有击剑神器呢,不能使用") - } - case "击剑神稽": - if niuniu.ShenJi > 0 { - niuniu.ShenJi-- - } else { - err = errors.New("你还没有击剑神稽呢,不能使用") - } - default: - err = errors.New("道具不存在") - } - return err -} - -// 接收值依次是 自己和被jj用户的信息 一个包含gid和uid的字符串 道具名称 -// 返回值依次是 要发生的消息 错误信息 -func processJJuAction(myniuniu, adduserniuniu *userInfo, t string, props string) (string, float64, error) { - var ( - fencingResult string - f float64 - f1 float64 - u userInfo - err error - ) - v, ok := prop.Load(t) - u = *myniuniu - if props != "" { - if props != "击剑神器" && props != "击剑神稽" { - return "", 0, errors.New("道具不存在") - } - if err = createUserInfoByProps(props, myniuniu); err != nil { - return "", 0, err - } - } - switch { - case ok && v.Count > 1 && time.Since(v.TimeLimit) < time.Minute*8: - fencingResult, f, f1 = fencing(myniuniu.Length, adduserniuniu.Length) - myniuniu.Length = f - errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(v.TimeLimit)) - err = errors.New(errMessage) - case myniuniu.ShenJi-u.ShenJi != 0: - fencingResult, f, f1 = myniuniu.useShenJi(adduserniuniu.Length) - myniuniu.Length = f - updateMap(t, true) - case myniuniu.Artifact-u.Artifact != 0: - fencingResult, f, f1 = myniuniu.useArtifact(adduserniuniu.Length) - myniuniu.Length = f - updateMap(t, true) - default: - fencingResult, f, f1 = fencing(myniuniu.Length, adduserniuniu.Length) - myniuniu.Length = f - } - return fencingResult, f1, err -} -func processNiuniuAction(t string, niuniu *userInfo, props string) (string, error) { - var ( - messages string - u userInfo - err error - f float64 - ) - load, ok := prop.Load(t) - u = *niuniu - if props != "" { - if props != "伟哥" && props != "媚药" { - return "", errors.New("道具不存在") - } - - if err = createUserInfoByProps(props, niuniu); err != nil { - return "", err - } - } - switch { - case ok && load.Count > 1 && time.Since(load.TimeLimit) < time.Minute*8: - messages, f = generateRandomStingTwo(niuniu.Length) - niuniu.Length = f - errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(load.TimeLimit)) - err = errors.New(errMessage) - - case niuniu.WeiGe-u.WeiGe != 0: - messages, f = niuniu.useWeiGe() - niuniu.Length = f - updateMap(t, true) - - case niuniu.Philter-u.Philter != 0: - messages, f = niuniu.usePhilter() - niuniu.Length = f - updateMap(t, true) - - default: - messages, f = generateRandomStingTwo(niuniu.Length) - niuniu.Length = f - } - return messages, err -} - -func purchaseItem(n int, info userInfo) (int, error) { - var ( - money int - err error - ) - switch n { - case 1: - money = 300 - info.WeiGe += 5 - case 2: - money = 300 - info.Philter += 5 - case 3: - money = 500 - info.Artifact += 2 - case 4: - money = 500 - info.ShenJi += 2 - default: - err = errors.New("无效的选择") - } - return money, err -} +var ( + jjProp = []string{"击剑神器", "击剑神稽"} + dajiaoProp = []string{"伟哥", "媚药"} +) func generateRandomStingTwo(niuniu float64) (string, float64) { probability := rand.Intn(100 + 1) @@ -342,3 +205,13 @@ func hitGlue(l float64) float64 { return rand.Float64() } } + +// 检查字符串是否在切片中 +func contains(s string, array []string) bool { + for _, item := range array { + if strings.EqualFold(item, s) { + return true + } + } + return false +}