diff --git a/models/bot.go b/models/bot.go index 7d777c1..53071a9 100644 --- a/models/bot.go +++ b/models/bot.go @@ -97,42 +97,69 @@ var handleMessage = func(msgs ...interface{}) interface{} { if err != nil { return err } else { - ss := regexp.MustCompile(`pt_key=([^;=\s]+);pt_pin=([^;=\s]+)`).FindAllStringSubmatch(rsp, -1) - if len(ss) > 0 { - - xyb := 0 - for _, s := range ss { - ck := JdCookie{ - PtKey: s[1], - PtPin: s[2], + ss1 := regexp.MustCompile(`pin=([^;=\s]+);wskey=([^;=\s]+)`).FindAllStringSubmatch(msg, -1) + if len(ss1) > 0 { + for _, s := range ss1 { + ck1 := JdCookie{ + PtPin: s[1], + WsKey: s[2], } - if CookieOK(&ck) { - xyb++ - if sender.IsQQ() { - ck.QQ = sender.UserID - } else if sender.IsTG() { - ck.Telegram = sender.UserID - } - if HasKey(ck.PtKey) { - sender.Reply(fmt.Sprintf("重复提交")) + if sender.IsQQ() { + ck1.QQ = sender.UserID + } else if sender.IsTG() { + ck1.Telegram = sender.UserID + } + if nck, err := GetJdCookie(ck1.PtPin); err == nil { + if nck.WsKey == "" { + nck.InPoolWskey(ck1.WsKey) + msg := fmt.Sprintf("写入WsKey,%s", ck1.PtPin) + (&JdCookie{}).Push(msg) + logs.Info(msg) } else { - if nck, err := GetJdCookie(ck.PtPin); err == nil { - nck.InPool(ck.PtKey) - msg := fmt.Sprintf("更新账号,%s", ck.PtPin) - (&JdCookie{}).Push(msg) - logs.Info(msg) - } else { - if Cdle { - ck.Hack = True - } - NewJdCookie(&ck) - msg := fmt.Sprintf("添加账号,%s", ck.PtPin) - sender.Reply(fmt.Sprintf(msg, AddCoin(sender.UserID))) - logs.Info(msg) - } + msg := fmt.Sprintf("重复写入") + (&JdCookie{}).Push(msg) + logs.Info(msg) } } else { - sender.Reply(fmt.Sprintf("无效,许愿币-1,余额%d", RemCoin(sender.UserID, 1))) + ss := regexp.MustCompile(`pt_key=([^;=\s]+);pt_pin=([^;=\s]+)`).FindAllStringSubmatch(rsp, -1) + if len(ss) > 0 { + xyb := 0 + for _, s := range ss { + ck := JdCookie{ + PtKey: s[1], + PtPin: s[2], + WsKey: ck1.WsKey, + } + if CookieOK(&ck) { + xyb++ + if sender.IsQQ() { + ck.QQ = sender.UserID + } else if sender.IsTG() { + ck.Telegram = sender.UserID + } + if nck, err := GetJdCookie(ck.PtPin); err == nil { + nck.InPool(ck.PtKey) + msg := fmt.Sprintf("更新账号,%s", ck.PtPin) + (&JdCookie{}).Push(msg) + logs.Info(msg) + } else { + if Cdle { + ck.Hack = True + } + NewJdCookie(&ck) + msg := fmt.Sprintf("添加账号,%s", ck.PtPin) + sender.Reply(fmt.Sprintf(msg, AddCoin(sender.UserID))) + logs.Info(msg) + } + } else { + sender.Reply(fmt.Sprintf("无效,许愿币-1,余额%d", RemCoin(sender.UserID, 1))) + } + } + go func() { + Save <- &JdCookie{} + }() + return nil + } } } go func() { diff --git a/models/db.go b/models/db.go index c64b2fd..ec2eb93 100644 --- a/models/db.go +++ b/models/db.go @@ -70,6 +70,14 @@ func HasKey(key string) bool { return false } +func HasWsKey(key string) bool { + if _, ok := keys[key]; ok { + return ok + } + keys[key] = true + return false +} + type JdCookie struct { ID int `gorm:"column:ID;primaryKey"` Priority int `gorm:"column:Priority;default:1"` @@ -106,6 +114,7 @@ type JdCookiePool struct { ID int `gorm:"column:ID;primaryKey"` PtKey string `gorm:"column:PtKey;unique"` PtPin string `gorm:"column:PtPin"` + WsKey string `gorm:"column:WsKey"` LoseAt string `gorm:"column:LoseAt"` CreateAt string `gorm:"column:CreateAt"` } @@ -185,6 +194,31 @@ func (ck *JdCookie) Update(column string, value interface{}) { } } +func (ck *JdCookie) InPoolWskey(wskey string) error { + if ck.ID != 0 { + date := Date() + tx := db.Begin() + jp := &JdCookiePool{} + if tx.Where(fmt.Sprintf("%s = '%s'", PtPin, ck.PtPin)).First(jp).Error == nil { + return tx.Rollback().Error + } + if err := tx.Create(&JdCookiePool{ + PtPin: ck.PtPin, + WsKey: wskey, + CreateAt: date, + }).Error; err != nil { + tx.Rollback() + return err + } + tx.Model(ck).Updates(map[string]interface{}{ + Available: True, + WsKey: wskey, + }) + return tx.Commit().Error + } + return nil +} + func (ck *JdCookie) InPool(pt_key string) error { if ck.ID != 0 { date := Date()