351 lines
8.6 KiB
Go
351 lines
8.6 KiB
Go
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 AggreQQ = func(a int64, b bool, 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 {
|
||
wkey := "pin=" + s[1] + ";wskey=" + s[2] + ";"
|
||
rsp := cmd(fmt.Sprintf(`python3 test.py "%s"`, wkey), &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)
|
||
nck.Update(PtKey, ck.PtKey)
|
||
|
||
if nck.WsKey == "" || len(nck.WsKey) == 0 {
|
||
if sender.IsQQ() {
|
||
ck.Update(QQ, ck.QQ)
|
||
}
|
||
nck.Update(WsKey, ck.WsKey)
|
||
msg := fmt.Sprintf("写入WsKey,并更新账号%s", ck.PtPin)
|
||
sender.Reply(fmt.Sprintf(msg))
|
||
(&JdCookie{}).Push(msg)
|
||
logs.Info(msg)
|
||
} else {
|
||
if nck.WsKey == ck.WsKey {
|
||
msg := fmt.Sprintf("重复写入")
|
||
sender.Reply(fmt.Sprintf(msg))
|
||
(&JdCookie{}).Push(msg)
|
||
logs.Info(msg)
|
||
} else {
|
||
nck.Updates(JdCookie{
|
||
WsKey: ck.WsKey,
|
||
})
|
||
msg := fmt.Sprintf("更新WsKey,并更新账号%s", ck.PtPin)
|
||
sender.Reply(fmt.Sprintf(msg))
|
||
(&JdCookie{}).Push(msg)
|
||
logs.Info(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+)(&|&)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 ""
|
||
}
|
||
}
|