diff --git a/controllers/login.go b/controllers/login.go index cbc0d69..18ca773 100644 --- a/controllers/login.go +++ b/controllers/login.go @@ -116,30 +116,14 @@ func (c *LoginController) GetQrcode() { cookies = strings.Join(rsp.Header.Values("Set-Cookie"), " ") okl_token := FetchJdCookieValue("okl_token", cookies) data, _ = qrcode.Encode(url, qrcode.Medium, 256) - tgid := c.GetQueryInt("tgid") - qqid := c.GetQueryInt("qqid") - qqgid := c.GetQueryInt("qqgid") - qqguid := c.GetQueryInt("qqguid") - id := 0 - bot := "" - if tgid != 0 { - bot = "tg" - id = tgid - } - if qqid != 0 { - bot = "qq" - id = qqid - } - if qqgid != 0 { - bot = "qqg" - id = qqgid - } - JdCookieRunners.Store(st.Token, []interface{}{cookie, okl_token, bot, id, qqguid}) + bot := c.GetString("tp") + uid := c.GetQueryInt("uid") + gid := c.GetQueryInt("gid") + JdCookieRunners.Store(st.Token, []interface{}{cookie, okl_token, bot, uid, gid}) if bot != "" { c.Ctx.ResponseWriter.Write(data) return } - c.SetSession("jd_token", st.Token) c.SetSession("jd_cookie", cookie) c.SetSession("jd_okl_token", okl_token) @@ -157,33 +141,47 @@ func init() { cookie := vv[0].(string) okl_token := vv[1].(string) bot := vv[2].(string) - id := vv[3].(int) - guid := vv[4].(int) + uid := vv[3].(int) + gid := vv[4].(int) // fmt.Println(jd_token, cookie, okl_token) result, ck := CheckLogin(jd_token, cookie, okl_token) // fmt.Println(result) switch result { case "成功": - if bot == "qq" { - go models.SendQQ(int64(id), "扫码成功") - ck.Update(models.QQ, id) - } else if bot == "tg" { - ck.Update(models.Telegram, id) - go models.SendTgMsg(int(id), "扫码成功") - } else if bot == "qqg" { - ck.Update(models.QQ, guid) - go models.SendQQGroup(int64(id), int64(guid), "扫码成功") + switch bot { + case "qq", "qqg": + ck.Update(models.QQ, uid) + if gid != 0 { + go models.SendQQGroup(int64(uid), int64(gid), "扫码成功") + } else { + go models.SendQQ(int64(uid), "扫码成功") + } + case "tg", "tgg": + ck.Update(models.Telegram, uid) + if gid != 0 { + go models.SendTggMsg(int(uid), int(gid), "扫码成功") + } else { + go models.SendTgMsg(int(uid), "扫码成功") + } } - case "授权登录未确认": case "": default: //失效 - if bot == "qq" { - go models.SendQQ(int64(id), "扫码失败") - } else if bot == "tg" { - go models.SendTgMsg(int(id), "扫码失败") - } else if bot == "qqg" { - go models.SendQQGroup(int64(id), int64(guid), "扫码失败") + switch bot { + case "qq", "qqg": + ck.Update(models.QQ, uid) + if gid != 0 { + go models.SendQQGroup(int64(uid), int64(gid), "扫码失败") + } else { + go models.SendQQ(int64(uid), "扫码失败") + } + case "tg", "tgg": + ck.Update(models.Telegram, uid) + if gid != 0 { + go models.SendTggMsg(int(uid), int(gid), "扫码失败") + } else { + go models.SendTgMsg(int(uid), "扫码失败") + } } } } diff --git a/go.mod b/go.mod index 351e559..0158b88 100644 --- a/go.mod +++ b/go.mod @@ -14,9 +14,11 @@ require ( github.com/buger/jsonparser v1.1.1 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 github.com/guonaihong/gout v0.2.1 github.com/leodido/go-urn v1.2.1 // indirect github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible + github.com/mattn/go-isatty v0.0.13 // indirect github.com/pkg/errors v0.9.1 github.com/robfig/cron/v3 v3.0.1 github.com/sirupsen/logrus v1.8.1 @@ -26,10 +28,11 @@ require ( github.com/tuotoo/qrcode v0.0.0-20190222102259-ac9c44189bf2 golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect + golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 - gopkg.in/tucnak/telebot.v2 v2.3.5 + gopkg.in/tucnak/telebot.v2 v2.4.0 gopkg.in/yaml.v2 v2.2.8 gorm.io/driver/mysql v1.1.2 gorm.io/driver/postgres v1.1.0 diff --git a/go.sum b/go.sum index 22157c4..3c672ed 100644 --- a/go.sum +++ b/go.sum @@ -115,8 +115,9 @@ github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8c github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -321,8 +322,9 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= @@ -605,8 +607,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -699,8 +702,8 @@ gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3M gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/tucnak/telebot.v2 v2.3.5 h1:TdMJTlG8kvepsvZdy/gPeYEBdwKdwFFjH1AQTua9BOU= -gopkg.in/tucnak/telebot.v2 v2.3.5/go.mod h1:BgaIIx50PSRS9pG59JH+geT82cfvoJU/IaI5TJdN3v8= +gopkg.in/tucnak/telebot.v2 v2.4.0 h1:nOeqOWnOAD3dzbKW+NRumd8zjj5vrWwSa0WRTxvgfag= +gopkg.in/tucnak/telebot.v2 v2.4.0/go.mod h1:BgaIIx50PSRS9pG59JH+geT82cfvoJU/IaI5TJdN3v8= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/models/bot.go b/models/bot.go index d70fcd6..73ef134 100644 --- a/models/bot.go +++ b/models/bot.go @@ -27,8 +27,7 @@ var ListenQQPrivateMessage = func(uid int64, msg string) { var ListenQQGroupMessage = func(gid int64, uid int64, msg string) { if gid == Config.QQGroupID { if Config.QbotPublicMode { - - SendQQGroup(gid, uid, handleMessage(msg, "qqg", int(gid), int(uid))) + SendQQGroup(gid, uid, handleMessage(msg, "qqg", int(uid), int(gid))) } else { SendQQ(uid, handleMessage(msg, "qq", int(uid))) } @@ -57,37 +56,20 @@ var sendMessagee = func(msg string, msgs ...interface{}) { return } tp := msgs[1].(string) - id := msgs[2].(int) + uid := msgs[2].(int) + gid := 0 + if len(msgs) == 4 { + gid = msgs[3].(int) + } switch tp { case "tg": - SendTgMsg(id, msg) + SendTgMsg(uid, msg) + case "tgg": + SendTggMsg(uid, gid, msg) case "qq": - SendQQ(int64(id), msg) + SendQQ(int64(uid), msg) case "qqg": - SendQQGroup(int64(id), int64(msgs[3].(int)), msg) - } -} - -var sendAdminMessagee = func(msg string, msgs ...interface{}) { - if len(msgs) == 0 { - return - } - tp := msgs[1].(string) - id := msgs[2].(int) - switch tp { - case "tg": - if Config.TelegramUserID == id { - SendTgMsg(id, msg) - } - case "qq": - if int(Config.QQID) == id { - SendQQ(int64(id), msg) - } - case "qqg": - uid := msgs[3].(int) - if int(Config.QQID) == uid { - SendQQGroup(int64(id), int64(uid), msg) - } + SendQQGroup(int64(uid), int64(gid), msg) } } @@ -96,18 +78,13 @@ var isAdmin = func(msgs ...interface{}) bool { return false } tp := msgs[1].(string) - id := msgs[2].(int) + uid := msgs[2].(int) switch tp { - case "tg": - if Config.TelegramUserID == id { + case "tg", "tgg": + if int(Config.TelegramUserID) == uid { return true } - case "qq": - if int(Config.QQID) == id { - return true - } - case "qqg": - uid := msgs[3].(int) + case "qq", "qqg": if int(Config.QQID) == uid { return true } @@ -118,7 +95,11 @@ var isAdmin = func(msgs ...interface{}) bool { var handleMessage = func(msgs ...interface{}) interface{} { msg := msgs[0].(string) tp := msgs[1].(string) - id := msgs[2].(int) + uid := msgs[2].(int) + gid := 0 + if len(msgs) == 4 { + gid = msgs[3].(int) + } switch msg { case "status", "状态": if !isAdmin(msgs...) { @@ -126,14 +107,9 @@ var handleMessage = func(msgs ...interface{}) interface{} { } return Count() case "sign", "打卡": - return "打卡成功" + return "打卡成功,许愿币+1" case "qrcode", "扫码", "二维码", "scan": - url := "" - if tp == "qqg" { - url = fmt.Sprintf("http://127.0.0.1:%d/api/login/qrcode.png?%vid=%v&qqguid=%v", web.BConfig.Listen.HTTPPort, tp, id, msgs[3].(int)) - } else { - url = fmt.Sprintf("http://127.0.0.1:%d/api/login/qrcode.png?%vid=%v", web.BConfig.Listen.HTTPPort, tp, id) - } + 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 @@ -151,19 +127,19 @@ var handleMessage = func(msgs ...interface{}) interface{} { if !isAdmin(msgs...) { return "你没有权限操作" } - sendAdminMessagee("小滴滴重启程序", msgs...) + sendMessagee("小滴滴重启程序", msgs...) Daemon() return nil case "查询", "query": cks := GetJdCookies() tmp := []JdCookie{} for _, ck := range cks { - if tp == "qq" { - if ck.QQ == id { + if tp == "qq" || tp == "qqg" { + if ck.QQ == uid { tmp = append(tmp, ck) } - } else if tp == "qqg" { - if ck.QQ == msgs[3].(int) { + } else if tp == "tg" || tp == "tgg" { + if ck.Telegram == uid { tmp = append(tmp, ck) } } @@ -177,7 +153,7 @@ var handleMessage = func(msgs ...interface{}) interface{} { return nil default: { //tyt - ss := regexp.MustCompile(`packetId=(\S+!!)`).FindStringSubmatch(msg) + ss := regexp.MustCompile(`packetId=(\S+)¤tActId`).FindStringSubmatch(msg) if len(ss) > 0 { runTask(&Task{Path: "jd_tyt.js", Envs: []Env{ {Name: "tytpacketId", Value: ss[1]}, @@ -196,13 +172,10 @@ var handleMessage = func(msgs ...interface{}) interface{} { } if CookieOK(&ck) { xyb++ - if tp == "qq" { - ck.QQ = id - - } else if tp == "tg" { - ck.Telegram = id - } else if tp == "qqg" { - ck.QQ = msgs[3].(int) + if tp == "qq" || tp == "qqg" { + ck.QQ = uid + } else if tp == "tg" || tp == "tgg" { + ck.Telegram = uid } if nck, err := GetJdCookie(ck.PtPin); err == nil { nck.InPool(ck.PtKey) @@ -274,19 +247,16 @@ var handleMessage = func(msgs ...interface{}) interface{} { return nil case "许愿": - if tp == "qqg" { - id = msgs[3].(int) - } b := 0 for _, ck := range GetJdCookies() { - if id == ck.QQ || id == ck.Telegram { + if uid == ck.QQ || uid == ck.Telegram { b++ } } if b <= 0 { return "许愿币不足" } else { - (&JdCookie{}).Push(fmt.Sprintf("%d许愿%s,许愿币余额%d。", id, v, b)) + (&JdCookie{}).Push(fmt.Sprintf("%d许愿%s,许愿币余额%d。", uid, v, b)) return "收到许愿" } case "扣除许愿币": diff --git a/models/tbot.go b/models/tbot.go index 4887a96..e341bf7 100644 --- a/models/tbot.go +++ b/models/tbot.go @@ -1,6 +1,7 @@ package models import ( + "fmt" "net/http" "time" @@ -25,12 +26,25 @@ func initTgBot() { return } b.Handle(tb.OnText, func(m *tb.Message) { - rt := handleMessage(m.Text, "tg", m.Sender.ID) - switch rt.(type) { - case string: - b.Send(m.Sender, rt.(string)) - case *http.Response: - b.SendAlbum(m.Sender, tb.Album{&tb.Photo{File: tb.FromReader(rt.(*http.Response).Body)}}) + fmt.Println(m.Text, m.FromGroup()) + if !m.FromGroup() { + rt := handleMessage(m.Text, "tg", m.Sender.ID) + fmt.Println(rt) + switch rt.(type) { + case string: + b.Send(m.Sender, rt.(string)) + case *http.Response: + b.SendAlbum(m.Sender, tb.Album{&tb.Photo{File: tb.FromReader(rt.(*http.Response).Body)}}) + } + } else { + rt := handleMessage(m.Text, "tgg", m.Sender.ID, int(m.Chat.ID)) + // 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}) + } } }) logs.Info("监听tgbot") @@ -38,9 +52,16 @@ func initTgBot() { }() } -func SendTgMsg(id int, msg string) { - if b == nil || id == 0 { +func SendTgMsg(uid int, msg string) { + if b == nil || uid == 0 { return } - b.Send(&tb.User{ID: id}, msg) + b.Send(&tb.User{ID: uid}, msg) +} + +func SendTggMsg(uid int, gid int, msg string) { + if b == nil || uid == 0 { + return + } + b.Send(&tb.Chat{ID: int64(gid)}, msg) } diff --git a/models/version.go b/models/version.go index d5b6c97..53431cd 100644 --- a/models/version.go +++ b/models/version.go @@ -80,7 +80,7 @@ func Update(msgs ...interface{}) error { if err != nil { return errors.New("小滴滴编译失败:" + err.Error()) } else { - sendAdminMessagee("小滴滴编译成功", msgs...) + sendMessagee("小滴滴编译成功", msgs...) } return nil }