2021-08-29 17:33:05 +08:00
|
|
|
|
package models
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2021-10-01 23:36:01 +08:00
|
|
|
|
"encoding/base64"
|
|
|
|
|
|
"encoding/json"
|
2021-08-29 17:33:05 +08:00
|
|
|
|
"errors"
|
|
|
|
|
|
"fmt"
|
2021-10-01 23:36:01 +08:00
|
|
|
|
"github.com/beego/beego/v2/client/httplib"
|
2021-09-07 12:31:33 +08:00
|
|
|
|
"github.com/beego/beego/v2/core/logs"
|
2021-10-01 23:36:01 +08:00
|
|
|
|
"io/ioutil"
|
2021-08-29 17:33:05 +08:00
|
|
|
|
"regexp"
|
|
|
|
|
|
"strings"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type CodeSignal struct {
|
|
|
|
|
|
Command []string
|
|
|
|
|
|
Admin bool
|
|
|
|
|
|
Handle func(sender *Sender) interface{}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type Sender struct {
|
|
|
|
|
|
UserID int
|
|
|
|
|
|
ChatID int
|
|
|
|
|
|
Type string
|
|
|
|
|
|
Contents []string
|
|
|
|
|
|
MessageID int
|
|
|
|
|
|
Username string
|
|
|
|
|
|
IsAdmin bool
|
|
|
|
|
|
ReplySenderUserID int
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-09-21 18:22:04 +08:00
|
|
|
|
type QQuery struct {
|
|
|
|
|
|
Code int `json:"code"`
|
|
|
|
|
|
Data struct {
|
|
|
|
|
|
LSid string `json:"lSid"`
|
|
|
|
|
|
QqLoginQrcode struct {
|
2021-09-29 10:55:22 +08:00
|
|
|
|
Bytes string `json:"bytes"`
|
2021-09-21 18:22:04 +08:00
|
|
|
|
Sig string `json:"sig"`
|
|
|
|
|
|
} `json:"qqLoginQrcode"`
|
|
|
|
|
|
RedirectURL string `json:"redirectUrl"`
|
|
|
|
|
|
State string `json:"state"`
|
|
|
|
|
|
TempCookie string `json:"tempCookie"`
|
|
|
|
|
|
} `json:"data"`
|
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-08-29 17:33:05 +08:00
|
|
|
|
func (sender *Sender) Reply(msg string) {
|
|
|
|
|
|
switch sender.Type {
|
|
|
|
|
|
case "tg":
|
|
|
|
|
|
SendTgMsg(sender.UserID, msg)
|
|
|
|
|
|
case "tgg":
|
|
|
|
|
|
SendTggMsg(sender.ChatID, sender.UserID, msg, sender.MessageID, sender.Username)
|
|
|
|
|
|
case "qq":
|
|
|
|
|
|
SendQQ(int64(sender.UserID), msg)
|
|
|
|
|
|
case "qqg":
|
|
|
|
|
|
SendQQGroup(int64(sender.ChatID), int64(sender.UserID), msg)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (sender *Sender) JoinContens() string {
|
|
|
|
|
|
return strings.Join(sender.Contents, " ")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (sender *Sender) IsQQ() bool {
|
|
|
|
|
|
return strings.Contains(sender.Type, "qq")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (sender *Sender) IsTG() bool {
|
|
|
|
|
|
return strings.Contains(sender.Type, "tg")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (sender *Sender) handleJdCookies(handle func(ck *JdCookie)) error {
|
|
|
|
|
|
cks := GetJdCookies()
|
|
|
|
|
|
a := sender.JoinContens()
|
|
|
|
|
|
ok := false
|
|
|
|
|
|
if !sender.IsAdmin || a == "" {
|
|
|
|
|
|
for i := range cks {
|
|
|
|
|
|
if strings.Contains(sender.Type, "qq") {
|
|
|
|
|
|
if cks[i].QQ == sender.UserID {
|
|
|
|
|
|
if !ok {
|
|
|
|
|
|
ok = true
|
|
|
|
|
|
}
|
|
|
|
|
|
handle(&cks[i])
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if strings.Contains(sender.Type, "tg") {
|
|
|
|
|
|
if cks[i].Telegram == sender.UserID {
|
|
|
|
|
|
if !ok {
|
|
|
|
|
|
ok = true
|
|
|
|
|
|
}
|
|
|
|
|
|
handle(&cks[i])
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if !ok {
|
2021-09-04 18:37:06 +08:00
|
|
|
|
sender.Reply("你尚未绑定🐶东账号,请提交wskey,提交后即可查询账户资产信息。")
|
|
|
|
|
|
return errors.New("你尚未绑定🐶东账号,请提交wskey,提交后即可查询账户资产信息。")
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cks = LimitJdCookie(cks, a)
|
|
|
|
|
|
if len(cks) == 0 {
|
|
|
|
|
|
sender.Reply("没有匹配的账号")
|
|
|
|
|
|
return errors.New("没有匹配的账号")
|
|
|
|
|
|
} else {
|
|
|
|
|
|
for i := range cks {
|
|
|
|
|
|
handle(&cks[i])
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var codeSignals = []CodeSignal{
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"status", "状态"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
return Count()
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-28 09:00:15 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"清空WCK"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
2021-09-28 09:01:29 +08:00
|
|
|
|
cleanWck()
|
2021-09-28 09:00:15 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-25 10:34:03 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"删除WCK"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(WsKey, "")
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已删除WCK,%s", ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-10-01 23:36:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"qrcode", "扫码", "二维码", "scan"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
rsp, err := httplib.Post("https://api.kukuqaq.com/jd/qrcode").Response()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
body, err1 := ioutil.ReadAll(rsp.Body)
|
|
|
|
|
|
if err1 == nil {
|
|
|
|
|
|
fmt.Println(string(body))
|
|
|
|
|
|
}
|
|
|
|
|
|
s := &QQuery{}
|
|
|
|
|
|
if len(body) > 0 {
|
|
|
|
|
|
json.Unmarshal(body, &s)
|
|
|
|
|
|
}
|
|
|
|
|
|
logs.Info(s.Data.QqLoginQrcode.Bytes)
|
|
|
|
|
|
ddd, _ := base64.StdEncoding.DecodeString(s.Data.QqLoginQrcode.Bytes) //成图片文件并把文件写入到buffer
|
|
|
|
|
|
err2 := ioutil.WriteFile("./output.jpg", ddd, 0666) //buffer输出到jpg文件中(不做处理,直接写到文件)
|
|
|
|
|
|
if err2 != nil {
|
|
|
|
|
|
logs.Error(err2)
|
|
|
|
|
|
}
|
|
|
|
|
|
//ddd, _ := base64.StdEncoding.DecodeString("data:image/png;base64,"+s.Data.QqLoginQrcode.Bytes)
|
|
|
|
|
|
return "data:image/png;base64," + s.Data.QqLoginQrcode.Bytes
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"sign", "打卡", "签到"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
//if sender.Type == "tgg" {
|
|
|
|
|
|
// sender.Type = "tg"
|
|
|
|
|
|
//}
|
|
|
|
|
|
//if sender.Type == "qqg" {
|
|
|
|
|
|
// sender.Type = "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("number = ?", sender.UserID).First(&u).Error
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
first = true
|
|
|
|
|
|
u = User{
|
|
|
|
|
|
Class: sender.Type,
|
|
|
|
|
|
Number: sender.UserID,
|
|
|
|
|
|
Coin: 1,
|
|
|
|
|
|
ActiveAt: ntime,
|
2021-09-15 22:25:20 +08:00
|
|
|
|
Womail: "",
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
if err := db.Create(&u).Error; err != nil {
|
|
|
|
|
|
return err.Error()
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
if zero.Unix() > u.ActiveAt.Unix() {
|
|
|
|
|
|
first = true
|
|
|
|
|
|
} else {
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return fmt.Sprintf("你打过卡了,互助值余额%d。", u.Coin)
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
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
|
2021-09-15 22:25:20 +08:00
|
|
|
|
if u.Womail != "" {
|
2021-09-15 18:31:24 +08:00
|
|
|
|
rsp := cmd(fmt.Sprintf(`python3 womail.py "%s"`, u.Womail), &Sender{})
|
2021-09-15 22:25:20 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("%s", rsp))
|
2021-09-15 18:31:24 +08:00
|
|
|
|
}
|
2021-09-13 15:44:36 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("你是打卡第%d人,奖励%d个互助值,互助值余额%d。", total[0]+1, coin, u.Coin))
|
2021-08-29 17:33:05 +08:00
|
|
|
|
ReturnCoin(sender)
|
|
|
|
|
|
return ""
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-15 22:25:20 +08:00
|
|
|
|
{
|
2021-09-13 15:44:36 +08:00
|
|
|
|
Command: []string{"清零"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Priority, 1)
|
2021-09-15 22:25:20 +08:00
|
|
|
|
|
2021-09-13 15:44:36 +08:00
|
|
|
|
})
|
|
|
|
|
|
sender.Reply("优先级已清零")
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
2021-09-23 13:11:22 +08:00
|
|
|
|
Command: []string{"更新优先级", "更新车位"},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
2021-09-15 22:25:20 +08:00
|
|
|
|
coin := GetCoin(sender.UserID)
|
|
|
|
|
|
t := time.Now()
|
|
|
|
|
|
if t.Weekday().String() == "Monday" && int(t.Hour()) <= 10 {
|
2021-09-13 15:44:36 +08:00
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Priority, coin)
|
|
|
|
|
|
})
|
|
|
|
|
|
sender.Reply("优先级已更新")
|
|
|
|
|
|
ClearCoin(sender.UserID)
|
2021-09-15 22:25:20 +08:00
|
|
|
|
} else {
|
2021-09-23 13:11:22 +08:00
|
|
|
|
sender.Reply("你错过时间了呆瓜,下周一10点前再来吧.")
|
2021-09-15 22:25:20 +08:00
|
|
|
|
}
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"coin", "互助值", "余额", "yu", "yue"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
return fmt.Sprintf("互助值余额%d", GetCoin(sender.UserID))
|
2021-08-29 17:33:05 +08:00
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-07 11:02:07 +08:00
|
|
|
|
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"升级", "更新", "update", "upgrade"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
if err := Update(sender); err != nil {
|
|
|
|
|
|
return err.Error()
|
|
|
|
|
|
}
|
2021-09-04 18:37:06 +08:00
|
|
|
|
sender.Reply("重启程序")
|
2021-08-29 17:33:05 +08:00
|
|
|
|
Daemon()
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"重启", "reload", "restart", "reboot"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
2021-09-04 18:37:06 +08:00
|
|
|
|
sender.Reply("重启程序")
|
2021-08-29 17:33:05 +08:00
|
|
|
|
Daemon()
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-07 11:02:07 +08:00
|
|
|
|
{
|
2021-09-08 10:46:16 +08:00
|
|
|
|
Command: []string{"更新账号", "Whiskey更新", "给老子更新"},
|
2021-09-07 11:02:07 +08:00
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.Reply("更新所有账号")
|
2021-09-07 12:31:33 +08:00
|
|
|
|
logs.Info("更新所有账号")
|
2021-09-08 00:50:34 +08:00
|
|
|
|
updateCookie()
|
2021-09-07 11:02:07 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"任务列表"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(_ *Sender) interface{} {
|
|
|
|
|
|
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
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"查询", "query"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
2021-09-28 15:52:57 +08:00
|
|
|
|
if sender.IsAdmin {
|
2021-09-27 15:52:30 +08:00
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
sender.Reply(ck.Query())
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
2021-09-28 15:52:57 +08:00
|
|
|
|
if getLimit(sender.UserID, 1) {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
sender.Reply(ck.Query())
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("鉴于东哥对接口限流,为了不影响大家的任务正常运行,即日起每日限流%d次,已超过今日限制", Config.Lim))
|
|
|
|
|
|
}
|
2021-09-27 15:52:30 +08:00
|
|
|
|
}
|
2021-09-28 15:52:57 +08:00
|
|
|
|
|
2021-08-29 17:33:05 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-07 10:23:55 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"详细查询", "query"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
2021-09-28 15:52:57 +08:00
|
|
|
|
if sender.IsAdmin {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
sender.Reply(ck.Query1())
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
if getLimit(sender.UserID, 1) {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
sender.Reply(ck.Query1())
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("鉴于东哥对接口限流,为了不影响大家的任务正常运行,即日起每日限流%d次,已超过今日限制", Config.Lim))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-09-07 10:23:55 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"发送", "通知", "notify", "send"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
if len(sender.Contents) < 2 {
|
|
|
|
|
|
sender.Reply("发送指令格式错误")
|
|
|
|
|
|
} else {
|
|
|
|
|
|
rt := strings.Join(sender.Contents[1:], " ")
|
|
|
|
|
|
sender.Contents = sender.Contents[0:1]
|
|
|
|
|
|
if sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Push(rt)
|
|
|
|
|
|
}) == nil {
|
|
|
|
|
|
return "操作成功"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-27 15:52:30 +08:00
|
|
|
|
{
|
2021-09-26 08:45:52 +08:00
|
|
|
|
Command: []string{"设置管理员"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
ctt := sender.JoinContens()
|
|
|
|
|
|
db.Create(&UserAdmin{Content: ctt})
|
|
|
|
|
|
return "已设置管理员"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"取消管理员"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
ctt := sender.JoinContens()
|
|
|
|
|
|
RemoveUserAdmin(ctt)
|
|
|
|
|
|
return "已取消管理员"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-27 15:52:30 +08:00
|
|
|
|
/*
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"我要钱", "给点钱", "我干", "给我钱", "给我", "我要"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
cost := Int(sender.JoinContens())
|
|
|
|
|
|
if cost <= 0 {
|
|
|
|
|
|
cost = 1
|
|
|
|
|
|
}
|
|
|
|
|
|
if !sender.IsAdmin {
|
|
|
|
|
|
if cost > 1 {
|
|
|
|
|
|
return "你只能获得1互助值"
|
|
|
|
|
|
} else {
|
|
|
|
|
|
AddCoin(sender.UserID)
|
|
|
|
|
|
return "太可怜了,给你1互助值"
|
|
|
|
|
|
}
|
2021-09-07 12:51:09 +08:00
|
|
|
|
} else {
|
2021-09-27 15:52:30 +08:00
|
|
|
|
AdddCoin(sender.UserID, cost)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("你获得%d枚互助值。", cost))
|
2021-09-07 12:51:09 +08:00
|
|
|
|
}
|
2021-09-27 15:52:30 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
},
|
2021-09-07 10:23:55 +08:00
|
|
|
|
},
|
2021-09-27 15:52:30 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"梭哈", "拼了", "梭了"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
u := &User{}
|
|
|
|
|
|
cost := GetCoin(sender.UserID)
|
2021-09-07 12:51:09 +08:00
|
|
|
|
|
2021-09-27 15:52:30 +08:00
|
|
|
|
if cost <= 0 || cost > 10000 {
|
|
|
|
|
|
cost = 1
|
|
|
|
|
|
}
|
2021-09-07 12:51:09 +08:00
|
|
|
|
|
2021-09-27 15:52:30 +08:00
|
|
|
|
if err := db.Where("number = ?", sender.UserID).First(u).Error; err != nil || u.Coin < cost {
|
|
|
|
|
|
return "互助值不足,先去打卡吧。"
|
2021-09-07 10:23:55 +08:00
|
|
|
|
} else {
|
2021-09-27 15:52:30 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("你使用%d枚互助值。", cost))
|
2021-09-07 10:23:55 +08:00
|
|
|
|
}
|
2021-09-27 15:52:30 +08:00
|
|
|
|
baga := 0
|
|
|
|
|
|
if u.Coin > 100000 {
|
|
|
|
|
|
baga = u.Coin
|
|
|
|
|
|
cost = u.Coin
|
|
|
|
|
|
}
|
|
|
|
|
|
r := time.Now().Nanosecond() % 10
|
|
|
|
|
|
if r < 7 || baga > 0 {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("很遗憾你失去了%d枚互助值。", cost))
|
|
|
|
|
|
cost = -cost
|
|
|
|
|
|
} else {
|
|
|
|
|
|
if r == 9 {
|
|
|
|
|
|
cost *= 4
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("恭喜你4倍暴击获得%d枚互助值,20秒后自动转入余额。", cost))
|
|
|
|
|
|
time.Sleep(time.Second * 20)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("很幸运你获得%d枚互助值,10秒后自动转入余额。", cost))
|
|
|
|
|
|
time.Sleep(time.Second * 10)
|
|
|
|
|
|
}
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("%d枚互助值已到账。", cost))
|
|
|
|
|
|
}
|
|
|
|
|
|
db.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin + %d", cost)))
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
2021-09-07 10:23:55 +08:00
|
|
|
|
},
|
2021-09-08 01:18:56 +08:00
|
|
|
|
|
2021-09-27 15:52:30 +08:00
|
|
|
|
//{
|
|
|
|
|
|
// Command: []string{"按许愿币更新排名"},
|
|
|
|
|
|
// Admin: true,
|
|
|
|
|
|
// Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
// cookies:= GetJdCookies()
|
|
|
|
|
|
// for i := range cookies {
|
|
|
|
|
|
// cookie := cookies[i]
|
|
|
|
|
|
// if cookie.QQ {
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
// cookie.Update(Priority,cookie.)
|
|
|
|
|
|
// }
|
|
|
|
|
|
// sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
// sender.Reply(ck.Query())
|
|
|
|
|
|
// })
|
|
|
|
|
|
// return "已更新排行"
|
|
|
|
|
|
// },
|
|
|
|
|
|
//},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"赌一把"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
|
|
|
|
|
|
cost := Int(sender.JoinContens())
|
|
|
|
|
|
if cost <= 0 || cost > 10000 {
|
|
|
|
|
|
cost = 1
|
|
|
|
|
|
}
|
|
|
|
|
|
u := &User{}
|
|
|
|
|
|
if err := db.Where("number = ?", sender.UserID).First(u).Error; err != nil || u.Coin < cost {
|
|
|
|
|
|
return "互助值不足,先去打卡吧。"
|
|
|
|
|
|
}
|
|
|
|
|
|
baga := 0
|
|
|
|
|
|
if u.Coin > 100000 {
|
|
|
|
|
|
baga = u.Coin
|
|
|
|
|
|
cost = u.Coin
|
|
|
|
|
|
}
|
|
|
|
|
|
r := time.Now().Nanosecond() % 10
|
|
|
|
|
|
if r < 6 || baga > 0 {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("很遗憾你失去了%d枚互助值。", cost))
|
|
|
|
|
|
cost = -cost
|
2021-08-29 17:33:05 +08:00
|
|
|
|
} else {
|
2021-09-27 15:52:30 +08:00
|
|
|
|
if r == 9 {
|
|
|
|
|
|
cost *= 2
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("恭喜你幸运暴击获得%d枚互助值,20秒后自动转入余额。", cost))
|
|
|
|
|
|
time.Sleep(time.Second * 20)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("很幸运你获得%d枚互助值,10秒后自动转入余额。", cost))
|
|
|
|
|
|
time.Sleep(time.Second * 10)
|
|
|
|
|
|
}
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("%d枚互助值已到账。", cost))
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
2021-09-27 15:52:30 +08:00
|
|
|
|
db.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin + %d", cost)))
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
},
|
2021-09-27 15:52:30 +08:00
|
|
|
|
*/
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"许愿", "愿望", "wish", "hope", "want"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
ct := sender.JoinContens()
|
|
|
|
|
|
if ct == "" {
|
|
|
|
|
|
rt := []string{}
|
|
|
|
|
|
ws := []Wish{}
|
|
|
|
|
|
tb := db
|
|
|
|
|
|
if !sender.IsAdmin {
|
|
|
|
|
|
tb = tb.Where("user_number", sender.UserID)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
tb = tb.Where("status != 1")
|
|
|
|
|
|
}
|
|
|
|
|
|
tb.Order("id asc").Find(&ws)
|
|
|
|
|
|
if len(ws) == 0 {
|
|
|
|
|
|
return "请对我说 许愿 巴拉巴拉"
|
|
|
|
|
|
}
|
|
|
|
|
|
for i, w := range ws {
|
|
|
|
|
|
status := "未达成"
|
|
|
|
|
|
if w.Status == 1 {
|
|
|
|
|
|
status = "已撤销"
|
|
|
|
|
|
} else if w.Status == 2 {
|
|
|
|
|
|
status = "已达成"
|
|
|
|
|
|
}
|
|
|
|
|
|
id := i + 1
|
|
|
|
|
|
if sender.IsAdmin {
|
|
|
|
|
|
id = w.ID
|
|
|
|
|
|
}
|
|
|
|
|
|
rt = append(rt, fmt.Sprintf("%d. %s [%s]", id, w.Content, status))
|
|
|
|
|
|
}
|
|
|
|
|
|
return strings.Join(rt, "\n")
|
|
|
|
|
|
}
|
|
|
|
|
|
cost := 88
|
|
|
|
|
|
if sender.IsAdmin {
|
|
|
|
|
|
cost = 1
|
|
|
|
|
|
}
|
|
|
|
|
|
tx := db.Begin()
|
|
|
|
|
|
u := &User{}
|
|
|
|
|
|
if err := tx.Where("number = ?", sender.UserID).First(u).Error; err != nil {
|
|
|
|
|
|
tx.Rollback()
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return "互助值不足,先去打卡吧。"
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
w := &Wish{
|
|
|
|
|
|
Content: ct,
|
|
|
|
|
|
Coin: cost,
|
|
|
|
|
|
UserNumber: sender.UserID,
|
|
|
|
|
|
}
|
|
|
|
|
|
if u.Coin < cost {
|
|
|
|
|
|
tx.Rollback()
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return fmt.Sprintf("互助值不足,需要%d个互助值。", cost)
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
if err := tx.Create(w).Error; err != nil {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return err.Error()
|
|
|
|
|
|
}
|
|
|
|
|
|
if tx.Model(u).Update("coin", gorm.Expr(fmt.Sprintf("coin - %d", cost))).RowsAffected == 0 {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return "扣款失败"
|
|
|
|
|
|
}
|
|
|
|
|
|
tx.Commit()
|
|
|
|
|
|
(&JdCookie{}).Push(fmt.Sprintf("有人许愿%s,愿望id为%d。", w.Content, w.ID))
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return fmt.Sprintf("收到愿望,已扣除%d个互助值。", cost)
|
2021-08-29 17:33:05 +08:00
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"愿望达成", "达成愿望"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
w := &Wish{}
|
|
|
|
|
|
id := Int(sender.JoinContens())
|
|
|
|
|
|
if id == 0 {
|
|
|
|
|
|
return "目标未指定"
|
|
|
|
|
|
}
|
|
|
|
|
|
if db.First(w, id).Error != nil {
|
|
|
|
|
|
return "目标不存在"
|
|
|
|
|
|
}
|
|
|
|
|
|
if w.Status == 1 {
|
|
|
|
|
|
return "愿望已撤销"
|
|
|
|
|
|
}
|
|
|
|
|
|
if w.Status == 2 {
|
|
|
|
|
|
return "愿望已达成"
|
|
|
|
|
|
}
|
|
|
|
|
|
if db.Model(w).Update("status", 2).RowsAffected == 0 {
|
|
|
|
|
|
return "操作失败"
|
|
|
|
|
|
}
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("达成了愿望 %s", w.Content))
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"run", "执行", "运行"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
name := sender.Contents[0]
|
|
|
|
|
|
pins := ""
|
|
|
|
|
|
if len(sender.Contents) > 1 {
|
|
|
|
|
|
sender.Contents = sender.Contents[1:]
|
|
|
|
|
|
err := sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
pins += "&" + ck.PtPin
|
|
|
|
|
|
})
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
envs := []Env{}
|
|
|
|
|
|
if pins != "" {
|
|
|
|
|
|
envs = append(envs, Env{
|
|
|
|
|
|
Name: "pins",
|
|
|
|
|
|
Value: pins,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
runTask(&Task{Path: name, Envs: envs}, sender)
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"优先级", "priority"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
priority := Int(sender.Contents[0])
|
|
|
|
|
|
if len(sender.Contents) > 1 {
|
|
|
|
|
|
sender.Contents = sender.Contents[1:]
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Priority, priority)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已设置账号%s(%s)的优先级为%d。", ck.PtPin, ck.Nickname, priority))
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-07 23:11:26 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"绑定"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
qq := Int(sender.Contents[0])
|
|
|
|
|
|
if len(sender.Contents) > 1 {
|
|
|
|
|
|
sender.Contents = sender.Contents[1:]
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(QQ, qq)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已设置账号%s的QQ为%v。", ck.Nickname, ck.QQ))
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"cmd", "command", "命令"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
ct := sender.JoinContens()
|
|
|
|
|
|
if regexp.MustCompile(`rm\s+-rf`).FindString(ct) != "" {
|
|
|
|
|
|
return "over"
|
|
|
|
|
|
}
|
|
|
|
|
|
cmd(ct, sender)
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"环境变量", "environments", "envs"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(_ *Sender) interface{} {
|
|
|
|
|
|
rt := []string{}
|
|
|
|
|
|
envs := GetEnvs()
|
|
|
|
|
|
if len(envs) == 0 {
|
|
|
|
|
|
return "未设置任何环境变量"
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, env := range envs {
|
|
|
|
|
|
rt = append(rt, fmt.Sprintf(`%s="%s"`, env.Name, env.Value))
|
|
|
|
|
|
}
|
|
|
|
|
|
return strings.Join(rt, "\n")
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"get-env", "env", "e"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
ct := sender.JoinContens()
|
|
|
|
|
|
if ct == "" {
|
|
|
|
|
|
return "未指定变量名"
|
|
|
|
|
|
}
|
|
|
|
|
|
value := GetEnv(ct)
|
|
|
|
|
|
if value == "" {
|
|
|
|
|
|
return "未设置环境变量"
|
|
|
|
|
|
}
|
|
|
|
|
|
return fmt.Sprintf("环境变量的值为:" + value)
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"set-env", "se", "export"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
env := &Env{}
|
|
|
|
|
|
if len(sender.Contents) >= 2 {
|
|
|
|
|
|
env.Name = sender.Contents[0]
|
|
|
|
|
|
env.Value = strings.Join(sender.Contents[1:], " ")
|
|
|
|
|
|
} else if len(sender.Contents) == 1 {
|
|
|
|
|
|
ss := regexp.MustCompile(`^([^'"=]+)=['"]?([^=]+?)['"]?$`).FindStringSubmatch(sender.Contents[0])
|
|
|
|
|
|
if len(ss) != 3 {
|
|
|
|
|
|
return "无法解析"
|
|
|
|
|
|
}
|
|
|
|
|
|
env.Name = ss[1]
|
|
|
|
|
|
env.Value = ss[2]
|
|
|
|
|
|
} else {
|
|
|
|
|
|
return "???"
|
|
|
|
|
|
}
|
|
|
|
|
|
ExportEnv(env)
|
|
|
|
|
|
return "操作成功"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"unset-env", "ue", "unexport", "de"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
UnExportEnv(&Env{
|
|
|
|
|
|
Name: sender.JoinContens(),
|
|
|
|
|
|
})
|
|
|
|
|
|
return "操作成功"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"降级"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
return "滚"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"。。。"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
return "你很无语吗?"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"祈祷", "祈愿", "祈福"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
if _, ok := mx[sender.UserID]; ok {
|
|
|
|
|
|
return "你祈祷过啦,等下次我忘记了再来吧。"
|
|
|
|
|
|
}
|
|
|
|
|
|
mx[sender.UserID] = true
|
|
|
|
|
|
if db.Model(User{}).Where("number = ? ", sender.UserID).Update(
|
|
|
|
|
|
"coin", gorm.Expr(fmt.Sprintf("coin + %d", 1)),
|
|
|
|
|
|
).RowsAffected == 0 {
|
|
|
|
|
|
return "先去打卡吧你。"
|
|
|
|
|
|
}
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return "互助值+1"
|
2021-08-29 17:33:05 +08:00
|
|
|
|
},
|
2021-09-08 10:46:16 +08:00
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"reply", "回复"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
if len(sender.Contents) >= 2 {
|
|
|
|
|
|
replies[sender.Contents[0]] = strings.Join(sender.Contents[1:], " ")
|
|
|
|
|
|
} else {
|
|
|
|
|
|
return "操作失败"
|
|
|
|
|
|
}
|
|
|
|
|
|
return "操作成功"
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"help", "助力"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Help, True)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已设置助力账号%s(%s)", ck.PtPin, ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"tool", "工具人", "unhelp", "取消助力"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Help, False)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已设置取消助力账号%s(%s)", ck.PtPin, ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"屏蔽", "hack"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
2021-09-07 10:23:55 +08:00
|
|
|
|
ck.Update(Priority, -1)
|
2021-09-08 17:31:03 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("已屏蔽账号%s", ck.Nickname))
|
2021-08-29 17:33:05 +08:00
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-09 12:33:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"更新指定"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
2021-09-12 10:46:21 +08:00
|
|
|
|
if len(ck.WsKey) > 0 {
|
|
|
|
|
|
var pinky = fmt.Sprintf("pin=%s;wskey=%s;", ck.PtPin, ck.WsKey)
|
2021-09-22 12:02:57 +08:00
|
|
|
|
rsp, err := getKey(pinky)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
logs.Error(err)
|
|
|
|
|
|
}
|
2021-09-13 13:29:14 +08:00
|
|
|
|
if len(rsp) > 0 {
|
|
|
|
|
|
ptKey := FetchJdCookieValue("pt_key", rsp)
|
|
|
|
|
|
ptPin := FetchJdCookieValue("pt_pin", rsp)
|
|
|
|
|
|
ck := JdCookie{
|
|
|
|
|
|
PtKey: ptKey,
|
|
|
|
|
|
PtPin: ptPin,
|
2021-09-09 12:33:04 +08:00
|
|
|
|
}
|
2021-09-13 13:29:14 +08:00
|
|
|
|
if nck, err := GetJdCookie(ck.PtPin); err == nil {
|
|
|
|
|
|
nck.InPool(ck.PtKey)
|
|
|
|
|
|
msg := fmt.Sprintf("更新账号,%s", ck.PtPin)
|
|
|
|
|
|
sender.Reply(msg)
|
|
|
|
|
|
logs.Info(msg)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply("转换失败")
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("Wskey失效,%s", ck.Nickname))
|
2021-09-09 12:33:04 +08:00
|
|
|
|
}
|
2021-09-13 13:29:14 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("Wskey为空,%s", ck.Nickname))
|
2021-09-09 12:33:04 +08:00
|
|
|
|
}
|
2021-09-12 10:46:21 +08:00
|
|
|
|
|
2021-09-09 12:33:04 +08:00
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-08 14:36:39 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"删除", "clean"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Removes(ck)
|
2021-10-02 22:37:21 +08:00
|
|
|
|
ck.OutPool()
|
2021-09-08 14:36:39 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("已删除账号%s", ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"清理过期账号"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("删除所有false账号,请慎用"))
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
2021-09-21 17:31:12 +08:00
|
|
|
|
cleanCookie()
|
2021-09-08 14:36:39 +08:00
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-15 22:25:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"Available", "可用"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Available, True)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已设置可用账号%s(%s)", ck.PtPin, ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"不可用", "unAvailable", "取消可用"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(Available, False)
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已设置取消可用账号%s(%s)", ck.PtPin, ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"取消屏蔽", "unhack"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
2021-09-07 10:23:55 +08:00
|
|
|
|
ck.Update(Priority, 2)
|
2021-09-08 17:31:03 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("已取消屏蔽账号%s", ck.Nickname))
|
2021-08-29 17:33:05 +08:00
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-09-21 18:22:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"删除WCK"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
ck.Update(WsKey, "")
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("已删除WCK,%s", ck.Nickname))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"转账"},
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
cost := 1
|
|
|
|
|
|
if sender.ReplySenderUserID == 0 {
|
|
|
|
|
|
return "没有转账目标。"
|
|
|
|
|
|
}
|
|
|
|
|
|
amount := Int(sender.JoinContens())
|
|
|
|
|
|
if !sender.IsAdmin {
|
|
|
|
|
|
if amount <= 0 {
|
|
|
|
|
|
return "转账金额必须大于等于1。"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if sender.UserID == sender.ReplySenderUserID {
|
|
|
|
|
|
db.Model(User{}).Where("number = ?", sender.UserID).Updates(map[string]interface{}{
|
|
|
|
|
|
"coin": gorm.Expr(fmt.Sprintf("coin - %d", cost)),
|
|
|
|
|
|
})
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return fmt.Sprintf("转账成功,扣除手续费%d枚互助值。", cost)
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
if amount > 10000 {
|
|
|
|
|
|
return "单笔转账限额10000。"
|
|
|
|
|
|
}
|
|
|
|
|
|
tx := db.Begin()
|
|
|
|
|
|
s := &User{}
|
|
|
|
|
|
if err := db.Where("number = ?", sender.UserID).First(&s).Error; err != nil {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return "你还没有开通钱包功能。"
|
|
|
|
|
|
}
|
|
|
|
|
|
if s.Coin < amount {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return "余额不足。"
|
|
|
|
|
|
}
|
|
|
|
|
|
real := amount
|
|
|
|
|
|
if !sender.IsAdmin {
|
|
|
|
|
|
if amount <= cost {
|
|
|
|
|
|
tx.Rollback()
|
2021-09-13 15:44:36 +08:00
|
|
|
|
return fmt.Sprintf("转账失败,手续费需要%d个互助值。", cost)
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
real = amount - cost
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cost = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
r := &User{}
|
|
|
|
|
|
if err := db.Where("number = ?", sender.ReplySenderUserID).First(&r).Error; err != nil {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return "他还没有开通钱包功能"
|
|
|
|
|
|
}
|
|
|
|
|
|
if tx.Model(User{}).Where("number = ?", sender.UserID).Updates(map[string]interface{}{
|
|
|
|
|
|
"coin": gorm.Expr(fmt.Sprintf("coin - %d", amount)),
|
|
|
|
|
|
}).RowsAffected == 0 {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return "转账失败"
|
|
|
|
|
|
}
|
|
|
|
|
|
if tx.Model(User{}).Where("number = ?", sender.ReplySenderUserID).Updates(map[string]interface{}{
|
|
|
|
|
|
"coin": gorm.Expr(fmt.Sprintf("coin + %d", real)),
|
|
|
|
|
|
}).RowsAffected == 0 {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
return "转账失败"
|
|
|
|
|
|
}
|
|
|
|
|
|
tx.Commit()
|
|
|
|
|
|
return fmt.Sprintf("转账成功,你的余额%d,他的余额%d,手续费%d。", s.Coin-amount, r.Coin+real, cost)
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"献祭", "导出"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-10-03 07:42:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
Command: []string{"导出wsk"},
|
|
|
|
|
|
Admin: true,
|
|
|
|
|
|
Handle: func(sender *Sender) interface{} {
|
|
|
|
|
|
sender.handleJdCookies(func(ck *JdCookie) {
|
|
|
|
|
|
sender.Reply(fmt.Sprintf("pin=%s;wskey=%s;", ck.PtPin, ck.WsKey))
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2021-08-29 17:33:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var mx = map[int]bool{}
|
|
|
|
|
|
|
|
|
|
|
|
func LimitJdCookie(cks []JdCookie, a string) []JdCookie {
|
|
|
|
|
|
ncks := []JdCookie{}
|
|
|
|
|
|
if s := strings.Split(a, "-"); len(s) == 2 {
|
|
|
|
|
|
for i := range cks {
|
|
|
|
|
|
if i+1 >= Int(s[0]) && i+1 <= Int(s[1]) {
|
|
|
|
|
|
ncks = append(ncks, cks[i])
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if x := regexp.MustCompile(`^[\s\d,]+$`).FindString(a); x != "" {
|
|
|
|
|
|
xx := regexp.MustCompile(`(\d+)`).FindAllStringSubmatch(a, -1)
|
|
|
|
|
|
for i := range cks {
|
|
|
|
|
|
for _, x := range xx {
|
|
|
|
|
|
if fmt.Sprint(i+1) == x[1] {
|
|
|
|
|
|
ncks = append(ncks, cks[i])
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if a != "" {
|
|
|
|
|
|
a = strings.Replace(a, " ", "", -1)
|
|
|
|
|
|
for i := range cks {
|
|
|
|
|
|
if strings.Contains(cks[i].Note, a) || strings.Contains(cks[i].Nickname, a) || strings.Contains(cks[i].PtPin, a) {
|
|
|
|
|
|
ncks = append(ncks, cks[i])
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return ncks
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func ReturnCoin(sender *Sender) {
|
|
|
|
|
|
tx := db.Begin()
|
|
|
|
|
|
ws := []Wish{}
|
|
|
|
|
|
if err := tx.Where("status = 0 and user_number = ?", sender.UserID).Find(&ws).Error; err != nil {
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
sender.Reply(err.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, w := range ws {
|
|
|
|
|
|
if tx.Model(User{}).Where("number = ? ", sender.UserID).Update(
|
|
|
|
|
|
"coin", gorm.Expr(fmt.Sprintf("coin + %d", w.Coin)),
|
|
|
|
|
|
).RowsAffected == 0 {
|
|
|
|
|
|
tx.Rollback()
|
2021-09-13 15:44:36 +08:00
|
|
|
|
sender.Reply("愿望未达成退还互助值失败。")
|
2021-08-29 17:33:05 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
2021-09-13 15:44:36 +08:00
|
|
|
|
sender.Reply(fmt.Sprintf("愿望未达成退还%d枚互助值。", w.Coin))
|
2021-08-29 17:33:05 +08:00
|
|
|
|
if tx.Model(&w).Update(
|
|
|
|
|
|
"status", 1,
|
|
|
|
|
|
).RowsAffected == 0 {
|
|
|
|
|
|
tx.Rollback()
|
2021-09-13 15:44:36 +08:00
|
|
|
|
sender.Reply("愿望未达成退还互助值失败。")
|
2021-08-29 17:33:05 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
tx.Commit()
|
2021-09-15 22:25:20 +08:00
|
|
|
|
}
|