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 }