MCPcopy Create free account
hub / github.com/FloatTech/ZeroBot-Plugin-Playground / init

Function init

plugin/cybercat/arena.go:20–197  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

18)
19
20func init() {
21 engine.OnRegex(`^(喵喵|猫猫)(PK|pk)\s*\[CQ:at,qq=(\d+).*`, zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) {
22 id := ctx.Event.MessageID
23 gidStr := "group" + strconv.FormatInt(ctx.Event.GroupID, 10)
24 uidStr := strconv.FormatInt(ctx.Event.UserID, 10)
25 if ctx.State["regex_matched"].([]string)[3] == uidStr {
26 ctx.SendChain(message.Reply(id), message.Text("猫猫歪头看着你表示咄咄怪事哦~"))
27 return
28 }
29 userInfo, err := catdata.find(gidStr, uidStr)
30 if err != nil {
31 ctx.SendChain(message.Text("[ERROR]:", err))
32 return
33 }
34 if userInfo == (catInfo{}) || userInfo.Name == "" {
35 ctx.SendChain(message.Reply(id), message.Text("铲屎官你还没有属于你的主子喔,快去买一只吧!"))
36 return
37 }
38 lastTime := time.Unix(userInfo.ArenaTime, 0)
39 if time.Since(lastTime).Hours() < 24 {
40 ctx.SendChain(message.Reply(id), message.Text(userInfo.Name, "已经PK过了,让它休息休息吧"))
41 return
42 }
43 duelStr := ctx.State["regex_matched"].([]string)[3]
44 duelInfo, err := catdata.find(gidStr, duelStr)
45 if err != nil {
46 ctx.SendChain(message.Text("[ERROR]:", err))
47 return
48 }
49 if duelInfo == (catInfo{}) || duelInfo.Name == "" {
50 ctx.SendChain(message.Reply(id), message.Text("他还没有属于他的猫猫,无法PK"))
51 return
52 }
53 lastTime = time.Unix(duelInfo.ArenaTime, 0)
54 if time.Since(lastTime).Hours() < 24 {
55 ctx.SendChain(message.Reply(id), message.Text(ctx.CardOrNickName(duelInfo.User), "的", duelInfo.Name, "已经PK过了,让它休息休息吧"))
56 return
57 }
58 /***************************************************************/
59 ctx.SendChain(message.Text("等待对方回应。(发送“取消”撤回PK)\n请对方发送“去吧猫猫”接受PK或“拒绝”结束PK"))
60 recv, cancel := zero.NewFutureEvent("message", 999, false, zero.OnlyGroup, zero.RegexRule("^(去吧猫猫|取消|拒绝)$"), zero.CheckGroup(ctx.Event.GroupID), zero.CheckUser(zbmath.Str2Int64(duelStr), userInfo.User)).Repeat()
61 defer cancel()
62 approve := false
63 over := time.NewTimer(60 * time.Second)
64 for {
65 select {
66 case <-over.C:
67 ctx.SendChain(message.Reply(id), message.Text("对方没回应,PK取消"))
68 return
69 case c := <-recv:
70 over.Stop()
71 switch {
72 case c.Event.Message.String() == "拒绝" && c.Event.UserID == duelInfo.User:
73 ctx.SendChain(message.Reply(id), message.Text("对方拒绝了你的PK"))
74 return
75 case c.Event.Message.String() == "取消" && c.Event.UserID == userInfo.User:
76 ctx.SendChain(message.Reply(id), message.Text("你取消了PK"))
77 return

Callers

nothing calls this directly

Calls 4

pkweightFunction · 0.85
findMethod · 0.80
getGroupdataMethod · 0.80
insertMethod · 0.45

Tested by

no test coverage detected