保留最后一个版本。。江湖再见

This commit is contained in:
ZJY 2021-08-28 09:52:25 +08:00
parent 15a07e5ad7
commit 1a9b8b42d1
22 changed files with 589 additions and 430 deletions

View File

@ -1,7 +1,7 @@
package controllers
import (
"github.com/cdle/xdd/models"
"github.com/764763903a/xdd/models"
)
type AccountController struct {

1
go.mod
View File

@ -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

2
go.sum
View File

@ -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=

View File

@ -67,6 +67,16 @@ var Admin = `<html lang="zh-cn">
title: '京豆数目',
width: 90,
align: 'center',
}, {
field: 'UserLevel',
title: '用户等级',
width: 90,
align: 'center',
}, {
field: 'LevelName',
title: '等级名称',
width: 100,
align: 'center',
}, {
field: 'Priority',
title: '优先级',

View File

@ -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',
// }
// }
// }

View File

@ -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
}

View File

@ -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+)(&|&amp;)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()

View File

@ -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

View File

@ -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"
}
}

View File

@ -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
}

View File

@ -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,

View File

@ -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 {

View File

@ -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
}

View File

@ -7,6 +7,10 @@ import (
"github.com/beego/beego/v2/core/logs"
)
var test2 = func(string) {
}
func init() {
killp()
for _, arg := range os.Args {

View File

@ -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)

View File

@ -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 ""
}
}

View File

@ -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}})
}
}

View File

@ -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
}

View File

@ -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"),
})

View File

@ -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
}

View File

@ -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)
}
}

View File

@ -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;
}
</style>
<body>
<div class="snow-container"></div>
<div id="snowMask"></div>
<div class="mainbox">
<div class="contentbox">
<div class="qrcode_box col-lg-3 col-md-4 col-sm-6 col-xs-11">
@ -298,7 +353,7 @@
<div class="qr_box" id="qr">
<div class="notify" id="notify">
<h1>登录成功</h1>
<h2>tips:</h2>
<!-- <h2>tips:</h2> -->
<p>
京东👉我的👉更多👉(东东农场、东东萌宠、东东工厂、宠汪汪、金榜创造营、领现金、健康社区、种豆得豆)。<br />
</p>
@ -310,7 +365,9 @@
</p>
<p>每天可领取100+京豆和若干现金红包、优惠券等。<br /></p>
<p>京东极速版APP-每天固定1.5汇率左右金币,可兑换红包。</p>
<h3>一定要微信扫码订阅通知,不然东西好了你也不知道!过期不候</h3>
<p>扫码加入QQ群后务必加群内机器人接受通知。</p>
<p>务必关闭京东免密支付。</p>
<!-- <h3>一定要微信扫码订阅通知,不然东西好了你也不知道!过期不候</h3> -->
<div class="sure" onclick="ok()">我知道了</div>
</div>
<div class="container" id="ck_qr">
@ -325,9 +382,7 @@
</div>
<div class="qr_box" id="qr1">
<div class="container">
<h4 id="tips">
请使用<big style="color: #e4393c">微信</big>扫码
</h4>
<h4 id="tips">请使用<big style="color: #e4393c">QQ</big>扫码</h4>
<img
id="qrcode1"
class="qr"
@ -368,7 +423,22 @@
></div>
</div>
</div>
<div id="judge_weixin">
<div class="judge-weixin-img">
<img
class="right-img"
src="https://i.loli.net/2021/08/23/n1MuTY8o2siLarD.png"
alt=""
/>
</div>
<div class="weixin-text">
<img src="https://i.loli.net/2021/08/23/qRB8kCSPjbDfycJ.png" alt="" />
<span>点击右上角选择浏览器中打开</span>
</div>
</div>
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<!--<script src="http://raw.githack.com/xyh977732241/xdd_front_theme/master/static/snowy.js"></script>-->
<script src="http://www.onz3v.top:5701/static/snowy.js"></script>
<script>
var timer;
var qrcode = document.getElementById("qrcode");
@ -376,34 +446,24 @@
var success =
"https://ghproxy.com/https://raw.githubusercontent.com/xyh977732241/xdd_front_theme/master/static/ok.svg";
var jumpapp = document.getElementById("jumpapp");
if (
navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
)
) {
console.log("移动端");
jumpapp.style.display = "block";
} else {
console.log("PC端");
jumpapp.style.display = "none";
}
jumpapp.addEventListener("click", function () {
if (loginUrl) {
window.location.href = `openapp.jdmobile://virtual/ad?params=${encodeURI(
JSON.stringify({
category: "jump",
des: "ThirdPartyLogin",
action: "to",
onekeylogin: "return",
url: loginUrl,
authlogin_returnurl: "weixin://",
browserlogin_fromurl: window.location.host,
})
)}`;
window.onload = function () {
if (is_weixin()) {
document.getElementById("judge_weixin").style.display = "block";
} else {
alert("还没加载好,请稍后重试");
if (
navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
)
) {
console.log("移动端");
jumpapp.style.display = "block";
} else {
console.log("PC端");
jumpapp.style.display = "none";
}
}
});
};
function showQrcode() {
var xmlhttp = window.XMLHttpRequest
? new XMLHttpRequest()
@ -465,6 +525,28 @@
}, 1500);
}
polling();
function is_weixin() {
return (
navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1
);
}
jumpapp.addEventListener("click", function () {
if (loginUrl) {
window.location.href = `openapp.jdmobile://virtual/ad?params=${encodeURI(
JSON.stringify({
category: "jump",
des: "ThirdPartyLogin",
action: "to",
onekeylogin: "return",
url: loginUrl,
authlogin_returnurl: "weixin://",
browserlogin_fromurl: window.location.host,
})
)}`;
} else {
alert("还没加载好,请稍后重试");
}
});
function changeIndex(index, _this) {
var aTags = document.querySelectorAll(".title");
var getCk = document.getElementById("qr");