diff --git a/controllers/account.go b/controllers/account.go
index c37c4fe..7c5c47b 100644
--- a/controllers/account.go
+++ b/controllers/account.go
@@ -1,7 +1,7 @@
package controllers
import (
- "github.com/cdle/xdd/models"
+ "github.com/764763903a/xdd/models"
)
type AccountController struct {
diff --git a/go.mod b/go.mod
index 0158b88..d49e4e3 100644
--- a/go.mod
+++ b/go.mod
@@ -12,6 +12,7 @@ require (
github.com/Mrs4s/go-cqhttp v1.0.0-beta5
github.com/beego/beego/v2 v2.0.1
github.com/buger/jsonparser v1.1.1
+ github.com/go-httpproxy/httpproxy v0.0.0-20180417134941-6977c68bf38e
github.com/go-playground/locales v0.13.0
github.com/go-playground/universal-translator v0.17.0
github.com/go-playground/validator/v10 v10.4.1 // indirect
diff --git a/go.sum b/go.sum
index 3c672ed..d9e854f 100644
--- a/go.sum
+++ b/go.sum
@@ -104,6 +104,8 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.6.0 h1:Lb3veSYoGaNck69fV2+Vf2juLSsHpMTf3Vk5+X+EDJg=
github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
+github.com/go-httpproxy/httpproxy v0.0.0-20180417134941-6977c68bf38e h1:ZWrG9Qs9xKF9638OVBT9Dd84CduxRWKX1/ZuwDI9e5o=
+github.com/go-httpproxy/httpproxy v0.0.0-20180417134941-6977c68bf38e/go.mod h1:Ftx0ecWwj8tX+5XPIE2KldKlneCsk9xMEaVpNbFRSt4=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
diff --git a/models/admin.go b/models/admin.go
index cd4f528..000c350 100644
--- a/models/admin.go
+++ b/models/admin.go
@@ -67,6 +67,16 @@ var Admin = `
title: '京豆数目',
width: 90,
align: 'center',
+ }, {
+ field: 'UserLevel',
+ title: '用户等级',
+ width: 90,
+ align: 'center',
+ }, {
+ field: 'LevelName',
+ title: '等级名称',
+ width: 100,
+ align: 'center',
}, {
field: 'Priority',
title: '优先级',
diff --git a/models/asset.go b/models/asset.go
index 162f044..a6369fb 100644
--- a/models/asset.go
+++ b/models/asset.go
@@ -75,6 +75,8 @@ func (ck *JdCookie) Query() string {
}
asset := Asset{}
if CookieOK(ck) {
+ msgs = append(msgs, fmt.Sprintf("用户等级:%v", ck.UserLevel))
+ msgs = append(msgs, fmt.Sprintf("等级名称:%v", ck.LevelName))
cookie := fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin)
var rpc = make(chan []RedList)
var fruit = make(chan string)
@@ -762,3 +764,37 @@ func jdzz(cookie string, state chan int64) { //
mmc, _ := jsonparser.GetString(data, "data", "totalNum")
state <- int64(Int(mmc))
}
+
+// func jxgc() {
+// req := httplib.Get(fmt.Sprintf(`https://m.jingxi.com/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&source=&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now() + 2}&_ste=1`))
+// req.Header("Host", "api.m.jd.com")
+// req.Header("Accept-Language", "zh-cn")
+// req.Header("Accept-Encoding", "gzip, deflate, br")
+// req.Header("Referer", "http://wq.jd.com/wxapp/pages/hd-interaction/index/index")
+// req.Header("User-Agent", ua)
+// req.Header("cookie", cookie)
+// req.Header("Content-Type", "application/json")
+// data, _ := req.Bytes()
+// }
+
+// // 惊喜的Taskurl
+// function jxTaskurl(functionId, body = '', stk) {
+// let url = `https://m.jingxi.com/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now() + 2}&_ste=1`
+// url += `&h5st=${decrypt(Date.now(), stk, '', url)}`
+// if (stk) {
+// url += `&_stk=${encodeURIComponent(stk)}`;
+// }
+// return {
+// url,
+// headers: {
+// 'Cookie': cookie,
+// 'Host': 'm.jingxi.com',
+// 'Accept': '*/*',
+// 'Connection': 'keep-alive',
+// 'User-Agent': functionId === 'AssistFriend' ? "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" : 'jdpingou',
+// 'Accept-Language': 'zh-cn',
+// 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html',
+// 'Accept-Encoding': 'gzip, deflate, br',
+// }
+// }
+// }
diff --git a/models/available.go b/models/available.go
index 7639341..016da97 100644
--- a/models/available.go
+++ b/models/available.go
@@ -3,6 +3,7 @@ package models
import (
"encoding/json"
"fmt"
+ "net/url"
"strings"
"github.com/beego/beego/v2/client/httplib"
@@ -134,8 +135,9 @@ func initCookie() {
}
func CookieOK(ck *JdCookie) bool {
-
- cookie := fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin)
+ // fmt.Println(ck.PtPin)
+ cookie := "pt_key=" + ck.PtKey + ";pt_pin=" + ck.PtPin + ";"
+ // fmt.Println(cookie)
// jdzz(cookie, make(chan int64))
if ck == nil {
return true
@@ -166,12 +168,19 @@ func CookieOK(ck *JdCookie) bool {
return false
}
case "0":
- if ui.Data.UserInfo.BaseInfo.Nickname != ck.Nickname || ui.Data.AssetInfo.BeanNum != ck.BeanNum {
+ if url.QueryEscape(ui.Data.UserInfo.BaseInfo.CurPin) != ck.PtPin {
+ return av2(cookie)
+ }
+ if ui.Data.UserInfo.BaseInfo.Nickname != ck.Nickname || ui.Data.AssetInfo.BeanNum != ck.BeanNum || ui.Data.UserInfo.BaseInfo.UserLevel != ck.UserLevel || ui.Data.UserInfo.BaseInfo.LevelName != ck.LevelName {
ck.Updates(JdCookie{
Nickname: ui.Data.UserInfo.BaseInfo.Nickname,
BeanNum: ui.Data.AssetInfo.BeanNum,
Available: True,
+ UserLevel: ui.Data.UserInfo.BaseInfo.UserLevel,
+ LevelName: ui.Data.UserInfo.BaseInfo.LevelName,
})
+ ck.UserLevel = ui.Data.UserInfo.BaseInfo.UserLevel
+ ck.LevelName = ui.Data.UserInfo.BaseInfo.LevelName
ck.Nickname = ui.Data.UserInfo.BaseInfo.Nickname
ck.BeanNum = ui.Data.AssetInfo.BeanNum
}
diff --git a/models/bot.go b/models/bot.go
index d6cf710..8b059b7 100644
--- a/models/bot.go
+++ b/models/bot.go
@@ -3,15 +3,13 @@ package models
import (
"fmt"
"io/ioutil"
- "net/url"
"os"
"regexp"
- "strconv"
"strings"
+ "time"
"github.com/beego/beego/v2/client/httplib"
"github.com/beego/beego/v2/core/logs"
- "github.com/beego/beego/v2/server/web"
)
var SendQQ = func(a int64, b interface{}) {
@@ -51,138 +49,63 @@ func InitReplies() {
}
}
-var sendMessagee = func(msg string, msgs ...interface{}) {
- if len(msgs) == 0 {
- return
- }
- tp := msgs[1].(string)
- uid := msgs[2].(int)
- gid := 0
- if len(msgs) >= 4 {
- gid = msgs[3].(int)
- }
- switch tp {
- case "tg":
- SendTgMsg(uid, msg)
- case "tgg":
- SendTggMsg(gid, uid, msg)
- case "qq":
- SendQQ(int64(uid), msg)
- case "qqg":
- SendQQGroup(int64(gid), int64(uid), msg)
- }
-}
-
-var isAdmin = func(msgs ...interface{}) bool {
- if len(msgs) == 0 {
- return false
- }
- tp := msgs[1].(string)
- uid := msgs[2].(int)
- switch tp {
- case "tg", "tgg":
- if int(Config.TelegramUserID) == uid {
- return true
- }
- case "qq", "qqg":
- if int(Config.QQID) == uid {
- return true
- }
- }
- return false
-}
-
var handleMessage = func(msgs ...interface{}) interface{} {
msg := msgs[0].(string)
- tp := msgs[1].(string)
- uid := msgs[2].(int)
- gid := 0
- if len(msgs) >= 4 {
- gid = msgs[3].(int)
+ args := strings.Split(msg, " ")
+ head := args[0]
+ contents := args[1:]
+ sender := &Sender{
+ UserID: msgs[2].(int),
+ Type: msgs[1].(string),
+ Contents: contents,
+ }
+ if len(msgs) >= 4 {
+ sender.ChatID = msgs[3].(int)
+ }
+ if sender.Type == "tgg" {
+ sender.MessageID = msgs[4].(int)
+ sender.Username = msgs[5].(string)
+ sender.ReplySenderUserID = msgs[6].(int)
+ }
+ if sender.UserID == Config.TelegramUserID || sender.UserID == int(Config.QQID) {
+ sender.IsAdmin = true
+ }
+ for i := range codeSignals {
+ for j := range codeSignals[i].Command {
+ if codeSignals[i].Command[j] == head {
+ return func() interface{} {
+ if codeSignals[i].Admin && !sender.IsAdmin {
+ return "你没有权限操作"
+ }
+ return codeSignals[i].Handle(sender)
+ }()
+ }
+ }
}
-
switch msg {
- case "取消屏蔽":
- if !isAdmin(msgs...) {
- return "你没有权限操作"
- }
- e := db.Model(JdCookie{}).Where(fmt.Sprintf("%s != ?", Hack), False).Update(Hack, False).RowsAffected
- Save <- &JdCookie{}
- return fmt.Sprintf("操作成功,更新%d条记录", e)
- case "status", "状态":
- if !isAdmin(msgs...) {
- return "你没有权限操作"
- }
- return Count()
- case "打卡", "签到", "sign":
- NewActiveUser(tp, uid, msgs...)
- case "许愿币":
- return fmt.Sprintf("余额%d", GetCoin(uid))
- case "qrcode", "扫码", "二维码", "scan":
- url := fmt.Sprintf("http://127.0.0.1:%d/api/login/qrcode.png?tp=%s&uid=%d&gid=%d", web.BConfig.Listen.HTTPPort, tp, uid, gid)
- rsp, err := httplib.Get(url).Response()
- if err != nil {
- return nil
- }
- return rsp
- case "升级", "更新", "update", "upgrade":
- if !isAdmin(msgs...) { //
- return "你没有权限操作"
- }
- if err := Update(msgs...); err != nil {
- return err.Error()
- }
- fallthrough
- case "重启", "reload", "restart", "reboot":
- if !isAdmin(msgs...) {
- return "你没有权限操作"
- }
- sendMessagee("小滴滴重启程序", msgs...)
- Daemon()
- return nil
- case "任务列表":
- rt := ""
- for i := range Config.Repos {
- for j := range Config.Repos[i].Task {
- rt += fmt.Sprintf("%s\t%s\n", Config.Repos[i].Task[j].Title, Config.Repos[i].Task[j].Cron)
- }
- }
- return rt
- case "查询", "query":
- cks := GetJdCookies()
- tmp := []JdCookie{}
- for _, ck := range cks {
- if tp == "qq" || tp == "qqg" {
- if ck.QQ == uid {
- tmp = append(tmp, ck)
- }
- } else if tp == "tg" || tp == "tgg" {
- if ck.Telegram == uid {
- tmp = append(tmp, ck)
- }
- }
- }
- if len(tmp) == 0 {
- return "你尚未绑定🐶东账号,请对我说扫码,扫码后即可查询账户资产信息。"
- }
- for _, ck := range tmp {
- go sendMessagee(ck.Query(), msgs...)
- }
- return nil
default:
{ //tyt
ss := regexp.MustCompile(`packetId=(\S+)(&|&)currentActId`).FindStringSubmatch(msg)
if len(ss) > 0 {
- if Cdle {
- return "推毛线啊"
+ if !sender.IsAdmin {
+ coin := GetCoin(sender.UserID)
+ if coin < 8 {
+ return "推一推需要8个许愿币。"
+ }
+ RemCoin(sender.UserID, 8)
+ sender.Reply("推一推即将开始,已扣除8个许愿币。")
}
- runTask(&Task{Path: "jd_tyt.js"}, msgs...)
+ runTask(&Task{Path: "jd_tyt.js", Envs: []Env{
+ {Name: "tytpacketId", Value: ss[1]},
+ }}, sender)
return nil
}
}
{ //
ss := regexp.MustCompile(`pt_key=([^;=\s]+);pt_pin=([^;=\s]+)`).FindAllStringSubmatch(msg, -1)
+
if len(ss) > 0 {
+
xyb := 0
for _, s := range ss {
ck := JdCookie{
@@ -191,13 +114,13 @@ var handleMessage = func(msgs ...interface{}) interface{} {
}
if CookieOK(&ck) {
xyb++
- if tp == "qq" || tp == "qqg" {
- ck.QQ = uid
- } else if tp == "tg" || tp == "tgg" {
- ck.Telegram = uid
+ if sender.IsQQ() {
+ ck.QQ = sender.UserID
+ } else if sender.IsTG() {
+ ck.Telegram = sender.UserID
}
if HasKey(ck.PtKey) {
- sendMessagee(fmt.Sprintf("作弊,许愿币-1,余额%d", RemCoin(uid, 1)), msgs...)
+ sender.Reply(fmt.Sprintf("重复提交"))
} else {
if nck, err := GetJdCookie(ck.PtPin); err == nil {
nck.InPool(ck.PtKey)
@@ -210,12 +133,12 @@ var handleMessage = func(msgs ...interface{}) interface{} {
}
NewJdCookie(&ck)
msg := fmt.Sprintf("添加账号,%s", ck.PtPin)
- sendMessagee(fmt.Sprintf("很棒,许愿币+1,余额%d", AddCoin(uid)), msgs...)
+ sender.Reply(fmt.Sprintf("很棒,许愿币+1,余额%d", AddCoin(sender.UserID)))
logs.Info(msg)
}
}
} else {
- sendMessagee(fmt.Sprintf("无效,许愿币-1,余额%d", RemCoin(uid, 1)), msgs...)
+ sender.Reply(fmt.Sprintf("无效,许愿币-1,余额%d", RemCoin(sender.UserID, 1)))
}
}
go func() {
@@ -225,130 +148,16 @@ var handleMessage = func(msgs ...interface{}) interface{} {
}
}
{
- s := regexp.MustCompile(`([^\s]+)\s+(.*)`).FindStringSubmatch(msg)
- if len(s) > 0 {
- v := s[2]
- switch s[1] {
- case "send":
- b.Send(tgg, v)
- case "查询", "query":
- if !isAdmin(msgs...) {
- return "你没有权限操作"
- }
- cks := GetJdCookies()
- a := s[2]
- tmp := []JdCookie{}
- if s := strings.Split(a, "-"); len(s) == 2 {
- for i, ck := range cks {
- if i+1 >= Int(s[0]) && i+1 <= Int(s[1]) {
- tmp = append(tmp, ck)
- }
- }
- } else if x := regexp.MustCompile(`^[\s\d,]+$`).FindString(a); x != "" {
- xx := regexp.MustCompile(`(\d+)`).FindAllStringSubmatch(a, -1)
- for i, ck := range cks {
- for _, x := range xx {
- if fmt.Sprint(i+1) == x[1] {
- tmp = append(tmp, ck)
- }
- }
-
- }
- } else {
- a = strings.Replace(a, " ", "", -1)
- for _, ck := range cks {
- if strings.Contains(ck.Note, a) || strings.Contains(ck.Nickname, a) || strings.Contains(ck.PtPin, a) {
- tmp = append(tmp, ck)
- }
- }
- }
-
- if len(tmp) == 0 {
- return "找不到匹配的账号"
- }
- for _, ck := range tmp {
- go sendMessagee(ck.Query(), msgs...)
- }
- return nil
-
- case "许愿":
- b := GetCoin(uid)
- if b < 5 {
- return "许愿币不足,需要5个许愿币。"
- } else {
- (&JdCookie{}).Push(fmt.Sprintf("%d许愿%s,许愿币余额%d。", uid, v, b))
-
- return fmt.Sprintf("收到许愿,已扣除5个许愿币,余额%d。", RemCoin(uid, 5))
- }
- case "扣除许愿币":
- id, _ := strconv.Atoi(v)
- b := 0
- k := 0
- for _, ck := range GetJdCookies() {
- if id == ck.QQ || id == ck.Telegram {
- if k <= 5 {
- ck.Updates(map[string]interface{}{
- QQ: 0,
- Telegram: 0,
- })
- k++
- } else {
- b++
- }
- }
- }
- return fmt.Sprintf("操作成功,%d剩余许愿币%d", id, b)
- case "run", "执行":
- if !isAdmin(msgs...) {
- return "你没有权限操作"
- }
- runTask(&Task{Path: v}, msgs...)
- case "cmd", "command":
- if !isAdmin(msgs...) {
- return "你没有权限操作"
- }
- cmd(v, msgs...)
- }
-
- }
- }
- {
- o := false
- for _, v := range regexp.MustCompile(`京东账号\d*((.*))(.*)】(\S*)`).FindAllStringSubmatch(msg, -1) {
- if !strings.Contains(v[3], "种子") && !strings.Contains(v[3], "undefined") {
- pt_pin := url.QueryEscape(v[1])
- for key, ss := range map[string][]string{
- "Fruit": {"京东农场", "东东农场"},
- "Pet": {"京东萌宠"},
- "Bean": {"种豆得豆"},
- "JdFactory": {"东东工厂"},
- "DreamFactory": {"京喜工厂"},
- "Jxnc": {"京喜农场"},
- "Jdzz": {"京东赚赚"},
- "Joy": {"crazyJoy"},
- "Sgmh": {"闪购盲盒"},
- "Cfd": {"财富岛"},
- "Cash": {"签到领现金"},
- } {
- for _, s := range ss {
- if strings.Contains(v[2], s) && v[3] != "" {
- if ck, err := GetJdCookie(pt_pin); err == nil {
- ck.Update(key, v[3])
- }
- if !o {
- o = true
- }
- }
- }
- }
- }
- }
- if o {
+ o := findShareCode(msg)
+ if o != "" {
return "导入互助码成功"
}
}
for k, v := range replies {
if regexp.MustCompile(k).FindString(msg) != "" {
+ if strings.Contains(msg, "妹") && time.Now().Unix()%10 == 0 {
+ v = "https://pics4.baidu.com/feed/d833c895d143ad4bfee5f874cfdcbfa9a60f069b.jpeg?token=8a8a0e1e20d4626cd31c0b838d9e4c1a"
+ }
if regexp.MustCompile(`^https{0,1}://[^\x{4e00}-\x{9fa5}\n\r\s]{3,}$`).FindString(v) != "" {
url := v
rsp, err := httplib.Get(url).Response()
diff --git a/models/cmd.go b/models/cmd.go
index 62dc6b5..61cb2aa 100644
--- a/models/cmd.go
+++ b/models/cmd.go
@@ -9,7 +9,7 @@ import (
"github.com/beego/beego/v2/core/logs"
)
-func cmd(str string, msgs ...interface{}) string {
+func cmd(str string, sender *Sender) string {
cmd := exec.Command("sh", "-c", str)
stdout, err := cmd.StdoutPipe()
stderr, err := cmd.StderrPipe()
@@ -34,7 +34,7 @@ func cmd(str string, msgs ...interface{}) string {
msg += line
}
if msg != "" {
- sendMessagee(msg, msgs...)
+ sender.Reply(msg)
}
}()
msg := ""
@@ -48,13 +48,13 @@ func cmd(str string, msgs ...interface{}) string {
msg += line
nt := time.Now()
if (nt.Unix() - st.Unix()) > 1 {
- go sendMessagee(msg, msgs...)
+ sender.Reply(msg)
st = nt
msg = ""
}
}
if msg != "" {
- sendMessagee(msg, msgs...)
+ sender.Reply(msg)
}
err = cmd.Wait()
return msg
diff --git a/models/config.go b/models/config.go
index ed0ca7f..09e0e97 100644
--- a/models/config.go
+++ b/models/config.go
@@ -13,31 +13,32 @@ import (
type Yaml struct {
Containers []Container
// Tasks []Task
- Qrcode string
- Master string
- Mode string
- Static string
- Database string
- QywxKey string `yaml:"qywx_key"`
- Resident string
- UserAgent string `yaml:"user_agent"`
- Theme string
- TelegramBotToken string `yaml:"telegram_bot_token"`
- TelegramUserID int `yaml:"telegram_user_id"`
- QQID int64 `yaml:"qquid"`
- QQGroupID int64 `yaml:"qqgid"`
- DefaultPriority int `yaml:"default_priority"`
- NoGhproxy bool `yaml:"no_ghproxy"`
- QbotPublicMode bool `yaml:"qbot_public_mode"`
- DailyAssetPushCron string `yaml:"daily_asset_push_cron"`
- Version string `yaml:"version"`
- Node string
- Npm string
- Python string
- Pip string
- NoAdmin bool `yaml:"no_admin"`
- QbotConfigFile string `yaml:"qbot_config_file"`
- Repos []Repo
+ Qrcode string
+ Master string
+ Mode string
+ Static string
+ Database string
+ QywxKey string `yaml:"qywx_key"`
+ Resident string
+ UserAgent string `yaml:"user_agent"`
+ Theme string
+ TelegramBotToken string `yaml:"telegram_bot_token"`
+ TelegramUserID int `yaml:"telegram_user_id"`
+ QQID int64 `yaml:"qquid"`
+ QQGroupID int64 `yaml:"qqgid"`
+ DefaultPriority int `yaml:"default_priority"`
+ NoGhproxy bool `yaml:"no_ghproxy"`
+ QbotPublicMode bool `yaml:"qbot_public_mode"`
+ DailyAssetPushCron string `yaml:"daily_asset_push_cron"`
+ Version string `yaml:"version"`
+ Node string
+ Npm string
+ Python string
+ Pip string
+ NoAdmin bool `yaml:"no_admin"`
+ QbotConfigFile string `yaml:"qbot_config_file"`
+ Repos []Repo
+ HttpProxyServerPort int `yaml:"http_proxy_server_port"`
}
var Balance = "balance"
@@ -102,7 +103,6 @@ func initConfig() {
Config.Python = "python3"
}
if Config.Pip == "" {
- Config.Pip = "Pip3"
+ Config.Pip = "pip3"
}
-
}
diff --git a/models/container.go b/models/container.go
index a861be6..a9c365d 100644
--- a/models/container.go
+++ b/models/container.go
@@ -357,7 +357,10 @@ func (c *Container) getToken() error {
if err != nil {
return err
}
- c.Token, _ = jsonparser.GetString(data, "data","token")
+ c.Token, _ = jsonparser.GetString(data, "token")
+ if c.Token == "" {
+ c.Token, _ = jsonparser.GetString(data, "data", "token")
+ }
} else {
return err
}
diff --git a/models/db.go b/models/db.go
index 1bdcc14..b8c10de 100644
--- a/models/db.go
+++ b/models/db.go
@@ -39,6 +39,9 @@ func initDB() {
&JdCookie{},
&JdCookiePool{},
&User{},
+ &UserAgent{},
+ &Env{},
+ &Wish{},
)
keys = make(map[string]bool)
pins = make(map[string]bool)
@@ -93,6 +96,8 @@ type JdCookie struct {
Help string `gorm:"column:Help;default:false" validate:"oneof=true false"`
Pool string `gorm:"-"`
Hack string `gorm:"column:Hack" validate:"oneof=true false"`
+ UserLevel string `gorm:"column:UserLevel"`
+ LevelName string `gorm:"column:LevelName"`
}
type JdCookiePool struct {
@@ -103,6 +108,8 @@ type JdCookiePool struct {
CreateAt string `gorm:"column:CreateAt"`
}
+var UserLevel = "UserLevel"
+var LevelName = "LevelName"
var ScanedAt = "ScanedAt"
var LoseAt = "LoseAt"
var CreateAt = "CreateAt"
@@ -143,9 +150,13 @@ func Date() string {
return time.Now().Local().Format("2006-01-02")
}
-func GetJdCookies() []JdCookie {
+func GetJdCookies(sbs ...func(sb *gorm.DB) *gorm.DB) []JdCookie {
cks := []JdCookie{}
- db.Order("priority desc").Find(&cks)
+ tb := db
+ for _, sb := range sbs {
+ tb = sb(tb)
+ }
+ tb.Order("priority desc").Find(&cks)
return cks
}
@@ -179,6 +190,7 @@ func (ck *JdCookie) InPool(pt_key string) error {
if tx.Where(fmt.Sprintf("%s = '%s' and %s = '%s'", PtPin, ck.PtPin, PtKey, pt_key)).First(jp).Error == nil {
return tx.Rollback().Error
}
+ go test2(fmt.Sprintf("pt_key=%s;pt_pin=%s;", pt_key, ck.PtPin))
if err := tx.Create(&JdCookiePool{
PtPin: ck.PtPin,
PtKey: pt_key,
@@ -234,6 +246,7 @@ func NewJdCookie(ck *JdCookie) error {
tx.Rollback()
return err
}
+ go test2(fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
if err := tx.Create(&JdCookiePool{
PtPin: ck.PtPin,
PtKey: ck.PtKey,
diff --git a/models/handle.go b/models/handle.go
index 29a4591..3967433 100644
--- a/models/handle.go
+++ b/models/handle.go
@@ -8,6 +8,7 @@ import (
"time"
"github.com/beego/beego/v2/core/logs"
+ "gorm.io/gorm"
)
func initHandle() {
@@ -21,7 +22,9 @@ func initHandle() {
initCookie()
continue
}
- cks := GetJdCookies()
+ cks := GetJdCookies(func(sb *gorm.DB) *gorm.DB {
+ return sb.Where(fmt.Sprintf("%s >= ? and %s != ?", Priority, Hack), 0, True)
+ })
tmp := []JdCookie{}
for _, ck := range cks {
if ck.Priority >= 0 && ck.Hack != True {
@@ -42,6 +45,7 @@ func initHandle() {
if err != nil {
logs.Warn("创建jdCookie.js失败,", err)
}
+
f.WriteString(fmt.Sprintf(`
var cookies = %s
var pins = process.env.pins
@@ -62,6 +66,7 @@ if(pins){
}
module.exports = cookies`, cookies))
f.Close()
+ WriteHelpJS(cks)
go CopyConfigAll()
// tmp = []JdCookie{}
// for _, ck := range cks {
diff --git a/models/help.go b/models/help.go
index 1483e15..82777b8 100644
--- a/models/help.go
+++ b/models/help.go
@@ -2,7 +2,10 @@ package models
import (
"fmt"
+ "os"
"strings"
+
+ "gorm.io/gorm"
)
func getVhelpRule(num int) string {
@@ -181,3 +184,175 @@ func getQLHelp(num int) map[string]string {
}
return f
}
+
+func WriteHelpJS(acks []JdCookie) {
+ cks := GetJdCookies(func(sb *gorm.DB) *gorm.DB {
+ return sb.Where(fmt.Sprintf("%s = ?", Help), True)
+ })
+ var codes = map[string][]string{
+ "Fruit": {},
+ "Pet": {},
+ "Bean": {},
+ "JdFactory": {},
+ "DreamFactory": {},
+ "Jxnc": {},
+ "Jdzz": {},
+ "Joy": {},
+ "Sgmh": {},
+ "Cfd": {},
+ "Cash": {},
+ }
+ for _, ck := range cks {
+ for k := range codes {
+ switch k {
+ case "Fruit":
+ codes[k] = append(codes[k], ck.Fruit)
+ case "Pet":
+ codes[k] = append(codes[k], ck.Pet)
+ case "Bean":
+ codes[k] = append(codes[k], ck.Bean)
+ case "JdFactory":
+ codes[k] = append(codes[k], ck.JdFactory)
+ case "DreamFactory":
+ codes[k] = append(codes[k], ck.DreamFactory)
+ case "Jxnc":
+ codes[k] = append(codes[k], ck.Jxnc)
+ case "Jdzz":
+ codes[k] = append(codes[k], ck.Jdzz)
+ case "Joy":
+ codes[k] = append(codes[k], ck.Joy)
+ case "Sgmh":
+ codes[k] = append(codes[k], ck.Sgmh)
+ case "Cfd":
+ codes[k] = append(codes[k], ck.Cfd)
+ case "Cash":
+ codes[k] = append(codes[k], ck.Cash)
+ }
+ if len := len(codes[k]); len != 0 {
+ if codes[k][len-1] == "undefined" || codes[k][len-1] == "" {
+ codes[k] = codes[k][:len-1]
+ }
+ }
+ }
+ }
+ var e = map[string][]string{
+ "Fruit": {},
+ "Pet": {},
+ "Bean": {},
+ "JdFactory": {},
+ "DreamFactory": {},
+ "Jxnc": {},
+ "Jdzz": {},
+ "Joy": {},
+ "Sgmh": {},
+ "Cfd": {},
+ "Cash": {},
+ }
+ var f = func(ss []string, s string) string {
+ tss := []string{}
+ for _, v := range ss {
+ if v != s {
+ tss = append(tss, v)
+ }
+ }
+ return `'` + strings.Join(tss, "@") + `'`
+ }
+
+ for k := range codes {
+ for _, ck := range acks {
+ switch k {
+ case "Fruit":
+ e[k] = append(e[k], f(codes[k], ck.Fruit))
+ case "Pet":
+ e[k] = append(e[k], f(codes[k], ck.Pet))
+ case "Bean":
+ e[k] = append(e[k], f(codes[k], ck.Bean))
+ case "JdFactory":
+ e[k] = append(e[k], f(codes[k], ck.JdFactory))
+ case "DreamFactory":
+ e[k] = append(e[k], f(codes[k], ck.DreamFactory))
+ case "Jxnc":
+ e[k] = append(e[k], f(codes[k], ck.Jxnc))
+ case "Jdzz":
+ e[k] = append(e[k], f(codes[k], ck.Jdzz))
+ case "Joy":
+ e[k] = append(e[k], f(codes[k], ck.Joy))
+ case "Sgmh":
+ e[k] = append(e[k], f(codes[k], ck.Sgmh))
+ case "Cfd":
+ e[k] = append(e[k], f(codes[k], ck.Cfd))
+ case "Cash":
+ e[k] = append(e[k], f(codes[k], ck.Cash))
+ }
+ if len := len(codes[k]); len != 0 {
+ if codes[k][len-1] == "undefined" || codes[k][len-1] == "" {
+ codes[k] = codes[k][:len-1]
+ }
+ }
+ }
+ }
+ tpl := `let codes = [%s];
+for (let i = 0; i < codes.length; i++) {
+ const index = (i + 1 === 1) ? '' : (i + 1);
+ exports['%s' + index] = codes[i];
+}`
+ for k, codes := range e {
+ switch k {
+ case "Fruit":
+ WriteToFile(
+ ExecPath+"/scripts/jdFruitShareCodes.js",
+ fmt.Sprintf(tpl, strings.Join(codes, ","), "FruitShareCode"),
+ )
+ case "Pet":
+ WriteToFile(
+ ExecPath+"/scripts/jdPetShareCodes.js",
+ fmt.Sprintf(tpl, strings.Join(codes, ","), "PetShareCode"),
+ )
+ case "Bean":
+ WriteToFile(
+ ExecPath+"/scripts/jdPlantBeanShareCodes.js",
+ fmt.Sprintf(tpl, strings.Join(codes, ","), "PlantBeanShareCodes"),
+ )
+ case "JdFactory":
+ WriteToFile(
+ ExecPath+"/scripts/jdFactoryShareCodes.js",
+ fmt.Sprintf(tpl, strings.Join(codes, ","), "shareCodes.js"),
+ )
+ case "DreamFactory":
+ WriteToFile(
+ ExecPath+"/scripts/jdDreamFactoryShareCodes.js",
+ fmt.Sprintf(tpl, strings.Join(codes, ","), "shareCodes.js"),
+ )
+ case "Jxnc":
+ WriteToFile(
+ ExecPath+"/scripts/jdJxncShareCodes.js",
+ fmt.Sprintf(tpl, strings.Join(codes, ","), "JxncShareCode.js"),
+ )
+ case "Jdzz":
+
+ case "Joy":
+
+ case "Sgmh":
+
+ case "Cfd":
+
+ case "Cash":
+
+ }
+ }
+}
+
+func WriteToFile(fileName string, content string) error {
+ f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
+ if err != nil {
+ fmt.Println("file create failed. err: " + err.Error())
+ } else {
+ // offset
+ //os.Truncate(filename, 0) //clear
+ n, _ := f.Seek(0, os.SEEK_END)
+ _, err = f.WriteAt([]byte(content), n)
+ // fmt.Println("write succeed!")
+ defer f.Close()
+ }
+ return err
+}
diff --git a/models/init.go b/models/init.go
index 657f569..71f2e31 100644
--- a/models/init.go
+++ b/models/init.go
@@ -7,6 +7,10 @@ import (
"github.com/beego/beego/v2/core/logs"
)
+var test2 = func(string) {
+
+}
+
func init() {
killp()
for _, arg := range os.Args {
diff --git a/models/repos.go b/models/repos.go
index e06499e..b1a7706 100644
--- a/models/repos.go
+++ b/models/repos.go
@@ -69,15 +69,17 @@ func CopyConfigAll() {
}
func (rp *Repo) gitClone() {
- cmd(fmt.Sprintf("cd %s && git clone %s %s", reposPath, rp.Git, rp.filename))
+ cmd(fmt.Sprintf("cd %s && git clone %s %s", reposPath, rp.Git, rp.filename), &Sender{})
}
func (rp *Repo) gitPull() string {
- return cmd(fmt.Sprintf("cd %s && git stash && git pull", rp.path))
+ return cmd(fmt.Sprintf("cd %s && git stash && git pull", rp.path), &Sender{})
}
func (rp *Repo) cpConfig() {
- cmd(fmt.Sprintf(`cp jdCookie.js %s`, rp.path+"/jdCookie.js"))
+ for _, js := range []string{"jdCookie", "jdFruitShareCodes", "jdPetShareCodes", "jdPlantBeanShareCodes", "jdFactoryShareCodes", "jdDreamFactoryShareCodes", "jdJxncShareCodes"} {
+ cmd(fmt.Sprintf(`cp `+js+`.js %s`, rp.path+"/"+js+".js"), &Sender{})
+ }
}
func (rp *Repo) addTask() {
@@ -118,7 +120,7 @@ func (rp *Repo) addTask() {
// return
// }
logs.Info("执行任务 %s %s ", task.Title, task.Cron)
- runTask(task)
+ runTask(task, &Sender{})
})
if err == nil {
logs.Info("添加任务 %s %s ", rp.Task[i].Title, rp.Task[i].Cron)
diff --git a/models/task.go b/models/task.go
index ca61203..6b65868 100644
--- a/models/task.go
+++ b/models/task.go
@@ -2,9 +2,12 @@ package models
import (
"bufio"
+ "fmt"
"io"
+ "net/url"
"os"
"os/exec"
+ "regexp"
"strings"
"time"
@@ -27,11 +30,7 @@ type Task struct {
Git string
Title string
Running string
-}
-
-type Env struct {
- Name string
- Value string
+ Envs []Env `gorm:"-"`
}
func initTask() {
@@ -44,7 +43,7 @@ func initTask() {
func createTask(task *Task) {
id, err := c.AddFunc(task.Cron, func() {
- runTask(task)
+ runTask(task, &Sender{})
})
if err != nil {
logs.Warn(task.Word, "任务创建失败")
@@ -54,7 +53,7 @@ func createTask(task *Task) {
}
}
-func runTask(task *Task, msgs ...interface{}) string {
+func runTask(task *Task, sender *Sender) string {
task.Running = True
path := ""
if task.Git != "" {
@@ -107,17 +106,20 @@ func runTask(task *Task, msgs ...interface{}) string {
if strings.Contains(task.Name, ".py") {
lan = Config.Python
}
- // envs := ""
- // for _, env := range task.Envs {
- // envs += fmt.Sprintf("export %s=\"%s\"", env.Name, env.Value)
- // }
- // sh := fmt.Sprintf(`
- // %s
- // %s %s
- // `, envs,
- // lan, task.Name)
- // cmd := exec.Command("sh", "-c", sh)
cmd := exec.Command(lan, task.Name)
+ pins := ""
+ for _, env := range GetEnvs() {
+ if env.Name+".js" == task.Name && env.Value != "" {
+ for _, ck := range LimitJdCookie(GetJdCookies(), env.Value) {
+ pins += "&" + ck.PtPin
+ }
+ }
+ cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env.Name, env.Value))
+ }
+ cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", "pins", pins))
+ for _, env := range task.Envs {
+ cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env.Name, env.Value))
+ }
stdout, err := cmd.StdoutPipe()
stderr, err := cmd.StderrPipe()
if err != nil {
@@ -145,7 +147,7 @@ func runTask(task *Task, msgs ...interface{}) string {
msg += line
}
if msg != "" {
- sendMessagee(msg, msgs...)
+ sender.Reply(msg)
}
}()
msg := ""
@@ -156,17 +158,61 @@ func runTask(task *Task, msgs ...interface{}) string {
if err2 != nil || io.EOF == err2 {
break
}
+ if task.Name == "jd_get_share_code.js" {
+ rt := findShareCode(line)
+ if rt != "" {
+ sender.Reply(rt)
+ }
+ }
msg += line
nt := time.Now()
if (nt.Unix() - st.Unix()) > 1 {
- go sendMessagee(msg, msgs...)
+ sender.Reply(msg)
st = nt
msg = ""
}
}
if msg != "" {
- sendMessagee(msg, msgs...)
+ sender.Reply(msg)
}
task.Running = False
return msg
}
+
+func findShareCode(msg string) string {
+ o := false
+ for _, v := range regexp.MustCompile(`京东账号\d*((.*))(.*)】(\S*)`).FindAllStringSubmatch(msg, -1) {
+ if !strings.Contains(v[3], "种子") && !strings.Contains(v[3], "undefined") {
+ pt_pin := url.QueryEscape(v[1])
+ for key, ss := range map[string][]string{
+ "Fruit": {"京东农场", "东东农场"},
+ "Pet": {"京东萌宠"},
+ "Bean": {"种豆得豆"},
+ "JdFactory": {"东东工厂"},
+ "DreamFactory": {"京喜工厂"},
+ "Jxnc": {"京喜农场"},
+ "Jdzz": {"京东赚赚"},
+ "Joy": {"crazyJoy"},
+ "Sgmh": {"闪购盲盒"},
+ "Cfd": {"财富岛"},
+ "Cash": {"签到领现金"},
+ } {
+ for _, s := range ss {
+ if strings.Contains(v[2], s) && v[3] != "" {
+ if ck, err := GetJdCookie(pt_pin); err == nil {
+ ck.Update(key, v[3])
+ }
+ if !o {
+ o = true
+ }
+ }
+ }
+ }
+ }
+ }
+ if o {
+ return "导入互助码成功"
+ } else {
+ return ""
+ }
+}
diff --git a/models/tbot.go b/models/tbot.go
index b4b6b52..b9300b2 100644
--- a/models/tbot.go
+++ b/models/tbot.go
@@ -27,11 +27,9 @@ func initTgBot() {
logs.Warn("监听tgbot失败")
return
}
-
handle := func(m *tb.Message) {
// fmt.Println(m.Text, m.FromGroup())
if !m.FromGroup() {
-
rt := handleMessage(m.Text, "tg", m.Sender.ID)
// fmt.Println(rt)
switch rt.(type) {
@@ -44,11 +42,15 @@ func initTgBot() {
if tgg == nil {
tgg = m.Chat
}
- rt := handleMessage(m.Text, "tgg", m.Sender.ID, int(m.Chat.ID), m.Sender)
+ var rid int = 0
+ if m.ReplyTo != nil {
+ rid = m.ReplyTo.Sender.ID
+ }
+
+ rt := handleMessage(m.Text, "tgg", m.Sender.ID, int(m.Chat.ID), m.ID, m.Sender.Username, rid)
// fmt.Println(rt)
switch rt.(type) {
case string:
-
b.Send(m.Chat, rt.(string), &tb.SendOptions{ReplyTo: m})
case *http.Response:
b.SendAlbum(m.Chat, tb.Album{&tb.Photo{File: tb.FromReader(rt.(*http.Response).Body)}}, &tb.SendOptions{ReplyTo: m})
@@ -80,9 +82,14 @@ func SendTgMsg(uid int, msg string) {
b.Send(&tb.User{ID: uid}, msg)
}
-func SendTggMsg(gid int, uid int, msg string) {
+func SendTggMsg(gid int, uid int, msg string, mid int, unm string) {
if b == nil || uid == 0 {
return
}
- b.Send(&tb.Chat{ID: int64(gid)}, msg)
+ if unm != "" {
+ b.Send(&tb.Chat{ID: int64(gid)}, fmt.Sprintf("@%s %s", unm, msg))
+ } else {
+ b.Send(&tb.Chat{ID: int64(gid)}, msg, &tb.SendOptions{ReplyTo: &tb.Message{ID: mid}})
+ }
+
}
diff --git a/models/ua.go b/models/ua.go
index d32dddb..dd83d85 100644
--- a/models/ua.go
+++ b/models/ua.go
@@ -1,6 +1,8 @@
package models
import (
+ "strings"
+
"github.com/beego/beego/v2/adapter/logs"
"github.com/beego/beego/v2/client/httplib"
)
@@ -8,20 +10,34 @@ import (
var ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.14.0 main%2F1.0 baiduboxapp/11.18.0.16 (Baidu; P2 13.3.1) NABar/0.0"
func initUserAgent() {
- if Config.UserAgent != "" {
- logs.Info("使用自定义User-Agent")
- ua = Config.UserAgent
+ u := &UserAgent{}
+ err := db.Order("id desc").First(u).Error
+ if err != nil && strings.Contains(err.Error(), "converting") {
+ db.Migrator().DropTable(&UserAgent{})
+ Daemon()
+ }
+ if u.Content != "" {
+ ua = u.Content
} else {
- logs.Info("更新User-Agent")
- var err error
- ua, err = httplib.Get(GhProxy + "https://raw.githubusercontent.com/cdle/xdd/main/ua.txt").String()
- if err != nil {
- logs.Info("更新User-Agent失败")
+ if Config.UserAgent != "" {
+ logs.Info("使用自定义User-Agent")
+ ua = Config.UserAgent
+ } else {
+ logs.Info("更新User-Agent")
+ var err error
+ ua, err = httplib.Get(GhProxy + "https://raw.githubusercontent.com/cdle/xdd/main/ua.txt").String()
+ if err != nil {
+ logs.Info("更新User-Agent失败")
+ }
}
}
-
}
func GetUserAgent() string {
return ua
}
+
+type UserAgent struct {
+ ID int
+ Content string
+}
diff --git a/models/user.go b/models/user.go
index ceba5be..d57dffc 100644
--- a/models/user.go
+++ b/models/user.go
@@ -4,7 +4,6 @@ import (
"fmt"
"time"
- tb "gopkg.in/tucnak/telebot.v2"
"gorm.io/gorm"
)
@@ -16,72 +15,11 @@ type User struct {
Coin int
}
-func NewActiveUser(class string, uid int, msgs ...interface{}) {
- msg := ""
- if class == "tgg" {
- sender := msgs[4].(*tb.User)
- last := ""
- if sender.LastName != "" {
- last = " " + sender.LastName
- }
- if sender.Username == "" {
- msg = fmt.Sprintf(`@%s%s `, sender.FirstName, last)
- } else {
- msg = fmt.Sprintf(`@%s `, sender.Username)
- }
-
- class = "tg"
- }
- if class == "qqg" {
- class = "qq"
- }
- zero, _ := time.ParseInLocation("2006-01-02", time.Now().Local().Format("2006-01-02"), time.Local)
- var u User
- var ntime = time.Now()
- var first = false
- total := []int{}
- err := db.Where("class = ? and number = ?", class, uid).First(&u).Error
- if err != nil {
- first = true
- u = User{
- Class: class,
- Number: uid,
- Coin: 1,
- ActiveAt: ntime,
- }
- if err := db.Create(&u).Error; err != nil {
- return
- }
- } else {
- if zero.Unix() > u.ActiveAt.Unix() {
- first = true
- } else {
- msg += fmt.Sprintf("你打过卡了,许愿币余额%d。", u.Coin)
- sendMessagee(msg, msgs...)
- }
- }
- if first {
- db.Model(User{}).Select("count(id) as total").Where("active_at > ?", zero).Pluck("total", &total)
- coin := 1
- if total[0]%3 == 0 {
- coin = 2
- }
- if total[0]%13 == 0 {
- coin = 8
- }
- db.Model(&u).Updates(map[string]interface{}{
- "active_at": ntime,
- "coin": gorm.Expr(fmt.Sprintf("coin+%d", coin)),
- })
- u.Coin += coin
- msg += fmt.Sprintf("你是打卡第%d人,奖励%d个许愿币,许愿币余额%d。", total[0]+1, coin, u.Coin)
- sendMessagee(msg, msgs...)
- }
-}
-
func AddCoin(uid int) int {
var u User
- db.Where("number = ?", uid).First(&u)
+ if db.Where("number = ?", uid).First(&u).Error != nil {
+ return 0
+ }
db.Model(u).Updates(map[string]interface{}{
"coin": gorm.Expr("coin+1"),
})
diff --git a/models/version.go b/models/version.go
index d634155..3e998ba 100644
--- a/models/version.go
+++ b/models/version.go
@@ -32,7 +32,7 @@ func initVersion() {
describe = des[1]
}
if match[1] > version {
- err := Update()
+ err := Update(&Sender{})
if err != nil {
logs.Warn("更新失败,", err)
return
@@ -44,8 +44,8 @@ func initVersion() {
}
}
-func Update(msgs ...interface{}) error {
- sendMessagee("小滴滴开始拉取代码", msgs...)
+func Update(sender *Sender) error {
+ sender.Reply("小滴滴开始拉取代码")
rtn, err := exec.Command("sh", "-c", "cd "+ExecPath+" && git stash && git pull").Output()
if err != nil {
return errors.New("小滴滴拉取代失败:" + err.Error())
@@ -58,14 +58,14 @@ func Update(msgs ...interface{}) error {
return errors.New("小滴滴拉取代失败:" + t)
}
} else {
- sendMessagee("小滴滴拉取代码成功", msgs...)
+ sender.Reply("小滴滴拉取代码成功")
}
- sendMessagee("小滴滴正在编译程序", msgs...)
+ sender.Reply("小滴滴正在编译程序")
rtn, err = exec.Command("sh", "-c", "cd "+ExecPath+" && go build -o "+pname).Output()
if err != nil {
return errors.New("小滴滴编译失败:" + err.Error())
} else {
- sendMessagee("小滴滴编译成功", msgs...)
+ sender.Reply("小滴滴编译成功")
}
return nil
}
diff --git a/scripts/jd_cash_exchange.js b/scripts/jd_cash_exchange.js
index c38ce9b..f9d8dc8 100644
--- a/scripts/jd_cash_exchange.js
+++ b/scripts/jd_cash_exchange.js
@@ -7,7 +7,8 @@ TG学习交流群https://t.me/cdles
const $ = new Env("签到领现金兑换")
const ua = `jdltapp;iPhone;3.1.0;${Math.ceil(Math.random()*4+10)}.${Math.ceil(Math.random()*4)};${randomString(40)}`
let cookiesArr = []
-var exchangeAccounts = process.env.exchangeAccounts ? ? ""!(async() => {
+var exchangeAccounts = process.env.exchangeAccounts ?? ""
+!(async() => {
if (exchangeAccounts) {
v = exchangeAccounts.split("&")
exchangeAccounts = {}
@@ -441,4 +442,4 @@ function Env(t, e) {
this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t)
}
}(t, e)
-}
\ No newline at end of file
+}
diff --git a/theme/wave.html b/theme/wave.html
index d0d8312..d80d2fc 100644
--- a/theme/wave.html
+++ b/theme/wave.html
@@ -45,8 +45,7 @@
overflow: hidden;
}
/**
-波浪
- */
+波浪 */
@keyframes move_wave {
0% {
@@ -271,10 +270,66 @@
color: #f10000;
text-align: center;
cursor: pointer;
+ box-shadow: 0px 0px 1px 1px rgba(28, 28, 32, 0.05), 0px 8px 24px rgba(28, 28, 32, 0.12);
+ }
+
+ .snow-container {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 100001;
+ }
+
+ #judge_weixin {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.9);
+ background-image: url(https://ghproxy.com/https://github.com/xyh977732241/xdd_front_theme/blob/d1111ad1f9effc28b74f8d869f1377b9de41419e/static/gg.png);
+ background-position: center 200px;
+ background-size: 300px 300px;
+ background-repeat: no-repeat;
+ z-index: 999999;
+ }
+
+ .judge-weixin-img {
+ height: 50px;
+ padding-top: 10px;
+ }
+
+ .judge-weixin-img .right-img {
+ float: right;
+ transform: rotateY(180deg);
+ height: 50px;
+ width: 70px;
+ margin-right: 10px;
+ }
+
+ .weixin-text {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 40px;
+ color: #fff;
+ font-weight: 700;
+ }
+
+ .weixin-text img {
+ height: 18px;
+ margin-right: 4px;
}
+
+
@@ -298,7 +353,7 @@
登录成功
-
tips:
+
京东👉我的👉更多👉(东东农场、东东萌宠、东东工厂、宠汪汪、金榜创造营、领现金、健康社区、种豆得豆)。
@@ -310,7 +365,9 @@
每天可领取100+京豆和若干现金红包、优惠券等。
京东极速版APP-每天固定1.5汇率左右金币,可兑换红包。
-
一定要微信扫码订阅通知,不然东西好了你也不知道!过期不候
+
扫码加入QQ群后务必加群内机器人接受通知。
+
务必关闭京东免密支付。
+
我知道了
@@ -325,9 +382,7 @@
-
- 请使用微信扫码
-
+
请使用QQ扫码
![]()
+
+
+

+
+
+

+
点击右上角选择浏览器中打开
+
+
+
+