xdd-plus/models/bot.go
2021-09-16 01:16:04 +08:00

319 lines
7.8 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))
(&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))
(&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))
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 ""
}
}