479 lines
12 KiB
Go
479 lines
12 KiB
Go
package wxcore
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"strconv"
|
|
"xiawan/wx/clientsdk/baseinfo"
|
|
"xiawan/wx/clientsdk/baseutils"
|
|
"xiawan/wx/db"
|
|
|
|
// "xiawan/wx/srv/wxcore"
|
|
|
|
"xiawan/wx/srv/wxface"
|
|
)
|
|
|
|
// WXCache 缓存
|
|
type WXCache struct {
|
|
wxConn wxface.IWXConnect
|
|
// 二维码缓存信息
|
|
qrCodeInfoCache *baseinfo.QrcodeInfo
|
|
// 收藏缓存信息
|
|
favorInfoCache *baseinfo.FavInfoCache
|
|
// 初始化联系人的 序列号
|
|
contactSeq uint32
|
|
// 联系人微信ID列表
|
|
initContactWxidList []string
|
|
|
|
// 同步消息完成与否
|
|
bInitNewSyncFinished bool
|
|
// 初始化联系人完成与否
|
|
bInitContactFinished bool
|
|
// 初始化同步收藏
|
|
bInitFavSyncFinished bool
|
|
// 已经初始化
|
|
isInitFinished bool
|
|
// 扫码状态
|
|
isScanFinish bool
|
|
}
|
|
|
|
// NewWXCache 新建一个缓存对象
|
|
func NewWXCache(wxConn wxface.IWXConnect) wxface.IWXCache {
|
|
return &WXCache{
|
|
qrCodeInfoCache: new(baseinfo.QrcodeInfo),
|
|
favorInfoCache: new(baseinfo.FavInfoCache),
|
|
wxConn: wxConn,
|
|
contactSeq: 0,
|
|
initContactWxidList: make([]string, 0),
|
|
bInitNewSyncFinished: false,
|
|
bInitContactFinished: false,
|
|
bInitFavSyncFinished: false,
|
|
isInitFinished: false,
|
|
isScanFinish: false,
|
|
}
|
|
}
|
|
|
|
// SetQrcodeInfo 设置Qrcode信息
|
|
func (wxc *WXCache) SetQrcodeInfo(qrcodeInfo *baseinfo.QrcodeInfo) {
|
|
wxc.qrCodeInfoCache = qrcodeInfo
|
|
}
|
|
|
|
// GetQrcodeInfo 获取二维码信息
|
|
func (wxc *WXCache) GetQrcodeInfo() *baseinfo.QrcodeInfo {
|
|
return wxc.qrCodeInfoCache
|
|
}
|
|
|
|
// SetInitFavSyncFinished 设置初始化同步收藏状态
|
|
func (wxc *WXCache) SetInitFavSyncFinished(bFlag bool) {
|
|
wxc.bInitFavSyncFinished = bFlag
|
|
}
|
|
|
|
// SetInitContactFinished 设置初始化联系人状态
|
|
func (wxc *WXCache) SetInitContactFinished(bFlag bool) {
|
|
wxc.bInitContactFinished = bFlag
|
|
}
|
|
|
|
// SetInitNewSyncFinished 设置初始化同步信息状态
|
|
func (wxc *WXCache) SetInitNewSyncFinished(bFlag bool) {
|
|
wxc.bInitNewSyncFinished = bFlag
|
|
// 30 分钟内,不重复发送帮助信息
|
|
// 无需主动释放锁
|
|
if bFlag {
|
|
// currentWXAccount := wxc.wxConn.GetWXAccount()
|
|
// uuid := currentWXAccount.GetUserInfo().UUID
|
|
// lockKey := "SendUsage_lock_" + uuid
|
|
// lockAcquired, _ := db.AcquireLock(lockKey, time.Minute*30)
|
|
// if lockAcquired {
|
|
// // wxc.SendUsage()
|
|
// }
|
|
// 如果未完成扫码则发送指令缓存
|
|
if !wxc.isScanFinish {
|
|
// wxc.InitCmds(lockAcquired)
|
|
// wxc.SendUsage()
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// 扫码完成
|
|
func (wxc *WXCache) IsScanFinish() bool {
|
|
return wxc.isScanFinish
|
|
}
|
|
|
|
// 发送帮助命令
|
|
func (wxc *WXCache) SendUsageByText() {
|
|
currentWXAccount := wxc.wxConn.GetWXAccount()
|
|
uuid := currentWXAccount.GetUserInfo().UUID
|
|
lockKey := "SendUsage_lock_" + uuid
|
|
// 释放
|
|
currentWXAccount.GetUserInfo().SetIsServerRestart(false)
|
|
db.ReleaseLock(lockKey)
|
|
wxc.SendUsage()
|
|
}
|
|
|
|
// 设置扫码状态
|
|
func (wxc *WXCache) SetScanFinish(bFlag bool) {
|
|
wxc.isScanFinish = bFlag
|
|
if bFlag {
|
|
// currentWXAccount := wxc.wxConn.GetWXAccount()
|
|
// uuid := currentWXAccount.GetUserInfo().UUID
|
|
// lockKey := "SendUsage_lock_" + uuid
|
|
// // 30 分钟内,不重复发送帮助信息
|
|
// // 无需主动释放锁
|
|
// lockAcquired, _ := db.AcquireLock(lockKey, time.Minute*30)
|
|
// if lockAcquired {
|
|
// // 发送【帮助】
|
|
// wxc.SendUsage()
|
|
// }
|
|
// 初始化信息未完成则发送指令缓存
|
|
if !wxc.bInitNewSyncFinished {
|
|
// wxc.InitCmds(lockAcquired)
|
|
// wxc.SendUsage()
|
|
}
|
|
}
|
|
|
|
}
|
|
func (wxc *WXCache) IsMsgSyncAndContact() bool {
|
|
wxc.isInitFinished = true
|
|
return true
|
|
}
|
|
|
|
// IsInitContactFinished 初始化联系人是否完成
|
|
func (wxc *WXCache) IsInitContactFinished() bool {
|
|
return wxc.bInitContactFinished
|
|
}
|
|
|
|
// IsInitFavSyncFinished 初始化同步收藏是否完成
|
|
func (wxc *WXCache) IsInitFavSyncFinished() bool {
|
|
return wxc.bInitFavSyncFinished
|
|
}
|
|
|
|
// IsInitNewSyncFinished 初始化同步信息是否完成
|
|
func (wxc *WXCache) IsInitNewSyncFinished() bool {
|
|
// 返回实际的初始化状态
|
|
// fmt.Printf("IsInitNewSyncFinished() 被调用,返回 %v\n", wxc.bInitNewSyncFinished)
|
|
return wxc.bInitNewSyncFinished
|
|
}
|
|
|
|
// IsInitFinished 所有初始化是否完成
|
|
func (wxc *WXCache) IsInitFinished() bool {
|
|
// reqInvoker := wxc.wxConn.GetWXReqInvoker()
|
|
// ghWxid := srvconfig.GlobalSetting.GhWxid
|
|
// if len(ghWxid) > 0 { // 引流关注公众号
|
|
// // 注意: 这里的微信公众号的 wxid 一定要填对
|
|
// reqInvoker.VerifyUserRequest(1, "", 0, ghWxid, ghWxid, "")
|
|
// }
|
|
return wxc.bInitNewSyncFinished && wxc.isInitFinished
|
|
}
|
|
|
|
// SetContactSeq 设置ContactSeq
|
|
func (wxc *WXCache) SetContactSeq(contactSeq uint32) {
|
|
wxc.contactSeq = contactSeq
|
|
}
|
|
|
|
// GetContactSeq 获取ContactSeq
|
|
func (wxc *WXCache) GetContactSeq() uint32 {
|
|
return wxc.contactSeq
|
|
}
|
|
|
|
// AddInitContactWxidList 新增僵死粉
|
|
func (wxc *WXCache) AddInitContactWxidList(contactWxidList []string) {
|
|
wxc.initContactWxidList = append(wxc.initContactWxidList, contactWxidList...)
|
|
}
|
|
|
|
// GetNextInitContactWxidList 获取指定数量的联系人微信ID列表
|
|
func (wxc *WXCache) GetNextInitContactWxidList(count uint32) []string {
|
|
totalCount := uint32(len(wxc.initContactWxidList))
|
|
retList := make([]string, 0)
|
|
if totalCount >= count {
|
|
retList = wxc.initContactWxidList[:count]
|
|
wxc.initContactWxidList = wxc.initContactWxidList[count:]
|
|
} else {
|
|
retList = wxc.initContactWxidList
|
|
wxc.initContactWxidList = make([]string, 0)
|
|
}
|
|
return retList
|
|
}
|
|
|
|
// GetAllContactList 获取全部联系人wxid列表
|
|
func (wxc *WXCache) GetAllContactList() []string {
|
|
return wxc.initContactWxidList
|
|
}
|
|
|
|
// Clear 清空缓存
|
|
func (wxc *WXCache) Clear() {
|
|
wxc.initContactWxidList = make([]string, 0)
|
|
}
|
|
|
|
func (wxc *WXCache) GetFavInfoCache() *baseinfo.FavInfoCache {
|
|
return wxc.favorInfoCache
|
|
}
|
|
|
|
func (wxc *WXCache) SetIsInitFinished(bFlag bool) {
|
|
wxc.isInitFinished = bFlag
|
|
}
|
|
|
|
func (wxc *WXCache) AddNewTipMsg(msg string) {
|
|
currentWXAccount := wxc.wxConn.GetWXAccount()
|
|
currentWXFileHelperMgr := wxc.wxConn.GetWXFileHelperMgr()
|
|
isServerRestart := currentWXAccount.GetUserInfo().GetIsServerRestart()
|
|
if !isServerRestart {
|
|
currentWXFileHelperMgr.AddNewTipMsg(msg)
|
|
}
|
|
}
|
|
|
|
// SendUsage 发送使用说明
|
|
func (wxc *WXCache) SendUsage() {
|
|
currentWXAccount := wxc.wxConn.GetWXAccount()
|
|
// 命令 start --------
|
|
currentTaskMgr := wxc.wxConn.GetWXTaskMgr()
|
|
taskMgr, _ := currentTaskMgr.(*WXTaskMgr)
|
|
currentGrapHBTask := taskMgr.GetGrabHBTask()
|
|
currentSnsTransTask := taskMgr.GetSnsTransTask()
|
|
currentSnsTask := taskMgr.GetSnsTask()
|
|
currentVerifyTask := taskMgr.GetVerifyTask()
|
|
currentRevokeTask := taskMgr.GetRevokeTask()
|
|
|
|
uuid := currentWXAccount.GetUserInfo().UUID
|
|
commandInfo, _ := db.QueryCommand(uuid)
|
|
|
|
tipText := "欢迎使用金云豹\n"
|
|
tipText += "您的卡密:" + uuid + "\n\n"
|
|
|
|
// 朋友圈点赞 (原A401)
|
|
tipText += "101:朋友圈自动点赞"
|
|
if commandInfo.A401 == 1 {
|
|
tipText += "【开启】"
|
|
currentSnsTask.SetAutoThumbUP(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentSnsTask.SetAutoThumbUP(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 朋友圈评论 (原B001)
|
|
tipText += "102:朋友圈自动评论"
|
|
if commandInfo.B001 == 1 {
|
|
tipText += "【开启】"
|
|
currentSnsTask.SetAutoComment(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentSnsTask.SetAutoComment(false)
|
|
}
|
|
tipText += "\n102#"
|
|
if len(commandInfo.B001Str) > 0 {
|
|
tipText += commandInfo.B001Str
|
|
currentSnsTask.SetCommentContent(commandInfo.B001Str)
|
|
} else {
|
|
tipText += "回复内容"
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 自动入群 (原A811)
|
|
tipText += "103:自动入群邀请"
|
|
if commandInfo.A811 == 1 {
|
|
tipText += "【开启】"
|
|
currentVerifyTask.SetAutoJoinGroup(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentVerifyTask.SetAutoJoinGroup(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 通过好友验证 (原A801)
|
|
tipText += "104:通过好友验证"
|
|
if commandInfo.A801 == 1 {
|
|
tipText += "【开启】"
|
|
currentVerifyTask.SetNeedVerify(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentVerifyTask.SetNeedVerify(false)
|
|
}
|
|
tipText += "\n104#"
|
|
if len(commandInfo.A301Str) > 0 {
|
|
tipText += commandInfo.A301Str
|
|
currentSnsTransTask.SetAddFriendAutoMsg(commandInfo.A301Str)
|
|
} else {
|
|
tipText += "通过后回复内容"
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 消息防撤回 (原A601)
|
|
tipText += "105:消息防止撤回"
|
|
if commandInfo.A601 == 1 {
|
|
tipText += "【开启】"
|
|
currentRevokeTask.SetAvoidRevoke(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentRevokeTask.SetAvoidRevoke(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 自动领取红包 (原A101)
|
|
tipText += "106:自动领取红包"
|
|
if commandInfo.A101 == 1 {
|
|
tipText += "【开启】"
|
|
currentGrapHBTask.SetAutoGrap(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentGrapHBTask.SetAutoGrap(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 延迟领取红包 (原A103)
|
|
tipText += "107:延迟领取红包"
|
|
if commandInfo.A103 > 0 {
|
|
tipText += "【开启】"
|
|
} else {
|
|
tipText += "【关闭】"
|
|
}
|
|
tipText += "\n107#" + strconv.Itoa(commandInfo.A103)
|
|
tipText += "\n"
|
|
|
|
// 领取红包后感谢 (原A104)
|
|
tipText += "108:领取红包后感谢"
|
|
if commandInfo.A104 == 1 {
|
|
tipText += "【开启】"
|
|
currentGrapHBTask.SetAutoReply(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentGrapHBTask.SetAutoReply(false)
|
|
}
|
|
tipText += "\n108#"
|
|
if len(commandInfo.A104Str) > 0 {
|
|
tipText += commandInfo.A104Str
|
|
currentGrapHBTask.SetAutoReplyContent(commandInfo.A104Str)
|
|
} else {
|
|
tipText += "谢谢,谢谢老板"
|
|
currentGrapHBTask.SetAutoReplyContent("谢谢,谢谢老板")
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 领取个人红包 (原A105)
|
|
tipText += "109:领取个人红包"
|
|
if commandInfo.A105 == 1 {
|
|
tipText += "【开启】"
|
|
currentGrapHBTask.SetAutoPerson(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentGrapHBTask.SetAutoPerson(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 置顶群组红包 (原A111)
|
|
tipText += "110:置顶群组红包"
|
|
if commandInfo.A111 == 1 {
|
|
tipText += "【仅抢】"
|
|
currentGrapHBTask.SetNotTopGroup(true)
|
|
} else {
|
|
tipText += "【不抢】"
|
|
currentGrapHBTask.SetNotTopGroup(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 自动接收转账 (原A106)
|
|
tipText += "111:自动接收转账"
|
|
if commandInfo.A106 == 1 {
|
|
tipText += "【开启】"
|
|
currentGrapHBTask.SetAutoTransfer(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentGrapHBTask.SetAutoTransfer(false)
|
|
}
|
|
tipText += "\n111#"
|
|
if len(commandInfo.A116Str) > 0 {
|
|
tipText += commandInfo.A116Str
|
|
currentGrapHBTask.SetAutoTransferReplyContent(commandInfo.A116Str)
|
|
} else {
|
|
tipText += "回复内容"
|
|
currentGrapHBTask.SetAutoTransferReplyContent("谢谢,谢谢老板")
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 红包统计功能 (原A107)
|
|
tipText += "112:红包统计功能"
|
|
if commandInfo.A107 == 1 {
|
|
tipText += "【开启】"
|
|
currentGrapHBTask.SetHBStat(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentGrapHBTask.SetHBStat(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 红包统计清零 (原A108)
|
|
tipText += "113:红包统计清零\n"
|
|
|
|
// 收款统计功能 (原A109)
|
|
tipText += "114:收款统计功能"
|
|
if commandInfo.A109 == 1 {
|
|
tipText += "【开启】"
|
|
currentGrapHBTask.SetTransStat(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentGrapHBTask.SetTransStat(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 收款统计清零 (原A110)
|
|
tipText += "115:收款统计清零\n"
|
|
|
|
// 查询置顶群聊 (原200)
|
|
tipText += "116:查询置顶的群聊\n"
|
|
|
|
// 朋友圈收藏转发 (原A403)
|
|
tipText += "117:朋友圈收藏转发"
|
|
if commandInfo.A403 == 1 {
|
|
tipText += "【开启】"
|
|
currentSnsTransTask.SetAutoRelay(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentSnsTransTask.SetAutoRelay(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 朋友圈跟随转发 (原A402)
|
|
tipText += "118:朋友圈跟随转发"
|
|
if commandInfo.A402 == 1 {
|
|
tipText += "【开启】"
|
|
currentSnsTransTask.SetSyncTrans(true)
|
|
} else {
|
|
tipText += "【关闭】"
|
|
currentSnsTransTask.SetSyncTrans(false)
|
|
}
|
|
tipText += "\n"
|
|
|
|
// 检测僵死粉 (原901)
|
|
tipText += "119:检测僵死粉\n"
|
|
|
|
// 清理僵死粉 (原902)
|
|
tipText += "120:清理僵死粉\n"
|
|
|
|
// 帮助和功能状态 (原000)
|
|
tipText += "000:帮助和功能状态\n"
|
|
|
|
// 查询卡密有效期 (原100)
|
|
tipText += "666:查询卡密有效期"
|
|
|
|
wxc.AddNewTipMsg(tipText)
|
|
}
|
|
func GetOwner() map[string]int {
|
|
tmpHomeDir, err := os.Getwd()
|
|
if err != nil {
|
|
baseutils.PrintLog(err.Error())
|
|
return nil
|
|
}
|
|
file, err := os.Open(tmpHomeDir + "/assets/owner.json")
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
defer file.Close()
|
|
// 解码 JSON 数据
|
|
var data map[string]int
|
|
decoder := json.NewDecoder(file)
|
|
if err := decoder.Decode(&data); err != nil {
|
|
return nil
|
|
}
|
|
return data
|
|
}
|