first commit
This commit is contained in:
@@ -0,0 +1,271 @@
|
||||
package wxtask
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"xiawan/wx/protobuf/wechat"
|
||||
|
||||
"xiawan/wx/clientsdk/baseinfo"
|
||||
|
||||
"xiawan/wx/clientsdk"
|
||||
"xiawan/wx/srv/wxface"
|
||||
)
|
||||
|
||||
// WXSnsTask 朋友圈任务
|
||||
type WXSnsTask struct {
|
||||
wxConn wxface.IWXConnect
|
||||
// 需要自动点赞到朋友圈列表
|
||||
snsObjChan chan *wechat.SnsObject
|
||||
// 评论
|
||||
snsObjChancomment chan *wechat.SnsObject
|
||||
// 朋友圈刷新时间
|
||||
snsFlushTimeChan chan uint32
|
||||
// 标记当前最新的朋友圈创建时间
|
||||
currentSnsCreateTime uint32
|
||||
// 自动点赞开启标志
|
||||
bAutoThumbUP bool
|
||||
// 评论
|
||||
bAutoComment bool
|
||||
// 评论
|
||||
commentContent string
|
||||
// 结束标志
|
||||
endChan chan bool
|
||||
// 结束标志
|
||||
isRunning bool
|
||||
//
|
||||
isStart bool
|
||||
}
|
||||
|
||||
// NewWXSnsTask 新建朋友圈任务管理器
|
||||
func NewWXSnsTask(wxConn wxface.IWXConnect) *WXSnsTask {
|
||||
return &WXSnsTask{
|
||||
wxConn: wxConn,
|
||||
snsObjChan: make(chan *wechat.SnsObject, 100),
|
||||
snsObjChancomment: make(chan *wechat.SnsObject, 100),
|
||||
snsFlushTimeChan: make(chan uint32, 5),
|
||||
currentSnsCreateTime: 0,
|
||||
bAutoThumbUP: false,
|
||||
bAutoComment: false,
|
||||
isRunning: false,
|
||||
isStart: false,
|
||||
}
|
||||
}
|
||||
|
||||
// Start 开启任务
|
||||
func (wxst *WXSnsTask) Start() {
|
||||
if wxst.isStart {
|
||||
return
|
||||
}
|
||||
wxst.isStart = true
|
||||
wxst.endChan = make(chan bool, 1)
|
||||
// 定时刷新朋友圈
|
||||
go wxst.startFlushSns()
|
||||
// 开启自动点赞线程
|
||||
go wxst.startThumbUP()
|
||||
// 开启自动评论线程
|
||||
go wxst.startComment()
|
||||
}
|
||||
|
||||
// Stop 关闭任务
|
||||
func (wxst *WXSnsTask) Stop() {
|
||||
wxst.isStart = false
|
||||
//wxst.endChan <- true
|
||||
close(wxst.endChan)
|
||||
}
|
||||
|
||||
// SetAutoThumbUP 设置是否自动点赞朋友圈
|
||||
func (wxst *WXSnsTask) SetAutoThumbUP(bFlag bool) {
|
||||
wxst.bAutoThumbUP = bFlag
|
||||
if !bFlag {
|
||||
wxst.currentSnsCreateTime = 0
|
||||
}
|
||||
}
|
||||
|
||||
// 评论
|
||||
func (wxst *WXSnsTask) SetAutoComment(bFlag bool) {
|
||||
wxst.bAutoComment = bFlag
|
||||
if !bFlag {
|
||||
wxst.currentSnsCreateTime = 0
|
||||
}
|
||||
}
|
||||
|
||||
// 设置评论内容
|
||||
func (wxst *WXSnsTask) SetCommentContent(content string) {
|
||||
wxst.commentContent = content
|
||||
}
|
||||
|
||||
// 获取评论
|
||||
func (wxst *WXSnsTask) GetCommentContent() string {
|
||||
return wxst.commentContent
|
||||
}
|
||||
|
||||
// IsAutoThumbUP 是否开启了自动点赞朋友圈
|
||||
func (wxst *WXSnsTask) IsAutoThumbUP() bool {
|
||||
return wxst.bAutoThumbUP
|
||||
}
|
||||
|
||||
// 自动评论
|
||||
func (wxst *WXSnsTask) IsAutoComment() bool {
|
||||
return wxst.bAutoComment
|
||||
}
|
||||
|
||||
// SetCurrentCreateTime 设置最新的朋友圈创建时间
|
||||
func (wxst *WXSnsTask) SetCurrentCreateTime(tmpTime uint32) {
|
||||
wxst.currentSnsCreateTime = tmpTime
|
||||
}
|
||||
|
||||
// GetCurrentCreateTime 获取最新的朋友圈创建时间
|
||||
func (wxst *WXSnsTask) GetCurrentCreateTime() uint32 {
|
||||
return wxst.currentSnsCreateTime
|
||||
}
|
||||
|
||||
// AddCommentItemObj 新增自动点赞项
|
||||
func (wxst *WXSnsTask) AddCommentItemObj(snsObj *wechat.SnsObject) {
|
||||
wxst.snsObjChan <- snsObj
|
||||
}
|
||||
|
||||
// 新增自动评论
|
||||
func (wxst *WXSnsTask) AddCommentItemObjcomment(snsObj *wechat.SnsObject) {
|
||||
wxst.snsObjChancomment <- snsObj
|
||||
}
|
||||
|
||||
// 定时刷新朋友圈
|
||||
func (wxst *WXSnsTask) startFlushSns() {
|
||||
currentReqInvoker := wxst.wxConn.GetWXReqInvoker()
|
||||
// 1分钟刷新一次
|
||||
wxst.snsFlushTimeChan <- 60
|
||||
for {
|
||||
select {
|
||||
case waitTimes := <-wxst.snsFlushTimeChan:
|
||||
time.Sleep(time.Second * time.Duration(waitTimes))
|
||||
// 如果开启了自动转发
|
||||
if wxst.bAutoThumbUP || wxst.bAutoComment{
|
||||
// 刷新朋友圈首页
|
||||
currentReqInvoker.SendSnsTimeLineRequest("", 0)
|
||||
}
|
||||
wxst.snsFlushTimeChan <- 60
|
||||
continue
|
||||
case <-wxst.endChan:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 自动点赞朋友圈
|
||||
func (wxst *WXSnsTask) startThumbUP() {
|
||||
currentReqInvoker := wxst.wxConn.GetWXReqInvoker()
|
||||
for {
|
||||
time.Sleep(time.Second * 1)
|
||||
select {
|
||||
case snsObj := <-wxst.snsObjChan:
|
||||
commentLikeItem := clientsdk.CreateSnsCommentLikeItem(snsObj.GetId(), snsObj.GetUsername())
|
||||
currentReqInvoker.SendSnsCommentRequest(commentLikeItem)
|
||||
case <-wxst.endChan:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 自动评论
|
||||
func (wxst *WXSnsTask) startComment() {
|
||||
currentReqInvoker := wxst.wxConn.GetWXReqInvoker()
|
||||
for {
|
||||
time.Sleep(time.Second * 1)
|
||||
select {
|
||||
case snsObj := <-wxst.snsObjChancomment:
|
||||
fmt.Println(wxst.commentContent)
|
||||
commentLikeItem := clientsdk.CreateSnsCommentItem(snsObj.GetId(), snsObj.GetUsername(), wxst.commentContent, nil)
|
||||
currentReqInvoker.SendSnsCommentRequest(commentLikeItem)
|
||||
case <-wxst.endChan:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SetRunningFlag 设置运行状态
|
||||
func (wxst *WXSnsTask) setRunningFlag(isRunning bool) {
|
||||
wxst.isRunning = isRunning
|
||||
}
|
||||
|
||||
// DeleteTenSnsObject 删除30条朋友圈
|
||||
func (wxst *WXSnsTask) DeleteTenSnsObject() {
|
||||
currentWXFileHelperMgr := wxst.wxConn.GetWXFileHelperMgr()
|
||||
// 如果正在执行
|
||||
if wxst.isRunning {
|
||||
currentWXFileHelperMgr.AddNewTipMsg("正在清理朋友圈请稍等")
|
||||
return
|
||||
}
|
||||
go func() {
|
||||
wxst.setRunningFlag(true)
|
||||
defer wxst.setRunningFlag(false)
|
||||
currentWXFileHelperMgr.AddNewTipMsg("开始清理朋友圈...")
|
||||
// 获取30条朋友圈
|
||||
objIDList, err := wxst.getTenSnsObjectByCount(30)
|
||||
if err != nil {
|
||||
currentWXFileHelperMgr.AddNewTipMsg("清空朋友圈太频繁,稍后再试")
|
||||
return
|
||||
}
|
||||
|
||||
// 清理朋友圈
|
||||
count := len(objIDList)
|
||||
for index := 0; index < count; index++ {
|
||||
resp, err := wxst.DeleteSnsByID(strconv.Itoa(int(objIDList[index])))
|
||||
if err != nil {
|
||||
currentWXFileHelperMgr.AddNewTipMsg("清理太频繁,成功清理" + strconv.Itoa(index) + "条朋友圈")
|
||||
return
|
||||
}
|
||||
|
||||
// 如果返回出错
|
||||
if resp.GetBaseResponse().GetRet() != 0 {
|
||||
currentWXFileHelperMgr.AddNewTipMsg("清理太频繁,成功清理" + strconv.Itoa(index) + "条朋友圈")
|
||||
return
|
||||
}
|
||||
// 500毫秒清理一次
|
||||
time.Sleep(time.Millisecond * 600)
|
||||
}
|
||||
currentWXFileHelperMgr.AddNewTipMsg("清理完成, 成功清理" + strconv.Itoa(count) + "条朋友圈")
|
||||
return
|
||||
}()
|
||||
}
|
||||
|
||||
// DeleteSnsByID 根据朋友圈ID删除朋友圈
|
||||
func (wxst *WXSnsTask) DeleteSnsByID(snsIDList string) (*wechat.SnsObjectOpResponse, error) {
|
||||
currentReqInvoker := wxst.wxConn.GetWXReqInvoker()
|
||||
items := make([]*baseinfo.SnsObjectOpItem, 0)
|
||||
deleteItem := clientsdk.CreateSnsDeleteItem(snsIDList)
|
||||
items = append(items, deleteItem)
|
||||
return currentReqInvoker.SendSnsObjectOpRequest(items)
|
||||
}
|
||||
|
||||
// getAllSnsObject 获取所有的朋友圈
|
||||
func (wxst *WXSnsTask) getTenSnsObjectByCount(needCount uint32) ([]uint64, error) {
|
||||
currentReqInvoker := wxst.wxConn.GetWXReqInvoker()
|
||||
currentWXAccount := wxst.wxConn.GetWXAccount()
|
||||
tmpUserInfo := currentWXAccount.GetUserInfo()
|
||||
|
||||
retList := make([]uint64, 0)
|
||||
currentCount := uint32(0)
|
||||
tmpMaxID := uint64(0)
|
||||
for currentCount < needCount {
|
||||
// 获取10条朋友圈
|
||||
resp, err := currentReqInvoker.SendSnsUserPageRequest(tmpUserInfo.WxId, "", tmpMaxID, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
objectList := resp.GetObjectList()
|
||||
count := len(objectList)
|
||||
for index := 0; index < count; index++ {
|
||||
tmpObject := objectList[index]
|
||||
retList = append(retList, tmpObject.GetId())
|
||||
}
|
||||
if count < 10 {
|
||||
break
|
||||
}
|
||||
currentCount = currentCount + uint32(count)
|
||||
tmpMaxID = objectList[count-1].GetId()
|
||||
}
|
||||
return retList, nil
|
||||
}
|
||||
Reference in New Issue
Block a user