From a5cad676350e5f9222144c43d6ad3f42476eea43 Mon Sep 17 00:00:00 2001 From: ZJY <764763903@qq.com> Date: Mon, 27 Sep 2021 15:52:30 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=AC=A1=E6=95=B0=E9=99=90=E5=88=B6=E7=AD=89=E5=90=84=E7=A7=8D?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/demo_config.yaml | 1 + models/SendLimit.go | 36 +++++ models/command.go | 367 ++++++++++++++---------------------------- models/config.go | 1 + models/db.go | 2 - 5 files changed, 156 insertions(+), 251 deletions(-) create mode 100644 models/SendLimit.go diff --git a/conf/demo_config.yaml b/conf/demo_config.yaml index b8fbde5..21e2c1d 100644 --- a/conf/demo_config.yaml +++ b/conf/demo_config.yaml @@ -15,6 +15,7 @@ ApiToken: #为空默认随机禁用 Wskey: # 填空默认禁用wskey转换 需要的填true SMSAddress: IsAddFriend: #填写true或者false false +Lim: #填写1-N 代表限制次数 theme: static: ./static master: diff --git a/models/SendLimit.go b/models/SendLimit.go new file mode 100644 index 0000000..2655739 --- /dev/null +++ b/models/SendLimit.go @@ -0,0 +1,36 @@ +package models + +import "time" + +type Limit struct { + ID int `gorm:"column:ID;primaryKey"` + Number int + ActiveAt string + typ int + num int +} + +func getLimit(uid int, typ int) bool { + u := &Limit{} + db.Where("number = ? and typ = ? and ActiveAt = ?", uid, typ, time.Now().Format("2006-01-02")).First(&u) + if Config.Lim == 0 { + return true + } + if u.ID != 0 { + if u.num < Config.Lim { + db.Updates(&Limit{ + num: u.num + 1, + }).Where("ID = ?", u.ID) + return true + } else { + return false + } + } else { + u.ActiveAt = time.Now().Format("2006-01-02") + u.typ = typ + u.Number = uid + u.num = 1 + db.Create(u) + return true + } +} diff --git a/models/command.go b/models/command.go index 427c6b7..1acdff5 100644 --- a/models/command.go +++ b/models/command.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/beego/beego/v2/core/logs" "regexp" - "strconv" "strings" "time" @@ -149,140 +148,6 @@ var codeSignals = []CodeSignal{ // return `{"url":"` + "http://www.baidu.com" + `","img":"` + s.Data.QqLoginQrcode.Bytes + `"}` // }, //}, - { - Command: []string{`raw ^(\d{11})$`}, - Handle: func(s *Sender) interface{} { - if num := 5; len(codes) >= num { - return fmt.Sprintf("%v坑位全部在使用中,请排队。", num) - } - id := "qq" + strconv.Itoa(s.UserID) - if _, ok := codes[id]; ok { - return "你已在登录中。" - } - go func() { - c := make(chan string, 1) - codes[id] = c - defer delete(codes, id) - var sess = new(Session) - phone := s.Contents[0] - logs.Info(phone) - s.Reply("请稍后,正在模拟环境...") - if err := sess.Phone(phone); err != nil { - s.Reply(err.Error()) - return - } - send := false - login := false - verify := false - success := false - sms_code := "" - for { - query, _ := sess.query() - if query.PageStatus == "SESSION_EXPIRED" { - s.Reply("登录超时") - return - } - if query.SessionTimeOut == 0 { - if success { - return - } - s.Reply("登录超时") - return - } - if query.CanClickLogin && !login { - s.Reply("正在登录...") - if err := sess.login(phone, sms_code); err != nil { - s.Reply(err.Error()) - return - } - } - if query.PageStatus == "VERIFY_FAILED_MAX" { - s.Reply("验证码错误次数过多,请重新获取。") - return - } - if query.PageStatus == "VERIFY_CODE_MAX" { - s.Reply("对不起,短信验证码请求频繁,请稍后再试。") - return - } - if query.PageStatus == "REQUIRE_VERIFY" && !verify { - verify = true - s.Reply("正在自动验证...") - if err := sess.crackCaptcha(); err != nil { - s.Reply(err.Error()) - return - } - s.Reply("验证通过。") - s.Reply("请输入验证码______") - select { - case sms_code = <-c: - s.Reply("正在提交验证码...") - if err := sess.SmsCode(sms_code); err != nil { - s.Reply(err.Error()) - return - } - s.Reply("验证码提交成功。") - case <-time.After(60 * time.Second): - s.Reply("验证码超时。") - return - - } - } - if query.CanSendAuth && !send { - if err := sess.sendAuthCode(); err != nil { - s.Reply(err.Error()) - return - } - send = true - } - if !query.CanSendAuth && query.AuthCodeCountDown > 0 { - - } - if query.AuthCodeCountDown == -1 && send { - - } - if query.PageStatus == "SUCCESS_CK" && !success { - //Sender <- &Faker{ - // Message: fmt.Sprintf("pt_key=%v;pt_pin=%v;", query.Ck.PtKey, query.Ck.PtPin), - // UserID: s.GetUserID(), - // Type: s.GetImType(), - //} - s.Reply(fmt.Sprintf("登录成功,%v秒后可以登录下一个账号。", query.SessionTimeOut)) - success = true - } - time.Sleep(time.Second) - } - }() - - return nil - }, - }, - { - Command: []string{"登录"}, - Handle: func(s *Sender) interface{} { - logs.Info("进入流程") - if num := 5; len(codes) >= num { - return fmt.Sprintf("%v坑位全部在使用中,请排队(稍后再试)。", num) - } - id := "qq" + strconv.Itoa(s.UserID) - if _, ok := codes[id]; ok { - return "你已在登录中。" - } - s.Reply("请输入手机号___________") - return nil - }, - }, - { - Command: []string{`raw ^(\d{6})$`}, - Handle: func(s *Sender) interface{} { - if code, ok := codes["qq"+fmt.Sprint(s.UserID)]; ok { - //code <- s.Get() - logs.Info(code) - } else { - s.Reply("验证码不存在或过期了,请重新登录。") - } - return nil - }, - }, { Command: []string{"sign", "打卡", "签到"}, Handle: func(sender *Sender) interface{} { @@ -426,9 +291,13 @@ var codeSignals = []CodeSignal{ { Command: []string{"查询", "query"}, Handle: func(sender *Sender) interface{} { - sender.handleJdCookies(func(ck *JdCookie) { - sender.Reply(ck.Query()) - }) + if getLimit(sender.UserID, 1) { + sender.handleJdCookies(func(ck *JdCookie) { + sender.Reply(ck.Query()) + }) + } else { + sender.Reply("超过今日查询次数") + } return nil }, }, @@ -459,7 +328,7 @@ var codeSignals = []CodeSignal{ return nil }, }, - { + { Command: []string{"设置管理员"}, Admin: true, Handle: func(sender *Sender) interface{} { @@ -477,123 +346,123 @@ var codeSignals = []CodeSignal{ return "已取消管理员" }, }, - /* - { - Command: []string{"我要钱", "给点钱", "我干", "给我钱", "给我", "我要"}, - Handle: func(sender *Sender) interface{} { - cost := Int(sender.JoinContens()) - if cost <= 0 { - cost = 1 - } - if !sender.IsAdmin { - if cost > 1 { - return "你只能获得1互助值" - } else { - AddCoin(sender.UserID) - return "太可怜了,给你1互助值" + /* + { + Command: []string{"我要钱", "给点钱", "我干", "给我钱", "给我", "我要"}, + Handle: func(sender *Sender) interface{} { + cost := Int(sender.JoinContens()) + if cost <= 0 { + cost = 1 } - } else { - AdddCoin(sender.UserID, cost) - sender.Reply(fmt.Sprintf("你获得%d枚互助值。", cost)) - } - return nil - }, - }, - { - Command: []string{"梭哈", "拼了", "梭了"}, - Handle: func(sender *Sender) interface{} { - u := &User{} - cost := GetCoin(sender.UserID) - - if cost <= 0 || cost > 10000 { - cost = 1 - } - - if err := db.Where("number = ?", sender.UserID).First(u).Error; err != nil || u.Coin < cost { - return "互助值不足,先去打卡吧。" - } else { - sender.Reply(fmt.Sprintf("你使用%d枚互助值。", cost)) - } - baga := 0 - if u.Coin > 100000 { - baga = u.Coin - cost = u.Coin - } - r := time.Now().Nanosecond() % 10 - if r < 7 || baga > 0 { - sender.Reply(fmt.Sprintf("很遗憾你失去了%d枚互助值。", cost)) - cost = -cost - } else { - if r == 9 { - cost *= 4 - sender.Reply(fmt.Sprintf("恭喜你4倍暴击获得%d枚互助值,20秒后自动转入余额。", cost)) - time.Sleep(time.Second * 20) + if !sender.IsAdmin { + if cost > 1 { + return "你只能获得1互助值" + } else { + AddCoin(sender.UserID) + return "太可怜了,给你1互助值" + } } else { - sender.Reply(fmt.Sprintf("很幸运你获得%d枚互助值,10秒后自动转入余额。", cost)) - time.Sleep(time.Second * 10) + AdddCoin(sender.UserID, cost) + sender.Reply(fmt.Sprintf("你获得%d枚互助值。", cost)) } - sender.Reply(fmt.Sprintf("%d枚互助值已到账。", cost)) - } - db.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin + %d", cost))) - return nil + return nil + }, }, - }, - - //{ - // Command: []string{"按许愿币更新排名"}, - // Admin: true, - // Handle: func(sender *Sender) interface{} { - // cookies:= GetJdCookies() - // for i := range cookies { - // cookie := cookies[i] - // if cookie.QQ { - // - // } - // cookie.Update(Priority,cookie.) - // } - // sender.handleJdCookies(func(ck *JdCookie) { - // sender.Reply(ck.Query()) - // }) - // return "已更新排行" - // }, - //}, - { - Command: []string{"赌一把"}, - Handle: func(sender *Sender) interface{} { + { + Command: []string{"梭哈", "拼了", "梭了"}, + Handle: func(sender *Sender) interface{} { + u := &User{} + cost := GetCoin(sender.UserID) - cost := Int(sender.JoinContens()) - if cost <= 0 || cost > 10000 { - cost = 1 - } - u := &User{} - if err := db.Where("number = ?", sender.UserID).First(u).Error; err != nil || u.Coin < cost { - return "互助值不足,先去打卡吧。" - } - baga := 0 - if u.Coin > 100000 { - baga = u.Coin - cost = u.Coin - } - r := time.Now().Nanosecond() % 10 - if r < 6 || baga > 0 { - sender.Reply(fmt.Sprintf("很遗憾你失去了%d枚互助值。", cost)) - cost = -cost - } else { - if r == 9 { - cost *= 2 - sender.Reply(fmt.Sprintf("恭喜你幸运暴击获得%d枚互助值,20秒后自动转入余额。", cost)) - time.Sleep(time.Second * 20) - } else { - sender.Reply(fmt.Sprintf("很幸运你获得%d枚互助值,10秒后自动转入余额。", cost)) - time.Sleep(time.Second * 10) + if cost <= 0 || cost > 10000 { + cost = 1 } - sender.Reply(fmt.Sprintf("%d枚互助值已到账。", cost)) - } - db.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin + %d", cost))) - return nil + + if err := db.Where("number = ?", sender.UserID).First(u).Error; err != nil || u.Coin < cost { + return "互助值不足,先去打卡吧。" + } else { + sender.Reply(fmt.Sprintf("你使用%d枚互助值。", cost)) + } + baga := 0 + if u.Coin > 100000 { + baga = u.Coin + cost = u.Coin + } + r := time.Now().Nanosecond() % 10 + if r < 7 || baga > 0 { + sender.Reply(fmt.Sprintf("很遗憾你失去了%d枚互助值。", cost)) + cost = -cost + } else { + if r == 9 { + cost *= 4 + sender.Reply(fmt.Sprintf("恭喜你4倍暴击获得%d枚互助值,20秒后自动转入余额。", cost)) + time.Sleep(time.Second * 20) + } else { + sender.Reply(fmt.Sprintf("很幸运你获得%d枚互助值,10秒后自动转入余额。", cost)) + time.Sleep(time.Second * 10) + } + sender.Reply(fmt.Sprintf("%d枚互助值已到账。", cost)) + } + db.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin + %d", cost))) + return nil + }, }, - }, - */ + + //{ + // Command: []string{"按许愿币更新排名"}, + // Admin: true, + // Handle: func(sender *Sender) interface{} { + // cookies:= GetJdCookies() + // for i := range cookies { + // cookie := cookies[i] + // if cookie.QQ { + // + // } + // cookie.Update(Priority,cookie.) + // } + // sender.handleJdCookies(func(ck *JdCookie) { + // sender.Reply(ck.Query()) + // }) + // return "已更新排行" + // }, + //}, + { + Command: []string{"赌一把"}, + Handle: func(sender *Sender) interface{} { + + cost := Int(sender.JoinContens()) + if cost <= 0 || cost > 10000 { + cost = 1 + } + u := &User{} + if err := db.Where("number = ?", sender.UserID).First(u).Error; err != nil || u.Coin < cost { + return "互助值不足,先去打卡吧。" + } + baga := 0 + if u.Coin > 100000 { + baga = u.Coin + cost = u.Coin + } + r := time.Now().Nanosecond() % 10 + if r < 6 || baga > 0 { + sender.Reply(fmt.Sprintf("很遗憾你失去了%d枚互助值。", cost)) + cost = -cost + } else { + if r == 9 { + cost *= 2 + sender.Reply(fmt.Sprintf("恭喜你幸运暴击获得%d枚互助值,20秒后自动转入余额。", cost)) + time.Sleep(time.Second * 20) + } else { + sender.Reply(fmt.Sprintf("很幸运你获得%d枚互助值,10秒后自动转入余额。", cost)) + time.Sleep(time.Second * 10) + } + sender.Reply(fmt.Sprintf("%d枚互助值已到账。", cost)) + } + db.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin + %d", cost))) + return nil + }, + }, + */ { Command: []string{"许愿", "愿望", "wish", "hope", "want"}, Handle: func(sender *Sender) interface{} { diff --git a/models/config.go b/models/config.go index d013650..61fccf0 100644 --- a/models/config.go +++ b/models/config.go @@ -40,6 +40,7 @@ type Yaml struct { TGURL string `yaml:"TGURL"` SMSAddress string `yaml:"SMSAddress"` IsAddFriend bool `yaml:"IsAddFriend"` + Lim int `yaml:"Lim"` Node string Npm string Python string diff --git a/models/db.go b/models/db.go index 98d9a27..99b4173 100644 --- a/models/db.go +++ b/models/db.go @@ -2,7 +2,6 @@ package models import ( "fmt" - "github.com/beego/beego/v2/core/logs" "strings" "time" @@ -242,7 +241,6 @@ func (ck *JdCookie) OutPool() (string, error) { if tx.Where(fmt.Sprintf("%s = '%s' and %s = '%s'", PtPin, ck.PtPin, LoseAt, "")).First(jp).Error != nil { us[Available] = False us[PtKey] = "" - logs.Info("开始禁用") } else { us[Available] = True us[PtKey] = jp.PtKey