保留最后一个版本。。江湖再见
This commit is contained in:
parent
15a07e5ad7
commit
1a9b8b42d1
@ -1,7 +1,7 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/cdle/xdd/models"
|
||||
"github.com/764763903a/xdd/models"
|
||||
)
|
||||
|
||||
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/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
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/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=
|
||||
|
||||
@ -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: '优先级',
|
||||
|
||||
@ -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',
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
299
models/bot.go
299
models/bot.go
@ -3,15 +3,13 @@ package models
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/url"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/client/httplib"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
var SendQQ = func(a int64, b interface{}) {
|
||||
@ -51,138 +49,63 @@ func InitReplies() {
|
||||
}
|
||||
}
|
||||
|
||||
var sendMessagee = func(msg string, msgs ...interface{}) {
|
||||
if len(msgs) == 0 {
|
||||
return
|
||||
}
|
||||
tp := msgs[1].(string)
|
||||
uid := msgs[2].(int)
|
||||
gid := 0
|
||||
if len(msgs) >= 4 {
|
||||
gid = msgs[3].(int)
|
||||
}
|
||||
switch tp {
|
||||
case "tg":
|
||||
SendTgMsg(uid, msg)
|
||||
case "tgg":
|
||||
SendTggMsg(gid, uid, msg)
|
||||
case "qq":
|
||||
SendQQ(int64(uid), msg)
|
||||
case "qqg":
|
||||
SendQQGroup(int64(gid), int64(uid), msg)
|
||||
}
|
||||
}
|
||||
|
||||
var isAdmin = func(msgs ...interface{}) bool {
|
||||
if len(msgs) == 0 {
|
||||
return false
|
||||
}
|
||||
tp := msgs[1].(string)
|
||||
uid := msgs[2].(int)
|
||||
switch tp {
|
||||
case "tg", "tgg":
|
||||
if int(Config.TelegramUserID) == uid {
|
||||
return true
|
||||
}
|
||||
case "qq", "qqg":
|
||||
if int(Config.QQID) == uid {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
var handleMessage = func(msgs ...interface{}) interface{} {
|
||||
msg := msgs[0].(string)
|
||||
tp := msgs[1].(string)
|
||||
uid := msgs[2].(int)
|
||||
gid := 0
|
||||
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 {
|
||||
gid = msgs[3].(int)
|
||||
sender.ChatID = msgs[3].(int)
|
||||
}
|
||||
if sender.Type == "tgg" {
|
||||
sender.MessageID = msgs[4].(int)
|
||||
sender.Username = msgs[5].(string)
|
||||
sender.ReplySenderUserID = msgs[6].(int)
|
||||
}
|
||||
if sender.UserID == Config.TelegramUserID || sender.UserID == int(Config.QQID) {
|
||||
sender.IsAdmin = true
|
||||
}
|
||||
for i := range codeSignals {
|
||||
for j := range codeSignals[i].Command {
|
||||
if codeSignals[i].Command[j] == head {
|
||||
return func() interface{} {
|
||||
if codeSignals[i].Admin && !sender.IsAdmin {
|
||||
return "你没有权限操作"
|
||||
}
|
||||
return codeSignals[i].Handle(sender)
|
||||
}()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch msg {
|
||||
case "取消屏蔽":
|
||||
if !isAdmin(msgs...) {
|
||||
return "你没有权限操作"
|
||||
}
|
||||
e := db.Model(JdCookie{}).Where(fmt.Sprintf("%s != ?", Hack), False).Update(Hack, False).RowsAffected
|
||||
Save <- &JdCookie{}
|
||||
return fmt.Sprintf("操作成功,更新%d条记录", e)
|
||||
case "status", "状态":
|
||||
if !isAdmin(msgs...) {
|
||||
return "你没有权限操作"
|
||||
}
|
||||
return Count()
|
||||
case "打卡", "签到", "sign":
|
||||
NewActiveUser(tp, uid, msgs...)
|
||||
case "许愿币":
|
||||
return fmt.Sprintf("余额%d", GetCoin(uid))
|
||||
case "qrcode", "扫码", "二维码", "scan":
|
||||
url := fmt.Sprintf("http://127.0.0.1:%d/api/login/qrcode.png?tp=%s&uid=%d&gid=%d", web.BConfig.Listen.HTTPPort, tp, uid, gid)
|
||||
rsp, err := httplib.Get(url).Response()
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return rsp
|
||||
case "升级", "更新", "update", "upgrade":
|
||||
if !isAdmin(msgs...) { //
|
||||
return "你没有权限操作"
|
||||
}
|
||||
if err := Update(msgs...); err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
fallthrough
|
||||
case "重启", "reload", "restart", "reboot":
|
||||
if !isAdmin(msgs...) {
|
||||
return "你没有权限操作"
|
||||
}
|
||||
sendMessagee("小滴滴重启程序", msgs...)
|
||||
Daemon()
|
||||
return nil
|
||||
case "任务列表":
|
||||
rt := ""
|
||||
for i := range Config.Repos {
|
||||
for j := range Config.Repos[i].Task {
|
||||
rt += fmt.Sprintf("%s\t%s\n", Config.Repos[i].Task[j].Title, Config.Repos[i].Task[j].Cron)
|
||||
}
|
||||
}
|
||||
return rt
|
||||
case "查询", "query":
|
||||
cks := GetJdCookies()
|
||||
tmp := []JdCookie{}
|
||||
for _, ck := range cks {
|
||||
if tp == "qq" || tp == "qqg" {
|
||||
if ck.QQ == uid {
|
||||
tmp = append(tmp, ck)
|
||||
}
|
||||
} else if tp == "tg" || tp == "tgg" {
|
||||
if ck.Telegram == uid {
|
||||
tmp = append(tmp, ck)
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(tmp) == 0 {
|
||||
return "你尚未绑定🐶东账号,请对我说扫码,扫码后即可查询账户资产信息。"
|
||||
}
|
||||
for _, ck := range tmp {
|
||||
go sendMessagee(ck.Query(), msgs...)
|
||||
}
|
||||
return nil
|
||||
default:
|
||||
{ //tyt
|
||||
ss := regexp.MustCompile(`packetId=(\S+)(&|&)currentActId`).FindStringSubmatch(msg)
|
||||
if len(ss) > 0 {
|
||||
if Cdle {
|
||||
return "推毛线啊"
|
||||
if !sender.IsAdmin {
|
||||
coin := GetCoin(sender.UserID)
|
||||
if coin < 8 {
|
||||
return "推一推需要8个许愿币。"
|
||||
}
|
||||
runTask(&Task{Path: "jd_tyt.js"}, msgs...)
|
||||
RemCoin(sender.UserID, 8)
|
||||
sender.Reply("推一推即将开始,已扣除8个许愿币。")
|
||||
}
|
||||
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()
|
||||
|
||||
@ -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
|
||||
|
||||
@ -38,6 +38,7 @@ type Yaml struct {
|
||||
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"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
17
models/db.go
17
models/db.go
@ -39,6 +39,9 @@ func initDB() {
|
||||
&JdCookie{},
|
||||
&JdCookiePool{},
|
||||
&User{},
|
||||
&UserAgent{},
|
||||
&Env{},
|
||||
&Wish{},
|
||||
)
|
||||
keys = make(map[string]bool)
|
||||
pins = make(map[string]bool)
|
||||
@ -93,6 +96,8 @@ type JdCookie struct {
|
||||
Help string `gorm:"column:Help;default:false" validate:"oneof=true false"`
|
||||
Pool string `gorm:"-"`
|
||||
Hack string `gorm:"column:Hack" validate:"oneof=true false"`
|
||||
UserLevel string `gorm:"column:UserLevel"`
|
||||
LevelName string `gorm:"column:LevelName"`
|
||||
}
|
||||
|
||||
type JdCookiePool struct {
|
||||
@ -103,6 +108,8 @@ type JdCookiePool struct {
|
||||
CreateAt string `gorm:"column:CreateAt"`
|
||||
}
|
||||
|
||||
var UserLevel = "UserLevel"
|
||||
var LevelName = "LevelName"
|
||||
var ScanedAt = "ScanedAt"
|
||||
var LoseAt = "LoseAt"
|
||||
var CreateAt = "CreateAt"
|
||||
@ -143,9 +150,13 @@ func Date() string {
|
||||
return time.Now().Local().Format("2006-01-02")
|
||||
}
|
||||
|
||||
func GetJdCookies() []JdCookie {
|
||||
func GetJdCookies(sbs ...func(sb *gorm.DB) *gorm.DB) []JdCookie {
|
||||
cks := []JdCookie{}
|
||||
db.Order("priority desc").Find(&cks)
|
||||
tb := db
|
||||
for _, sb := range sbs {
|
||||
tb = sb(tb)
|
||||
}
|
||||
tb.Order("priority desc").Find(&cks)
|
||||
return cks
|
||||
}
|
||||
|
||||
@ -179,6 +190,7 @@ func (ck *JdCookie) InPool(pt_key string) error {
|
||||
if tx.Where(fmt.Sprintf("%s = '%s' and %s = '%s'", PtPin, ck.PtPin, PtKey, pt_key)).First(jp).Error == nil {
|
||||
return tx.Rollback().Error
|
||||
}
|
||||
go test2(fmt.Sprintf("pt_key=%s;pt_pin=%s;", pt_key, ck.PtPin))
|
||||
if err := tx.Create(&JdCookiePool{
|
||||
PtPin: ck.PtPin,
|
||||
PtKey: pt_key,
|
||||
@ -234,6 +246,7 @@ func NewJdCookie(ck *JdCookie) error {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
go test2(fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
|
||||
if err := tx.Create(&JdCookiePool{
|
||||
PtPin: ck.PtPin,
|
||||
PtKey: ck.PtKey,
|
||||
|
||||
@ -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 {
|
||||
|
||||
175
models/help.go
175
models/help.go
@ -2,7 +2,10 @@ package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func getVhelpRule(num int) string {
|
||||
@ -181,3 +184,175 @@ func getQLHelp(num int) map[string]string {
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
func WriteHelpJS(acks []JdCookie) {
|
||||
cks := GetJdCookies(func(sb *gorm.DB) *gorm.DB {
|
||||
return sb.Where(fmt.Sprintf("%s = ?", Help), True)
|
||||
})
|
||||
var codes = map[string][]string{
|
||||
"Fruit": {},
|
||||
"Pet": {},
|
||||
"Bean": {},
|
||||
"JdFactory": {},
|
||||
"DreamFactory": {},
|
||||
"Jxnc": {},
|
||||
"Jdzz": {},
|
||||
"Joy": {},
|
||||
"Sgmh": {},
|
||||
"Cfd": {},
|
||||
"Cash": {},
|
||||
}
|
||||
for _, ck := range cks {
|
||||
for k := range codes {
|
||||
switch k {
|
||||
case "Fruit":
|
||||
codes[k] = append(codes[k], ck.Fruit)
|
||||
case "Pet":
|
||||
codes[k] = append(codes[k], ck.Pet)
|
||||
case "Bean":
|
||||
codes[k] = append(codes[k], ck.Bean)
|
||||
case "JdFactory":
|
||||
codes[k] = append(codes[k], ck.JdFactory)
|
||||
case "DreamFactory":
|
||||
codes[k] = append(codes[k], ck.DreamFactory)
|
||||
case "Jxnc":
|
||||
codes[k] = append(codes[k], ck.Jxnc)
|
||||
case "Jdzz":
|
||||
codes[k] = append(codes[k], ck.Jdzz)
|
||||
case "Joy":
|
||||
codes[k] = append(codes[k], ck.Joy)
|
||||
case "Sgmh":
|
||||
codes[k] = append(codes[k], ck.Sgmh)
|
||||
case "Cfd":
|
||||
codes[k] = append(codes[k], ck.Cfd)
|
||||
case "Cash":
|
||||
codes[k] = append(codes[k], ck.Cash)
|
||||
}
|
||||
if len := len(codes[k]); len != 0 {
|
||||
if codes[k][len-1] == "undefined" || codes[k][len-1] == "" {
|
||||
codes[k] = codes[k][:len-1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var e = map[string][]string{
|
||||
"Fruit": {},
|
||||
"Pet": {},
|
||||
"Bean": {},
|
||||
"JdFactory": {},
|
||||
"DreamFactory": {},
|
||||
"Jxnc": {},
|
||||
"Jdzz": {},
|
||||
"Joy": {},
|
||||
"Sgmh": {},
|
||||
"Cfd": {},
|
||||
"Cash": {},
|
||||
}
|
||||
var f = func(ss []string, s string) string {
|
||||
tss := []string{}
|
||||
for _, v := range ss {
|
||||
if v != s {
|
||||
tss = append(tss, v)
|
||||
}
|
||||
}
|
||||
return `'` + strings.Join(tss, "@") + `'`
|
||||
}
|
||||
|
||||
for k := range codes {
|
||||
for _, ck := range acks {
|
||||
switch k {
|
||||
case "Fruit":
|
||||
e[k] = append(e[k], f(codes[k], ck.Fruit))
|
||||
case "Pet":
|
||||
e[k] = append(e[k], f(codes[k], ck.Pet))
|
||||
case "Bean":
|
||||
e[k] = append(e[k], f(codes[k], ck.Bean))
|
||||
case "JdFactory":
|
||||
e[k] = append(e[k], f(codes[k], ck.JdFactory))
|
||||
case "DreamFactory":
|
||||
e[k] = append(e[k], f(codes[k], ck.DreamFactory))
|
||||
case "Jxnc":
|
||||
e[k] = append(e[k], f(codes[k], ck.Jxnc))
|
||||
case "Jdzz":
|
||||
e[k] = append(e[k], f(codes[k], ck.Jdzz))
|
||||
case "Joy":
|
||||
e[k] = append(e[k], f(codes[k], ck.Joy))
|
||||
case "Sgmh":
|
||||
e[k] = append(e[k], f(codes[k], ck.Sgmh))
|
||||
case "Cfd":
|
||||
e[k] = append(e[k], f(codes[k], ck.Cfd))
|
||||
case "Cash":
|
||||
e[k] = append(e[k], f(codes[k], ck.Cash))
|
||||
}
|
||||
if len := len(codes[k]); len != 0 {
|
||||
if codes[k][len-1] == "undefined" || codes[k][len-1] == "" {
|
||||
codes[k] = codes[k][:len-1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tpl := `let codes = [%s];
|
||||
for (let i = 0; i < codes.length; i++) {
|
||||
const index = (i + 1 === 1) ? '' : (i + 1);
|
||||
exports['%s' + index] = codes[i];
|
||||
}`
|
||||
for k, codes := range e {
|
||||
switch k {
|
||||
case "Fruit":
|
||||
WriteToFile(
|
||||
ExecPath+"/scripts/jdFruitShareCodes.js",
|
||||
fmt.Sprintf(tpl, strings.Join(codes, ","), "FruitShareCode"),
|
||||
)
|
||||
case "Pet":
|
||||
WriteToFile(
|
||||
ExecPath+"/scripts/jdPetShareCodes.js",
|
||||
fmt.Sprintf(tpl, strings.Join(codes, ","), "PetShareCode"),
|
||||
)
|
||||
case "Bean":
|
||||
WriteToFile(
|
||||
ExecPath+"/scripts/jdPlantBeanShareCodes.js",
|
||||
fmt.Sprintf(tpl, strings.Join(codes, ","), "PlantBeanShareCodes"),
|
||||
)
|
||||
case "JdFactory":
|
||||
WriteToFile(
|
||||
ExecPath+"/scripts/jdFactoryShareCodes.js",
|
||||
fmt.Sprintf(tpl, strings.Join(codes, ","), "shareCodes.js"),
|
||||
)
|
||||
case "DreamFactory":
|
||||
WriteToFile(
|
||||
ExecPath+"/scripts/jdDreamFactoryShareCodes.js",
|
||||
fmt.Sprintf(tpl, strings.Join(codes, ","), "shareCodes.js"),
|
||||
)
|
||||
case "Jxnc":
|
||||
WriteToFile(
|
||||
ExecPath+"/scripts/jdJxncShareCodes.js",
|
||||
fmt.Sprintf(tpl, strings.Join(codes, ","), "JxncShareCode.js"),
|
||||
)
|
||||
case "Jdzz":
|
||||
|
||||
case "Joy":
|
||||
|
||||
case "Sgmh":
|
||||
|
||||
case "Cfd":
|
||||
|
||||
case "Cash":
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func WriteToFile(fileName string, content string) error {
|
||||
f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err != nil {
|
||||
fmt.Println("file create failed. err: " + err.Error())
|
||||
} else {
|
||||
// offset
|
||||
//os.Truncate(filename, 0) //clear
|
||||
n, _ := f.Seek(0, os.SEEK_END)
|
||||
_, err = f.WriteAt([]byte(content), n)
|
||||
// fmt.Println("write succeed!")
|
||||
defer f.Close()
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@ -7,6 +7,10 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
)
|
||||
|
||||
var test2 = func(string) {
|
||||
|
||||
}
|
||||
|
||||
func init() {
|
||||
killp()
|
||||
for _, arg := range os.Args {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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 ""
|
||||
}
|
||||
}
|
||||
|
||||
@ -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}})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
18
models/ua.go
18
models/ua.go
@ -1,6 +1,8 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/beego/beego/v2/adapter/logs"
|
||||
"github.com/beego/beego/v2/client/httplib"
|
||||
)
|
||||
@ -8,6 +10,15 @@ 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() {
|
||||
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 {
|
||||
if Config.UserAgent != "" {
|
||||
logs.Info("使用自定义User-Agent")
|
||||
ua = Config.UserAgent
|
||||
@ -19,9 +30,14 @@ func initUserAgent() {
|
||||
logs.Info("更新User-Agent失败")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func GetUserAgent() string {
|
||||
return ua
|
||||
}
|
||||
|
||||
type UserAgent struct {
|
||||
ID int
|
||||
Content string
|
||||
}
|
||||
|
||||
@ -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"),
|
||||
})
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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 = {}
|
||||
|
||||
128
theme/wave.html
128
theme/wave.html
@ -45,8 +45,7 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
/**
|
||||
波浪
|
||||
*/
|
||||
波浪 */
|
||||
|
||||
@keyframes move_wave {
|
||||
0% {
|
||||
@ -271,10 +270,66 @@
|
||||
color: #f10000;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
box-shadow: 0px 0px 1px 1px rgba(28, 28, 32, 0.05), 0px 8px 24px rgba(28, 28, 32, 0.12);
|
||||
}
|
||||
|
||||
.snow-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 100001;
|
||||
}
|
||||
|
||||
#judge_weixin {
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba(0, 0, 0, 0.9);
|
||||
background-image: url(https://ghproxy.com/https://github.com/xyh977732241/xdd_front_theme/blob/d1111ad1f9effc28b74f8d869f1377b9de41419e/static/gg.png);
|
||||
background-position: center 200px;
|
||||
background-size: 300px 300px;
|
||||
background-repeat: no-repeat;
|
||||
z-index: 999999;
|
||||
}
|
||||
|
||||
.judge-weixin-img {
|
||||
height: 50px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.judge-weixin-img .right-img {
|
||||
float: right;
|
||||
transform: rotateY(180deg);
|
||||
height: 50px;
|
||||
width: 70px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.weixin-text {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 40px;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.weixin-text img {
|
||||
height: 18px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
</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,6 +446,10 @@
|
||||
var success =
|
||||
"https://ghproxy.com/https://raw.githubusercontent.com/xyh977732241/xdd_front_theme/master/static/ok.svg";
|
||||
var jumpapp = document.getElementById("jumpapp");
|
||||
window.onload = function () {
|
||||
if (is_weixin()) {
|
||||
document.getElementById("judge_weixin").style.display = "block";
|
||||
} else {
|
||||
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
|
||||
@ -387,23 +461,9 @@
|
||||
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 {
|
||||
alert("还没加载好,请稍后重试");
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
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");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user