@@ -8,19 +8,28 @@ import (
8
8
"strings"
9
9
"time"
10
10
11
+ "github.com/FloatTech/AnimeAPI/wallet"
11
12
ctrl "github.com/FloatTech/zbpctrl"
12
13
"github.com/FloatTech/zbputils/control"
13
14
"github.com/FloatTech/zbputils/ctxext"
15
+ "github.com/RomiChan/syncx"
14
16
zero "github.com/wdvxdr1123/ZeroBot"
15
17
"github.com/wdvxdr1123/ZeroBot/extension/rate"
16
18
"github.com/wdvxdr1123/ZeroBot/message"
17
19
)
18
20
21
+ type lastLength struct {
22
+ TimeLimit time.Time
23
+ Count int
24
+ Length float64
25
+ }
26
+
19
27
var (
20
28
en = control .AutoRegister (& ctrl.Options [* zero.Ctx ]{
21
29
DisableOnDefault : false ,
22
30
Brief : "牛牛大作战" ,
23
31
Help : "- 打胶\n " +
32
+ "- 赎牛牛 (cd:30分钟)\n " +
24
33
"- 注册牛牛\n " +
25
34
"- 注销牛牛\n " +
26
35
"- 查看我的牛牛\n " +
31
40
})
32
41
dajiaoLimiter = rate .NewManager [string ](time .Second * 90 , 1 )
33
42
jjLimiter = rate .NewManager [string ](time .Second * 150 , 1 )
43
+ jjCount = syncx.Map [string , * lastLength ]{}
34
44
)
35
45
36
46
func init () {
47
+ en .OnFullMatch ("赎牛牛" , zero .OnlyGroup , getdb ).SetBlock (true ).Handle (func (ctx * zero.Ctx ) {
48
+ gid := ctx .Event .GroupID
49
+ uid := ctx .Event .UserID
50
+ last , ok := jjCount .Load (fmt .Sprintf ("%d_%d" , gid , uid ))
51
+ if ! ok {
52
+ ctx .SendChain (message .Text ("你还没有被厥呢" ))
53
+ return
54
+ }
55
+ if time .Since (last .TimeLimit ) > time .Minute * 30 {
56
+ ctx .SendChain (message .Text ("时间已经过期了,牛牛已被收回!" ))
57
+ jjCount .Delete (fmt .Sprintf ("%d_%d" , gid , uid ))
58
+ return
59
+ }
60
+ if last .Count < 6 {
61
+ ctx .SendChain (message .Text ("你还没有被厥够6次呢,不能赎牛牛" ))
62
+ return
63
+ }
64
+ money := wallet .GetWalletOf (uid )
65
+ if money < 100 {
66
+ ctx .SendChain (message .Text ("赎牛牛需要100ATRI币,快去赚钱吧" ))
67
+ return
68
+ }
69
+ err := wallet .InsertWalletOf (uid , - 100 )
70
+ if err != nil {
71
+ ctx .SendChain (message .Text ("ERROR:" , err ))
72
+ return
73
+ }
74
+ u := & userInfo {
75
+ UID : uid ,
76
+ Length : last .Length ,
77
+ UserCount : 0 ,
78
+ }
79
+ err = db .insertniuniu (u , gid )
80
+ if err != nil {
81
+ ctx .SendChain (message .Text ("ERROR:" , err ))
82
+ return
83
+ }
84
+ jjCount .Delete (fmt .Sprintf ("%d_%d" , gid , uid ))
85
+ ctx .SendChain (message .At (uid ), message .Text (fmt .Sprintf ("恭喜你!成功赎回牛牛,当前长度为:%.2fcm" , last .Length )))
86
+ })
37
87
en .OnFullMatch ("牛子长度排行" , zero .OnlyGroup , getdb ).SetBlock (true ).Handle (func (ctx * zero.Ctx ) {
38
88
gid := ctx .Event .GroupID
39
89
niuniuList , err := db .readAllTable (gid )
@@ -47,8 +97,8 @@ func init() {
47
97
return
48
98
}
49
99
var messages strings.Builder
50
- messages .WriteString ("牛子长度排行 \n " )
51
- for i , user := range niuniuList .sort (true ) {
100
+ messages .WriteString ("牛子长度排行榜 \n " )
101
+ for i , user := range m .sort (true ) {
52
102
messages .WriteString (fmt .Sprintf ("第%d名 id:%s 长度:%.2fcm\n " , i + 1 ,
53
103
ctx .CardOrNickName (user .UID ), user .Length ))
54
104
}
@@ -71,7 +121,7 @@ func init() {
71
121
}
72
122
var messages strings.Builder
73
123
messages .WriteString ("牛牛深度排行榜\n " )
74
- for i , user := range niuniuList .sort (false ) {
124
+ for i , user := range m .sort (false ) {
75
125
messages .WriteString (fmt .Sprintf ("第%d名 id:%s 长度:%.2fcm\n " , i + 1 ,
76
126
ctx .CardOrNickName (user .UID ), user .Length ))
77
127
}
@@ -210,17 +260,45 @@ func init() {
210
260
return
211
261
}
212
262
fencingResult , f , f1 := fencing (myniuniu , adduserniuniu )
213
- err = db .insertniuniu (& userInfo {UID : uid , Length : f }, gid )
263
+ err = db .insertniuniu (& userInfo {UID : uid , Length : f , UserCount : 0 }, gid )
214
264
if err != nil {
215
265
ctx .SendChain (message .Text ("ERROR:" , err ))
216
266
return
217
267
}
218
- err = db .insertniuniu (& userInfo {UID : adduser , Length : f1 }, gid )
268
+ err = db .insertniuniu (& userInfo {UID : adduser , Length : f1 , UserCount : 0 }, gid )
219
269
if err != nil {
220
270
ctx .SendChain (message .Text ("ERROR:" , err ))
221
271
return
222
272
}
223
- ctx .SendChain (message .At (uid ), message .Text (fencingResult ))
273
+ ctx .SendChain (message .At (uid ), message .Text (" " , fencingResult ))
274
+ j := fmt .Sprintf ("%d_%d" , gid , adduser )
275
+ count , ok := jjCount .Load (j )
276
+ var c lastLength
277
+ if ! ok {
278
+ c = lastLength {
279
+ TimeLimit : time .Now (),
280
+ Count : 1 ,
281
+ Length : adduserniuniu ,
282
+ }
283
+ } else {
284
+ c = lastLength {
285
+ TimeLimit : c .TimeLimit ,
286
+ Count : count .Count + 1 ,
287
+ Length : count .Length ,
288
+ }
289
+ }
290
+ jjCount .Store (j , & c )
291
+ if c .Count > 5 {
292
+ ctx .SendChain (message .Text (randomChoice ([]string {fmt .Sprintf ("你们太厉害了,对方已经被你们打了%d次了,你们可以继续找他🤺" , c .Count ),
293
+ "你们不要再找ta🤺啦!" })))
294
+ if c .Count < 7 {
295
+ id := ctx .SendPrivateMessage (adduser ,
296
+ message .Text (fmt .Sprintf ("你在%d群里已经被厥冒烟了,快去群里赎回你原本的牛牛!\n 发送:`赎牛牛`即可!" , gid )))
297
+ if id == 0 {
298
+ ctx .SendChain (message .At (adduser ), message .Text ("快发送`赎牛牛`来赎回你原本的牛牛!" ))
299
+ }
300
+ }
301
+ }
224
302
})
225
303
en .OnFullMatch ("注销牛牛" , getdb , zero .OnlyGroup ).SetBlock (true ).Handle (func (ctx * zero.Ctx ) {
226
304
uid := ctx .Event .UserID
0 commit comments