xdd-plus/models/bot.go
ZJY 263cba27ab fix 重大BUG修复,解决以下几个问题,
1.新增账号部分参数空白
2.不管是CK新增还是WSKEY新增账号导致清空CK,由1导致的
3.新增添加后自动回复查询参数。
4.修复账号无限判错问题。
2021-09-16 01:32:32 +08:00

323 lines
7.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import (
"fmt"
"io/ioutil"
"os"
"regexp"
"strconv"
"strings"
"time"
"github.com/beego/beego/v2/client/httplib"
"github.com/beego/beego/v2/core/logs"
)
var SendQQ = func(a int64, b interface{}) {
}
var SendQQGroup = func(a int64, b int64, c interface{}) {
}
var ListenQQPrivateMessage = func(uid int64, msg string) {
SendQQ(uid, handleMessage(msg, "qq", int(uid)))
}
var ListenQQGroupMessage = func(gid int64, uid int64, msg string) {
if gid == Config.QQGroupID {
if Config.QbotPublicMode {
SendQQGroup(gid, uid, handleMessage(msg, "qqg", int(uid), int(gid)))
} else {
SendQQ(uid, handleMessage(msg, "qq", int(uid)))
}
}
}
var replies = map[string]string{}
func InitReplies() {
f, err := os.Open(ExecPath + "/conf/reply.php")
if err == nil {
defer f.Close()
data, _ := ioutil.ReadAll(f)
ss := regexp.MustCompile("`([^`]+)`\\s*=>\\s*`([^`]+)`").FindAllStringSubmatch(string(data), -1)
for _, s := range ss {
replies[s[1]] = s[2]
}
}
if _, ok := replies["壁纸"]; !ok {
replies["壁纸"] = "https://acg.toubiec.cn/random.php"
}
}
var handleMessage = func(msgs ...interface{}) interface{} {
msg := msgs[0].(string)
args := strings.Split(msg, " ")
head := args[0]
contents := args[1:]
sender := &Sender{
UserID: msgs[2].(int),
Type: msgs[1].(string),
Contents: contents,
}
if len(msgs) >= 4 {
sender.ChatID = msgs[3].(int)
}
if sender.Type == "tgg" {
sender.MessageID = msgs[4].(int)
sender.Username = msgs[5].(string)
sender.ReplySenderUserID = msgs[6].(int)
}
if sender.UserID == Config.TelegramUserID || sender.UserID == int(Config.QQID) {
sender.IsAdmin = true
}
if sender.IsAdmin == false {
if IsUserAdmin(strconv.Itoa(sender.UserID)) {
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 {
default:
{ //沃邮箱
ss := regexp.MustCompile(`https://nyan.mail.*3D`).FindStringSubmatch(msg)
if len(ss) > 0 {
var u User
if db.Where("number = ?", sender.UserID).First(&u).Error != nil {
return 0
}
db.Model(u).Updates(map[string]interface{}{
"womail": ss[0],
})
sender.Reply(fmt.Sprintf("沃邮箱提交成功!"))
return nil
}
}
{
ss := regexp.MustCompile(`pin=([^;=\s]+);wskey=([^;=\s]+)`).FindAllStringSubmatch(msg, -1)
if len(ss) > 0 {
for _, s := range ss {
rsp := cmd(fmt.Sprintf(`python3 test.py "%s"`, s), &Sender{})
if strings.Contains(rsp, "错误") {
logs.Error("wskey错误")
sender.Reply(fmt.Sprintf("wskey错误"))
} else {
ptKey := FetchJdCookieValue("pt_key", rsp)
ptPin := FetchJdCookieValue("pt_pin", rsp)
ck := JdCookie{
PtPin: ptPin,
PtKey: ptKey,
WsKey: s[2],
}
if CookieOK(&ck) {
if sender.IsQQ() {
ck.QQ = sender.UserID
} else if sender.IsTG() {
ck.Telegram = sender.UserID
}
if nck, err := GetJdCookie(ck.PtPin); err == nil {
nck.InPool(ck.PtKey)
msg := fmt.Sprintf("更新账号,%s", ck.PtPin)
if sender.IsQQ() {
ck.Update(QQ, ck.QQ)
}
sender.Reply(fmt.Sprintf(msg))
(&JdCookie{}).Push(msg)
} else {
NewJdCookie(&ck)
msg := fmt.Sprintf("添加账号,账号名:%s", ck.PtPin)
if sender.IsQQ() {
ck.Update(QQ, ck.QQ)
}
sender.Reply(fmt.Sprintf(msg))
sender.Reply(ck.Query())
(&JdCookie{}).Push(msg)
}
}
go func() {
Save <- &JdCookie{}
}()
return nil
}
}
}
}
{ //tyt
ss := regexp.MustCompile(`packetId=(\S+)(&|&amp;)currentActId`).FindStringSubmatch(msg)
if len(ss) > 0 {
if !sender.IsAdmin {
coin := GetCoin(sender.UserID)
if coin < 8 {
return "推一推需要8个互助值。"
}
RemCoin(sender.UserID, 8)
sender.Reply("推一推即将开始已扣除8个互助值。")
}
runTask(&Task{Path: "jd_tyt.js", Envs: []Env{
{Name: "tytpacketId", Value: ss[1]},
}}, sender)
return nil
}
}
{
if strings.Contains(msg, "pt_key") {
ptKey := FetchJdCookieValue("pt_key", msg)
ptPin := FetchJdCookieValue("pt_pin", msg)
if len(ptPin) > 0 || len(ptKey) > 0 {
ck := JdCookie{
PtKey: ptKey,
PtPin: ptPin,
}
if CookieOK(&ck) {
if sender.IsQQ() {
ck.QQ = sender.UserID
} else if sender.IsTG() {
ck.Telegram = sender.UserID
}
if HasKey(ck.PtKey) {
sender.Reply(fmt.Sprintf("重复提交"))
} else {
if nck, err := GetJdCookie(ck.PtPin); err == nil {
nck.InPool(ck.PtKey)
msg := fmt.Sprintf("更新账号,%s", ck.PtPin)
if sender.IsQQ() {
ck.Update(QQ, ck.QQ)
}
sender.Reply(fmt.Sprintf(msg))
(&JdCookie{}).Push(msg)
logs.Info(msg)
} else {
if Cdle {
ck.Hack = True
}
NewJdCookie(&ck)
msg := fmt.Sprintf("添加账号,账号名:%s", ck.PtPin)
if sender.IsQQ() {
ck.Update(QQ, ck.QQ)
}
sender.Reply(fmt.Sprintf(msg))
sender.Reply(ck.Query())
(&JdCookie{}).Push(msg)
logs.Info(msg)
}
}
} else {
sender.Reply(fmt.Sprintf("无效"))
}
}
go func() {
Save <- &JdCookie{}
}()
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{
PtKey: s[1],
PtPin: s[2],
}
if CookieOK(&ck) {
xyb++
if sender.IsQQ() {
ck.QQ = sender.UserID
} else if sender.IsTG() {
ck.Telegram = sender.UserID
}
if HasKey(ck.PtKey) {
sender.Reply(fmt.Sprintf("重复提交"))
} else {
if nck, err := GetJdCookie(ck.PtPin); err == nil {
nck.InPool(ck.PtKey)
msg := fmt.Sprintf("更新账号,%s", ck.PtPin)
if sender.IsQQ() {
ck.Update(QQ, ck.QQ)
}
sender.Reply(fmt.Sprintf(msg))
(&JdCookie{}).Push(msg)
logs.Info(msg)
} else {
if Cdle {
ck.Hack = True
}
NewJdCookie(&ck)
msg := fmt.Sprintf("添加账号,账号名:%s", ck.PtPin)
if sender.IsQQ() {
ck.Update(QQ, ck.QQ)
}
sender.Reply(fmt.Sprintf(msg))
sender.Reply(ck.Query())
logs.Info(msg)
}
}
} else {
sender.Reply(fmt.Sprintf("无效,互助值-1余额%d", RemCoin(sender.UserID, 1)))
}
}
go func() {
Save <- &JdCookie{}
}()
return nil
}
}
{
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()
if err != nil {
return nil
}
ctp := rsp.Header.Get("content-type")
if ctp == "" {
rsp.Header.Get("Content-Type")
}
if strings.Contains(ctp, "text") || strings.Contains(ctp, "json") {
data, _ := ioutil.ReadAll(rsp.Body)
return string(data)
}
return rsp
}
return v
}
}
}
return nil
}
func FetchJdCookieValue(key string, cookies string) string {
match := regexp.MustCompile(key + `=([^;]*);{0,1}`).FindStringSubmatch(cookies)
if len(match) == 2 {
return match[1]
} else {
return ""
}
}