保留最后一个版本。。江湖再见
This commit is contained in:
parent
15a07e5ad7
commit
1a9b8b42d1
@ -1,7 +1,7 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/cdle/xdd/models"
|
"github.com/764763903a/xdd/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AccountController struct {
|
type AccountController struct {
|
||||||
|
|||||||
1
go.mod
1
go.mod
@ -12,6 +12,7 @@ require (
|
|||||||
github.com/Mrs4s/go-cqhttp v1.0.0-beta5
|
github.com/Mrs4s/go-cqhttp v1.0.0-beta5
|
||||||
github.com/beego/beego/v2 v2.0.1
|
github.com/beego/beego/v2 v2.0.1
|
||||||
github.com/buger/jsonparser v1.1.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/locales v0.13.0
|
||||||
github.com/go-playground/universal-translator v0.17.0
|
github.com/go-playground/universal-translator v0.17.0
|
||||||
github.com/go-playground/validator/v10 v10.4.1 // indirect
|
github.com/go-playground/validator/v10 v10.4.1 // indirect
|
||||||
|
|||||||
2
go.sum
2
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 h1:Lb3veSYoGaNck69fV2+Vf2juLSsHpMTf3Vk5+X+EDJg=
|
||||||
github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
|
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/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.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.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
||||||
|
|||||||
@ -67,6 +67,16 @@ var Admin = `<html lang="zh-cn">
|
|||||||
title: '京豆数目',
|
title: '京豆数目',
|
||||||
width: 90,
|
width: 90,
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
}, {
|
||||||
|
field: 'UserLevel',
|
||||||
|
title: '用户等级',
|
||||||
|
width: 90,
|
||||||
|
align: 'center',
|
||||||
|
}, {
|
||||||
|
field: 'LevelName',
|
||||||
|
title: '等级名称',
|
||||||
|
width: 100,
|
||||||
|
align: 'center',
|
||||||
}, {
|
}, {
|
||||||
field: 'Priority',
|
field: 'Priority',
|
||||||
title: '优先级',
|
title: '优先级',
|
||||||
|
|||||||
@ -75,6 +75,8 @@ func (ck *JdCookie) Query() string {
|
|||||||
}
|
}
|
||||||
asset := Asset{}
|
asset := Asset{}
|
||||||
if CookieOK(ck) {
|
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)
|
cookie := fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin)
|
||||||
var rpc = make(chan []RedList)
|
var rpc = make(chan []RedList)
|
||||||
var fruit = make(chan string)
|
var fruit = make(chan string)
|
||||||
@ -762,3 +764,37 @@ func jdzz(cookie string, state chan int64) { //
|
|||||||
mmc, _ := jsonparser.GetString(data, "data", "totalNum")
|
mmc, _ := jsonparser.GetString(data, "data", "totalNum")
|
||||||
state <- int64(Int(mmc))
|
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',
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package models
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/httplib"
|
"github.com/beego/beego/v2/client/httplib"
|
||||||
@ -134,8 +135,9 @@ func initCookie() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func CookieOK(ck *JdCookie) bool {
|
func CookieOK(ck *JdCookie) bool {
|
||||||
|
// fmt.Println(ck.PtPin)
|
||||||
cookie := fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin)
|
cookie := "pt_key=" + ck.PtKey + ";pt_pin=" + ck.PtPin + ";"
|
||||||
|
// fmt.Println(cookie)
|
||||||
// jdzz(cookie, make(chan int64))
|
// jdzz(cookie, make(chan int64))
|
||||||
if ck == nil {
|
if ck == nil {
|
||||||
return true
|
return true
|
||||||
@ -166,12 +168,19 @@ func CookieOK(ck *JdCookie) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
case "0":
|
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{
|
ck.Updates(JdCookie{
|
||||||
Nickname: ui.Data.UserInfo.BaseInfo.Nickname,
|
Nickname: ui.Data.UserInfo.BaseInfo.Nickname,
|
||||||
BeanNum: ui.Data.AssetInfo.BeanNum,
|
BeanNum: ui.Data.AssetInfo.BeanNum,
|
||||||
Available: True,
|
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.Nickname = ui.Data.UserInfo.BaseInfo.Nickname
|
||||||
ck.BeanNum = ui.Data.AssetInfo.BeanNum
|
ck.BeanNum = ui.Data.AssetInfo.BeanNum
|
||||||
}
|
}
|
||||||
|
|||||||
301
models/bot.go
301
models/bot.go
@ -3,15 +3,13 @@ package models
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/url"
|
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/httplib"
|
"github.com/beego/beego/v2/client/httplib"
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
"github.com/beego/beego/v2/server/web"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var SendQQ = func(a int64, b interface{}) {
|
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{} {
|
var handleMessage = func(msgs ...interface{}) interface{} {
|
||||||
msg := msgs[0].(string)
|
msg := msgs[0].(string)
|
||||||
tp := msgs[1].(string)
|
args := strings.Split(msg, " ")
|
||||||
uid := msgs[2].(int)
|
head := args[0]
|
||||||
gid := 0
|
contents := args[1:]
|
||||||
if len(msgs) >= 4 {
|
sender := &Sender{
|
||||||
gid = msgs[3].(int)
|
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 {
|
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:
|
default:
|
||||||
{ //tyt
|
{ //tyt
|
||||||
ss := regexp.MustCompile(`packetId=(\S+)(&|&)currentActId`).FindStringSubmatch(msg)
|
ss := regexp.MustCompile(`packetId=(\S+)(&|&)currentActId`).FindStringSubmatch(msg)
|
||||||
if len(ss) > 0 {
|
if len(ss) > 0 {
|
||||||
if Cdle {
|
if !sender.IsAdmin {
|
||||||
return "推毛线啊"
|
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
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{ //
|
{ //
|
||||||
ss := regexp.MustCompile(`pt_key=([^;=\s]+);pt_pin=([^;=\s]+)`).FindAllStringSubmatch(msg, -1)
|
ss := regexp.MustCompile(`pt_key=([^;=\s]+);pt_pin=([^;=\s]+)`).FindAllStringSubmatch(msg, -1)
|
||||||
|
|
||||||
if len(ss) > 0 {
|
if len(ss) > 0 {
|
||||||
|
|
||||||
xyb := 0
|
xyb := 0
|
||||||
for _, s := range ss {
|
for _, s := range ss {
|
||||||
ck := JdCookie{
|
ck := JdCookie{
|
||||||
@ -191,13 +114,13 @@ var handleMessage = func(msgs ...interface{}) interface{} {
|
|||||||
}
|
}
|
||||||
if CookieOK(&ck) {
|
if CookieOK(&ck) {
|
||||||
xyb++
|
xyb++
|
||||||
if tp == "qq" || tp == "qqg" {
|
if sender.IsQQ() {
|
||||||
ck.QQ = uid
|
ck.QQ = sender.UserID
|
||||||
} else if tp == "tg" || tp == "tgg" {
|
} else if sender.IsTG() {
|
||||||
ck.Telegram = uid
|
ck.Telegram = sender.UserID
|
||||||
}
|
}
|
||||||
if HasKey(ck.PtKey) {
|
if HasKey(ck.PtKey) {
|
||||||
sendMessagee(fmt.Sprintf("作弊,许愿币-1,余额%d", RemCoin(uid, 1)), msgs...)
|
sender.Reply(fmt.Sprintf("重复提交"))
|
||||||
} else {
|
} else {
|
||||||
if nck, err := GetJdCookie(ck.PtPin); err == nil {
|
if nck, err := GetJdCookie(ck.PtPin); err == nil {
|
||||||
nck.InPool(ck.PtKey)
|
nck.InPool(ck.PtKey)
|
||||||
@ -210,12 +133,12 @@ var handleMessage = func(msgs ...interface{}) interface{} {
|
|||||||
}
|
}
|
||||||
NewJdCookie(&ck)
|
NewJdCookie(&ck)
|
||||||
msg := fmt.Sprintf("添加账号,%s", ck.PtPin)
|
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)
|
logs.Info(msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sendMessagee(fmt.Sprintf("无效,许愿币-1,余额%d", RemCoin(uid, 1)), msgs...)
|
sender.Reply(fmt.Sprintf("无效,许愿币-1,余额%d", RemCoin(sender.UserID, 1)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
@ -225,130 +148,16 @@ var handleMessage = func(msgs ...interface{}) interface{} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
s := regexp.MustCompile(`([^\s]+)\s+(.*)`).FindStringSubmatch(msg)
|
o := findShareCode(msg)
|
||||||
if len(s) > 0 {
|
if o != "" {
|
||||||
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 {
|
|
||||||
return "导入互助码成功"
|
return "导入互助码成功"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for k, v := range replies {
|
for k, v := range replies {
|
||||||
if regexp.MustCompile(k).FindString(msg) != "" {
|
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) != "" {
|
if regexp.MustCompile(`^https{0,1}://[^\x{4e00}-\x{9fa5}\n\r\s]{3,}$`).FindString(v) != "" {
|
||||||
url := v
|
url := v
|
||||||
rsp, err := httplib.Get(url).Response()
|
rsp, err := httplib.Get(url).Response()
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import (
|
|||||||
"github.com/beego/beego/v2/core/logs"
|
"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)
|
cmd := exec.Command("sh", "-c", str)
|
||||||
stdout, err := cmd.StdoutPipe()
|
stdout, err := cmd.StdoutPipe()
|
||||||
stderr, err := cmd.StderrPipe()
|
stderr, err := cmd.StderrPipe()
|
||||||
@ -34,7 +34,7 @@ func cmd(str string, msgs ...interface{}) string {
|
|||||||
msg += line
|
msg += line
|
||||||
}
|
}
|
||||||
if msg != "" {
|
if msg != "" {
|
||||||
sendMessagee(msg, msgs...)
|
sender.Reply(msg)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
msg := ""
|
msg := ""
|
||||||
@ -48,13 +48,13 @@ func cmd(str string, msgs ...interface{}) string {
|
|||||||
msg += line
|
msg += line
|
||||||
nt := time.Now()
|
nt := time.Now()
|
||||||
if (nt.Unix() - st.Unix()) > 1 {
|
if (nt.Unix() - st.Unix()) > 1 {
|
||||||
go sendMessagee(msg, msgs...)
|
sender.Reply(msg)
|
||||||
st = nt
|
st = nt
|
||||||
msg = ""
|
msg = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if msg != "" {
|
if msg != "" {
|
||||||
sendMessagee(msg, msgs...)
|
sender.Reply(msg)
|
||||||
}
|
}
|
||||||
err = cmd.Wait()
|
err = cmd.Wait()
|
||||||
return msg
|
return msg
|
||||||
|
|||||||
@ -13,31 +13,32 @@ import (
|
|||||||
type Yaml struct {
|
type Yaml struct {
|
||||||
Containers []Container
|
Containers []Container
|
||||||
// Tasks []Task
|
// Tasks []Task
|
||||||
Qrcode string
|
Qrcode string
|
||||||
Master string
|
Master string
|
||||||
Mode string
|
Mode string
|
||||||
Static string
|
Static string
|
||||||
Database string
|
Database string
|
||||||
QywxKey string `yaml:"qywx_key"`
|
QywxKey string `yaml:"qywx_key"`
|
||||||
Resident string
|
Resident string
|
||||||
UserAgent string `yaml:"user_agent"`
|
UserAgent string `yaml:"user_agent"`
|
||||||
Theme string
|
Theme string
|
||||||
TelegramBotToken string `yaml:"telegram_bot_token"`
|
TelegramBotToken string `yaml:"telegram_bot_token"`
|
||||||
TelegramUserID int `yaml:"telegram_user_id"`
|
TelegramUserID int `yaml:"telegram_user_id"`
|
||||||
QQID int64 `yaml:"qquid"`
|
QQID int64 `yaml:"qquid"`
|
||||||
QQGroupID int64 `yaml:"qqgid"`
|
QQGroupID int64 `yaml:"qqgid"`
|
||||||
DefaultPriority int `yaml:"default_priority"`
|
DefaultPriority int `yaml:"default_priority"`
|
||||||
NoGhproxy bool `yaml:"no_ghproxy"`
|
NoGhproxy bool `yaml:"no_ghproxy"`
|
||||||
QbotPublicMode bool `yaml:"qbot_public_mode"`
|
QbotPublicMode bool `yaml:"qbot_public_mode"`
|
||||||
DailyAssetPushCron string `yaml:"daily_asset_push_cron"`
|
DailyAssetPushCron string `yaml:"daily_asset_push_cron"`
|
||||||
Version string `yaml:"version"`
|
Version string `yaml:"version"`
|
||||||
Node string
|
Node string
|
||||||
Npm string
|
Npm string
|
||||||
Python string
|
Python string
|
||||||
Pip string
|
Pip string
|
||||||
NoAdmin bool `yaml:"no_admin"`
|
NoAdmin bool `yaml:"no_admin"`
|
||||||
QbotConfigFile string `yaml:"qbot_config_file"`
|
QbotConfigFile string `yaml:"qbot_config_file"`
|
||||||
Repos []Repo
|
Repos []Repo
|
||||||
|
HttpProxyServerPort int `yaml:"http_proxy_server_port"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var Balance = "balance"
|
var Balance = "balance"
|
||||||
@ -102,7 +103,6 @@ func initConfig() {
|
|||||||
Config.Python = "python3"
|
Config.Python = "python3"
|
||||||
}
|
}
|
||||||
if Config.Pip == "" {
|
if Config.Pip == "" {
|
||||||
Config.Pip = "Pip3"
|
Config.Pip = "pip3"
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -357,7 +357,10 @@ func (c *Container) getToken() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
} else {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
17
models/db.go
17
models/db.go
@ -39,6 +39,9 @@ func initDB() {
|
|||||||
&JdCookie{},
|
&JdCookie{},
|
||||||
&JdCookiePool{},
|
&JdCookiePool{},
|
||||||
&User{},
|
&User{},
|
||||||
|
&UserAgent{},
|
||||||
|
&Env{},
|
||||||
|
&Wish{},
|
||||||
)
|
)
|
||||||
keys = make(map[string]bool)
|
keys = make(map[string]bool)
|
||||||
pins = 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"`
|
Help string `gorm:"column:Help;default:false" validate:"oneof=true false"`
|
||||||
Pool string `gorm:"-"`
|
Pool string `gorm:"-"`
|
||||||
Hack string `gorm:"column:Hack" validate:"oneof=true false"`
|
Hack string `gorm:"column:Hack" validate:"oneof=true false"`
|
||||||
|
UserLevel string `gorm:"column:UserLevel"`
|
||||||
|
LevelName string `gorm:"column:LevelName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type JdCookiePool struct {
|
type JdCookiePool struct {
|
||||||
@ -103,6 +108,8 @@ type JdCookiePool struct {
|
|||||||
CreateAt string `gorm:"column:CreateAt"`
|
CreateAt string `gorm:"column:CreateAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var UserLevel = "UserLevel"
|
||||||
|
var LevelName = "LevelName"
|
||||||
var ScanedAt = "ScanedAt"
|
var ScanedAt = "ScanedAt"
|
||||||
var LoseAt = "LoseAt"
|
var LoseAt = "LoseAt"
|
||||||
var CreateAt = "CreateAt"
|
var CreateAt = "CreateAt"
|
||||||
@ -143,9 +150,13 @@ func Date() string {
|
|||||||
return time.Now().Local().Format("2006-01-02")
|
return time.Now().Local().Format("2006-01-02")
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetJdCookies() []JdCookie {
|
func GetJdCookies(sbs ...func(sb *gorm.DB) *gorm.DB) []JdCookie {
|
||||||
cks := []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
|
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 {
|
if tx.Where(fmt.Sprintf("%s = '%s' and %s = '%s'", PtPin, ck.PtPin, PtKey, pt_key)).First(jp).Error == nil {
|
||||||
return tx.Rollback().Error
|
return tx.Rollback().Error
|
||||||
}
|
}
|
||||||
|
go test2(fmt.Sprintf("pt_key=%s;pt_pin=%s;", pt_key, ck.PtPin))
|
||||||
if err := tx.Create(&JdCookiePool{
|
if err := tx.Create(&JdCookiePool{
|
||||||
PtPin: ck.PtPin,
|
PtPin: ck.PtPin,
|
||||||
PtKey: pt_key,
|
PtKey: pt_key,
|
||||||
@ -234,6 +246,7 @@ func NewJdCookie(ck *JdCookie) error {
|
|||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
go test2(fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
|
||||||
if err := tx.Create(&JdCookiePool{
|
if err := tx.Create(&JdCookiePool{
|
||||||
PtPin: ck.PtPin,
|
PtPin: ck.PtPin,
|
||||||
PtKey: ck.PtKey,
|
PtKey: ck.PtKey,
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func initHandle() {
|
func initHandle() {
|
||||||
@ -21,7 +22,9 @@ func initHandle() {
|
|||||||
initCookie()
|
initCookie()
|
||||||
continue
|
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{}
|
tmp := []JdCookie{}
|
||||||
for _, ck := range cks {
|
for _, ck := range cks {
|
||||||
if ck.Priority >= 0 && ck.Hack != True {
|
if ck.Priority >= 0 && ck.Hack != True {
|
||||||
@ -42,6 +45,7 @@ func initHandle() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Warn("创建jdCookie.js失败,", err)
|
logs.Warn("创建jdCookie.js失败,", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
f.WriteString(fmt.Sprintf(`
|
f.WriteString(fmt.Sprintf(`
|
||||||
var cookies = %s
|
var cookies = %s
|
||||||
var pins = process.env.pins
|
var pins = process.env.pins
|
||||||
@ -62,6 +66,7 @@ if(pins){
|
|||||||
}
|
}
|
||||||
module.exports = cookies`, cookies))
|
module.exports = cookies`, cookies))
|
||||||
f.Close()
|
f.Close()
|
||||||
|
WriteHelpJS(cks)
|
||||||
go CopyConfigAll()
|
go CopyConfigAll()
|
||||||
// tmp = []JdCookie{}
|
// tmp = []JdCookie{}
|
||||||
// for _, ck := range cks {
|
// for _, ck := range cks {
|
||||||
|
|||||||
175
models/help.go
175
models/help.go
@ -2,7 +2,10 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getVhelpRule(num int) string {
|
func getVhelpRule(num int) string {
|
||||||
@ -181,3 +184,175 @@ func getQLHelp(num int) map[string]string {
|
|||||||
}
|
}
|
||||||
return f
|
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
|
||||||
|
}
|
||||||
|
|||||||
@ -7,6 +7,10 @@ import (
|
|||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var test2 = func(string) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
killp()
|
killp()
|
||||||
for _, arg := range os.Args {
|
for _, arg := range os.Args {
|
||||||
|
|||||||
@ -69,15 +69,17 @@ func CopyConfigAll() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rp *Repo) gitClone() {
|
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 {
|
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() {
|
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() {
|
func (rp *Repo) addTask() {
|
||||||
@ -118,7 +120,7 @@ func (rp *Repo) addTask() {
|
|||||||
// return
|
// return
|
||||||
// }
|
// }
|
||||||
logs.Info("执行任务 %s %s ", task.Title, task.Cron)
|
logs.Info("执行任务 %s %s ", task.Title, task.Cron)
|
||||||
runTask(task)
|
runTask(task, &Sender{})
|
||||||
})
|
})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
logs.Info("添加任务 %s %s ", rp.Task[i].Title, rp.Task[i].Cron)
|
logs.Info("添加任务 %s %s ", rp.Task[i].Title, rp.Task[i].Cron)
|
||||||
|
|||||||
@ -2,9 +2,12 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -27,11 +30,7 @@ type Task struct {
|
|||||||
Git string
|
Git string
|
||||||
Title string
|
Title string
|
||||||
Running string
|
Running string
|
||||||
}
|
Envs []Env `gorm:"-"`
|
||||||
|
|
||||||
type Env struct {
|
|
||||||
Name string
|
|
||||||
Value string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func initTask() {
|
func initTask() {
|
||||||
@ -44,7 +43,7 @@ func initTask() {
|
|||||||
|
|
||||||
func createTask(task *Task) {
|
func createTask(task *Task) {
|
||||||
id, err := c.AddFunc(task.Cron, func() {
|
id, err := c.AddFunc(task.Cron, func() {
|
||||||
runTask(task)
|
runTask(task, &Sender{})
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Warn(task.Word, "任务创建失败")
|
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
|
task.Running = True
|
||||||
path := ""
|
path := ""
|
||||||
if task.Git != "" {
|
if task.Git != "" {
|
||||||
@ -107,17 +106,20 @@ func runTask(task *Task, msgs ...interface{}) string {
|
|||||||
if strings.Contains(task.Name, ".py") {
|
if strings.Contains(task.Name, ".py") {
|
||||||
lan = Config.Python
|
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)
|
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()
|
stdout, err := cmd.StdoutPipe()
|
||||||
stderr, err := cmd.StderrPipe()
|
stderr, err := cmd.StderrPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -145,7 +147,7 @@ func runTask(task *Task, msgs ...interface{}) string {
|
|||||||
msg += line
|
msg += line
|
||||||
}
|
}
|
||||||
if msg != "" {
|
if msg != "" {
|
||||||
sendMessagee(msg, msgs...)
|
sender.Reply(msg)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
msg := ""
|
msg := ""
|
||||||
@ -156,17 +158,61 @@ func runTask(task *Task, msgs ...interface{}) string {
|
|||||||
if err2 != nil || io.EOF == err2 {
|
if err2 != nil || io.EOF == err2 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if task.Name == "jd_get_share_code.js" {
|
||||||
|
rt := findShareCode(line)
|
||||||
|
if rt != "" {
|
||||||
|
sender.Reply(rt)
|
||||||
|
}
|
||||||
|
}
|
||||||
msg += line
|
msg += line
|
||||||
nt := time.Now()
|
nt := time.Now()
|
||||||
if (nt.Unix() - st.Unix()) > 1 {
|
if (nt.Unix() - st.Unix()) > 1 {
|
||||||
go sendMessagee(msg, msgs...)
|
sender.Reply(msg)
|
||||||
st = nt
|
st = nt
|
||||||
msg = ""
|
msg = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if msg != "" {
|
if msg != "" {
|
||||||
sendMessagee(msg, msgs...)
|
sender.Reply(msg)
|
||||||
}
|
}
|
||||||
task.Running = False
|
task.Running = False
|
||||||
return msg
|
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 ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -27,11 +27,9 @@ func initTgBot() {
|
|||||||
logs.Warn("监听tgbot失败")
|
logs.Warn("监听tgbot失败")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
handle := func(m *tb.Message) {
|
handle := func(m *tb.Message) {
|
||||||
// fmt.Println(m.Text, m.FromGroup())
|
// fmt.Println(m.Text, m.FromGroup())
|
||||||
if !m.FromGroup() {
|
if !m.FromGroup() {
|
||||||
|
|
||||||
rt := handleMessage(m.Text, "tg", m.Sender.ID)
|
rt := handleMessage(m.Text, "tg", m.Sender.ID)
|
||||||
// fmt.Println(rt)
|
// fmt.Println(rt)
|
||||||
switch rt.(type) {
|
switch rt.(type) {
|
||||||
@ -44,11 +42,15 @@ func initTgBot() {
|
|||||||
if tgg == nil {
|
if tgg == nil {
|
||||||
tgg = m.Chat
|
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)
|
// fmt.Println(rt)
|
||||||
switch rt.(type) {
|
switch rt.(type) {
|
||||||
case string:
|
case string:
|
||||||
|
|
||||||
b.Send(m.Chat, rt.(string), &tb.SendOptions{ReplyTo: m})
|
b.Send(m.Chat, rt.(string), &tb.SendOptions{ReplyTo: m})
|
||||||
case *http.Response:
|
case *http.Response:
|
||||||
b.SendAlbum(m.Chat, tb.Album{&tb.Photo{File: tb.FromReader(rt.(*http.Response).Body)}}, &tb.SendOptions{ReplyTo: m})
|
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)
|
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 {
|
if b == nil || uid == 0 {
|
||||||
return
|
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}})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
34
models/ua.go
34
models/ua.go
@ -1,6 +1,8 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/adapter/logs"
|
"github.com/beego/beego/v2/adapter/logs"
|
||||||
"github.com/beego/beego/v2/client/httplib"
|
"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"
|
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() {
|
func initUserAgent() {
|
||||||
if Config.UserAgent != "" {
|
u := &UserAgent{}
|
||||||
logs.Info("使用自定义User-Agent")
|
err := db.Order("id desc").First(u).Error
|
||||||
ua = Config.UserAgent
|
if err != nil && strings.Contains(err.Error(), "converting") {
|
||||||
|
db.Migrator().DropTable(&UserAgent{})
|
||||||
|
Daemon()
|
||||||
|
}
|
||||||
|
if u.Content != "" {
|
||||||
|
ua = u.Content
|
||||||
} else {
|
} else {
|
||||||
logs.Info("更新User-Agent")
|
if Config.UserAgent != "" {
|
||||||
var err error
|
logs.Info("使用自定义User-Agent")
|
||||||
ua, err = httplib.Get(GhProxy + "https://raw.githubusercontent.com/cdle/xdd/main/ua.txt").String()
|
ua = Config.UserAgent
|
||||||
if err != nil {
|
} else {
|
||||||
logs.Info("更新User-Agent失败")
|
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 {
|
func GetUserAgent() string {
|
||||||
return ua
|
return ua
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UserAgent struct {
|
||||||
|
ID int
|
||||||
|
Content string
|
||||||
|
}
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
tb "gopkg.in/tucnak/telebot.v2"
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,72 +15,11 @@ type User struct {
|
|||||||
Coin int
|
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 {
|
func AddCoin(uid int) int {
|
||||||
var u User
|
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{}{
|
db.Model(u).Updates(map[string]interface{}{
|
||||||
"coin": gorm.Expr("coin+1"),
|
"coin": gorm.Expr("coin+1"),
|
||||||
})
|
})
|
||||||
|
|||||||
@ -32,7 +32,7 @@ func initVersion() {
|
|||||||
describe = des[1]
|
describe = des[1]
|
||||||
}
|
}
|
||||||
if match[1] > version {
|
if match[1] > version {
|
||||||
err := Update()
|
err := Update(&Sender{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Warn("更新失败,", err)
|
logs.Warn("更新失败,", err)
|
||||||
return
|
return
|
||||||
@ -44,8 +44,8 @@ func initVersion() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Update(msgs ...interface{}) error {
|
func Update(sender *Sender) error {
|
||||||
sendMessagee("小滴滴开始拉取代码", msgs...)
|
sender.Reply("小滴滴开始拉取代码")
|
||||||
rtn, err := exec.Command("sh", "-c", "cd "+ExecPath+" && git stash && git pull").Output()
|
rtn, err := exec.Command("sh", "-c", "cd "+ExecPath+" && git stash && git pull").Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("小滴滴拉取代失败:" + err.Error())
|
return errors.New("小滴滴拉取代失败:" + err.Error())
|
||||||
@ -58,14 +58,14 @@ func Update(msgs ...interface{}) error {
|
|||||||
return errors.New("小滴滴拉取代失败:" + t)
|
return errors.New("小滴滴拉取代失败:" + t)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sendMessagee("小滴滴拉取代码成功", msgs...)
|
sender.Reply("小滴滴拉取代码成功")
|
||||||
}
|
}
|
||||||
sendMessagee("小滴滴正在编译程序", msgs...)
|
sender.Reply("小滴滴正在编译程序")
|
||||||
rtn, err = exec.Command("sh", "-c", "cd "+ExecPath+" && go build -o "+pname).Output()
|
rtn, err = exec.Command("sh", "-c", "cd "+ExecPath+" && go build -o "+pname).Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("小滴滴编译失败:" + err.Error())
|
return errors.New("小滴滴编译失败:" + err.Error())
|
||||||
} else {
|
} else {
|
||||||
sendMessagee("小滴滴编译成功", msgs...)
|
sender.Reply("小滴滴编译成功")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,8 @@ TG学习交流群https://t.me/cdles
|
|||||||
const $ = new Env("签到领现金兑换")
|
const $ = new Env("签到领现金兑换")
|
||||||
const ua = `jdltapp;iPhone;3.1.0;${Math.ceil(Math.random()*4+10)}.${Math.ceil(Math.random()*4)};${randomString(40)}`
|
const ua = `jdltapp;iPhone;3.1.0;${Math.ceil(Math.random()*4+10)}.${Math.ceil(Math.random()*4)};${randomString(40)}`
|
||||||
let cookiesArr = []
|
let cookiesArr = []
|
||||||
var exchangeAccounts = process.env.exchangeAccounts ? ? ""!(async() => {
|
var exchangeAccounts = process.env.exchangeAccounts ?? ""
|
||||||
|
!(async() => {
|
||||||
if (exchangeAccounts) {
|
if (exchangeAccounts) {
|
||||||
v = exchangeAccounts.split("&")
|
v = exchangeAccounts.split("&")
|
||||||
exchangeAccounts = {}
|
exchangeAccounts = {}
|
||||||
@ -441,4 +442,4 @@ function Env(t, e) {
|
|||||||
this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t)
|
this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t)
|
||||||
}
|
}
|
||||||
}(t, e)
|
}(t, e)
|
||||||
}
|
}
|
||||||
|
|||||||
148
theme/wave.html
148
theme/wave.html
@ -45,8 +45,7 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
波浪
|
波浪 */
|
||||||
*/
|
|
||||||
|
|
||||||
@keyframes move_wave {
|
@keyframes move_wave {
|
||||||
0% {
|
0% {
|
||||||
@ -271,10 +270,66 @@
|
|||||||
color: #f10000;
|
color: #f10000;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
cursor: pointer;
|
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>
|
</style>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
<div class="snow-container"></div>
|
||||||
|
<div id="snowMask"></div>
|
||||||
<div class="mainbox">
|
<div class="mainbox">
|
||||||
<div class="contentbox">
|
<div class="contentbox">
|
||||||
<div class="qrcode_box col-lg-3 col-md-4 col-sm-6 col-xs-11">
|
<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="qr_box" id="qr">
|
||||||
<div class="notify" id="notify">
|
<div class="notify" id="notify">
|
||||||
<h1>登录成功</h1>
|
<h1>登录成功</h1>
|
||||||
<h2>tips:</h2>
|
<!-- <h2>tips:</h2> -->
|
||||||
<p>
|
<p>
|
||||||
京东👉我的👉更多👉(东东农场、东东萌宠、东东工厂、宠汪汪、金榜创造营、领现金、健康社区、种豆得豆)。<br />
|
京东👉我的👉更多👉(东东农场、东东萌宠、东东工厂、宠汪汪、金榜创造营、领现金、健康社区、种豆得豆)。<br />
|
||||||
</p>
|
</p>
|
||||||
@ -310,7 +365,9 @@
|
|||||||
</p>
|
</p>
|
||||||
<p>每天可领取100+京豆和若干现金红包、优惠券等。<br /></p>
|
<p>每天可领取100+京豆和若干现金红包、优惠券等。<br /></p>
|
||||||
<p>京东极速版APP-每天固定1.5汇率左右金币,可兑换红包。</p>
|
<p>京东极速版APP-每天固定1.5汇率左右金币,可兑换红包。</p>
|
||||||
<h3>一定要微信扫码订阅通知,不然东西好了你也不知道!过期不候</h3>
|
<p>扫码加入QQ群后务必加群内机器人接受通知。</p>
|
||||||
|
<p>务必关闭京东免密支付。</p>
|
||||||
|
<!-- <h3>一定要微信扫码订阅通知,不然东西好了你也不知道!过期不候</h3> -->
|
||||||
<div class="sure" onclick="ok()">我知道了</div>
|
<div class="sure" onclick="ok()">我知道了</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="container" id="ck_qr">
|
<div class="container" id="ck_qr">
|
||||||
@ -325,9 +382,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="qr_box" id="qr1">
|
<div class="qr_box" id="qr1">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h4 id="tips">
|
<h4 id="tips">请使用<big style="color: #e4393c">QQ</big>扫码</h4>
|
||||||
请使用<big style="color: #e4393c">微信</big>扫码
|
|
||||||
</h4>
|
|
||||||
<img
|
<img
|
||||||
id="qrcode1"
|
id="qrcode1"
|
||||||
class="qr"
|
class="qr"
|
||||||
@ -368,7 +423,22 @@
|
|||||||
></div>
|
></div>
|
||||||
</div>
|
</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="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>
|
<script>
|
||||||
var timer;
|
var timer;
|
||||||
var qrcode = document.getElementById("qrcode");
|
var qrcode = document.getElementById("qrcode");
|
||||||
@ -376,34 +446,24 @@
|
|||||||
var success =
|
var success =
|
||||||
"https://ghproxy.com/https://raw.githubusercontent.com/xyh977732241/xdd_front_theme/master/static/ok.svg";
|
"https://ghproxy.com/https://raw.githubusercontent.com/xyh977732241/xdd_front_theme/master/static/ok.svg";
|
||||||
var jumpapp = document.getElementById("jumpapp");
|
var jumpapp = document.getElementById("jumpapp");
|
||||||
if (
|
window.onload = function () {
|
||||||
navigator.userAgent.match(
|
if (is_weixin()) {
|
||||||
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
|
document.getElementById("judge_weixin").style.display = "block";
|
||||||
)
|
|
||||||
) {
|
|
||||||
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,
|
|
||||||
})
|
|
||||||
)}`;
|
|
||||||
} else {
|
} 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() {
|
function showQrcode() {
|
||||||
var xmlhttp = window.XMLHttpRequest
|
var xmlhttp = window.XMLHttpRequest
|
||||||
? new XMLHttpRequest()
|
? new XMLHttpRequest()
|
||||||
@ -465,6 +525,28 @@
|
|||||||
}, 1500);
|
}, 1500);
|
||||||
}
|
}
|
||||||
polling();
|
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) {
|
function changeIndex(index, _this) {
|
||||||
var aTags = document.querySelectorAll(".title");
|
var aTags = document.querySelectorAll(".title");
|
||||||
var getCk = document.getElementById("qr");
|
var getCk = document.getElementById("qr");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user