first commit
This commit is contained in:
@@ -0,0 +1,357 @@
|
||||
package wxtask
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"xiawan/wx/clientsdk/baseinfo"
|
||||
"xiawan/wx/db"
|
||||
"xiawan/wx/srv/wxface"
|
||||
)
|
||||
|
||||
// WXGrabHBTask 抢红包管理器
|
||||
type WXGrabHBTask struct {
|
||||
wxConn wxface.IWXConnect
|
||||
// 待领红包项列表
|
||||
hongBaoItemChan chan *baseinfo.HongBaoItem
|
||||
// 可不可以抢红包
|
||||
canDoNext chan bool
|
||||
// 结束标志
|
||||
endChan chan bool
|
||||
// 是否正在运行
|
||||
isRunning bool
|
||||
// 当前在抢的红包
|
||||
currentHBItem *baseinfo.HongBaoItem
|
||||
// autoGrap
|
||||
autoGropFlag bool
|
||||
//延迟抢红包
|
||||
delayOpen int
|
||||
//是否自动回复感谢
|
||||
autoReply bool
|
||||
//感谢内容
|
||||
autoReplyContent string
|
||||
//是否过滤测挂
|
||||
filterCheats bool
|
||||
// 过滤测挂关键字
|
||||
filterCheatsKey string
|
||||
//是否过滤文字/字母包
|
||||
filterText bool
|
||||
// 接收个人红包
|
||||
autoPerson bool
|
||||
// 接收转账
|
||||
autoTransfer bool
|
||||
//接收转账后是否自动回复
|
||||
autoTransferReply bool
|
||||
//接收转账后自动回复的内容
|
||||
autoTransferReplyContent string
|
||||
//群是否置顶
|
||||
topGroup map[string]string
|
||||
// 红包统计开关
|
||||
hbStat bool
|
||||
// 转账统计开关
|
||||
transStat bool
|
||||
// 是否只抢置顶群(false 不抢置顶群, true 只抢置顶群)
|
||||
notTopGroup bool
|
||||
mu sync.Mutex // 互斥锁
|
||||
// 是否开启
|
||||
isStart bool
|
||||
}
|
||||
|
||||
// NewWXGrabHBTask 新建抢红包管理器
|
||||
func NewWXGrabHBTask(wxConn wxface.IWXConnect) *WXGrabHBTask {
|
||||
return &WXGrabHBTask{
|
||||
wxConn: wxConn,
|
||||
hongBaoItemChan: make(chan *baseinfo.HongBaoItem, 200),
|
||||
canDoNext: make(chan bool, 1),
|
||||
endChan: make(chan bool, 1),
|
||||
isRunning: false,
|
||||
autoGropFlag: false,
|
||||
delayOpen: 0,
|
||||
autoReply: true,
|
||||
autoReplyContent: "",
|
||||
filterCheats: false,
|
||||
filterText: false,
|
||||
autoPerson: false,
|
||||
autoTransfer: false,
|
||||
filterCheatsKey: "测,挂,cg,死,罚,踢,专",
|
||||
autoTransferReply: true,
|
||||
autoTransferReplyContent: "",
|
||||
topGroup: make(map[string]string),
|
||||
hbStat: false,
|
||||
transStat: false,
|
||||
notTopGroup: false,
|
||||
mu: sync.Mutex{},
|
||||
isStart: false,
|
||||
}
|
||||
}
|
||||
|
||||
func (ghbm *WXGrabHBTask) grapHB() {
|
||||
for {
|
||||
select {
|
||||
case ghbm.currentHBItem = <-ghbm.hongBaoItemChan:
|
||||
// 直接发送抢红包请求,不等待响应
|
||||
go ghbm.wxConn.GetWXReqInvoker().SendOpenRedEnvelopesRequest(ghbm.currentHBItem)
|
||||
// 立即准备抢下一个红包,不等待当前红包处理完成
|
||||
ghbm.GrapNext()
|
||||
return
|
||||
case <-ghbm.endChan:
|
||||
//ghbm.endChan <- true
|
||||
//close(ghbm.endChan)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// startGrap 开始抢红包
|
||||
func (ghbm *WXGrabHBTask) startGrap() {
|
||||
for {
|
||||
select {
|
||||
case <-ghbm.canDoNext:
|
||||
ghbm.grapHB()
|
||||
case <-ghbm.endChan:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Start 开始抢红包协程
|
||||
func (ghbm *WXGrabHBTask) Start() {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
if ghbm.isStart {
|
||||
return
|
||||
}
|
||||
ghbm.isStart = true
|
||||
go ghbm.startGrap()
|
||||
ghbm.canDoNext <- true
|
||||
}
|
||||
|
||||
// Stop 结束抢红包协程
|
||||
func (ghbm *WXGrabHBTask) Stop() {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
if !ghbm.isStart {
|
||||
return
|
||||
}
|
||||
ghbm.isStart = false
|
||||
ghbm.endChan <- true
|
||||
//close(ghbm.endChan)
|
||||
}
|
||||
|
||||
// GrapNext 抢下一个红包
|
||||
func (ghbm *WXGrabHBTask) GrapNext() {
|
||||
ghbm.canDoNext <- true
|
||||
}
|
||||
|
||||
// AddHBItem 添加红包项
|
||||
func (ghbm *WXGrabHBTask) AddHBItem(hbItem *baseinfo.HongBaoItem) {
|
||||
// 抢红包操作
|
||||
// ghbm.wxConn.GetWXReqInvoker().SendOpenRedEnvelopesRequest(hbItem)
|
||||
ghbm.hongBaoItemChan <- hbItem
|
||||
if !ghbm.isStart {
|
||||
ghbm.Start()
|
||||
}
|
||||
}
|
||||
|
||||
// 直接接收转账
|
||||
func (ghbm *WXGrabHBTask) DirectTransfer(transferItem *baseinfo.TenPayReqItem, wcPayInfo *baseinfo.WCPayInfo2) {
|
||||
ghbm.wxConn.GetWXReqInvoker().SendReceiveZZ(transferItem, wcPayInfo)
|
||||
}
|
||||
|
||||
// GetCurrentHBItem 获取当前正在抢的红包项
|
||||
func (ghbm *WXGrabHBTask) GetCurrentHBItem() *baseinfo.HongBaoItem {
|
||||
return ghbm.currentHBItem
|
||||
}
|
||||
|
||||
// IsAutoGrap 是否开启了自动抢红包功能
|
||||
func (ghbm *WXGrabHBTask) IsAutoGrap() bool {
|
||||
return ghbm.autoGropFlag
|
||||
}
|
||||
func (ghbm *WXGrabHBTask) IsFilterCheats() bool {
|
||||
return ghbm.filterCheats
|
||||
}
|
||||
func (ghbm *WXGrabHBTask) IsFilterText() bool {
|
||||
return ghbm.filterText
|
||||
}
|
||||
|
||||
// 是否自动接收个人红包
|
||||
func (ghbm *WXGrabHBTask) IsAutoPerson() bool {
|
||||
return ghbm.autoPerson
|
||||
}
|
||||
|
||||
// 是否自动接收转账
|
||||
func (ghbm *WXGrabHBTask) IsAutoTransfer() bool {
|
||||
return ghbm.autoTransfer
|
||||
}
|
||||
|
||||
// 设置是否自动接收个人红包
|
||||
func (ghbm *WXGrabHBTask) SetAutoPerson(bFlag bool) {
|
||||
ghbm.autoPerson = bFlag
|
||||
}
|
||||
|
||||
// 设置是否自动接收转账
|
||||
func (ghbm *WXGrabHBTask) SetAutoTransfer(bFlag bool) {
|
||||
ghbm.autoTransfer = bFlag
|
||||
}
|
||||
|
||||
// SetFilterCheats 过滤测挂开关
|
||||
func (ghbm *WXGrabHBTask) SetFilterCheats(bFlag bool) {
|
||||
ghbm.filterCheats = bFlag
|
||||
}
|
||||
|
||||
// SetFilterCheatsKey 设置过滤测挂关键字
|
||||
func (ghbm *WXGrabHBTask) SetFilterCheatsKey(key string) {
|
||||
ghbm.filterCheatsKey = key
|
||||
}
|
||||
|
||||
// 获取过滤测挂关键字
|
||||
func (ghbm *WXGrabHBTask) GetFilterCheatsKey() string {
|
||||
return ghbm.filterCheatsKey
|
||||
}
|
||||
|
||||
// SetFilterText 过滤文字/字母包开关
|
||||
func (ghbm *WXGrabHBTask) SetFilterText(bFlag bool) {
|
||||
ghbm.filterText = bFlag
|
||||
}
|
||||
|
||||
// 红包统计开关
|
||||
func (ghbm *WXGrabHBTask) SetHBStat(bFlag bool) {
|
||||
ghbm.hbStat = bFlag
|
||||
}
|
||||
|
||||
// 获取红包统计开关
|
||||
func (ghbm *WXGrabHBTask) IsHBStat() bool {
|
||||
return ghbm.hbStat
|
||||
}
|
||||
|
||||
// 转账统计开关
|
||||
func (ghbm *WXGrabHBTask) SetTransStat(bFlag bool) {
|
||||
ghbm.transStat = bFlag
|
||||
}
|
||||
|
||||
// 获取转账统计开关
|
||||
func (ghbm *WXGrabHBTask) IsTransStat() bool {
|
||||
return ghbm.transStat
|
||||
}
|
||||
|
||||
// SetAutoGrap 设置自动抢开关
|
||||
func (ghbm *WXGrabHBTask) SetAutoGrap(bFlag bool) {
|
||||
ghbm.autoGropFlag = bFlag
|
||||
}
|
||||
|
||||
// 设置抢红包自动回复
|
||||
func (ghbm *WXGrabHBTask) SetAutoReply(bFlag bool) {
|
||||
ghbm.autoReply = bFlag
|
||||
}
|
||||
|
||||
// notTopGroup
|
||||
func (ghbm *WXGrabHBTask) SetNotTopGroup(bFlag bool) {
|
||||
ghbm.notTopGroup = bFlag
|
||||
}
|
||||
|
||||
// is
|
||||
func (ghbm *WXGrabHBTask) IsNotTopGroup() bool {
|
||||
return ghbm.notTopGroup
|
||||
}
|
||||
|
||||
// 感谢内容
|
||||
func (ghbm *WXGrabHBTask) SetAutoReplyContent(content string) {
|
||||
ghbm.autoReplyContent = content
|
||||
}
|
||||
|
||||
// 接收转账后自动回复
|
||||
func (ghbm *WXGrabHBTask) SetAutoTransferReply(bFlag bool) {
|
||||
ghbm.autoTransferReply = bFlag
|
||||
}
|
||||
|
||||
// 接收转账后自动回复的内容
|
||||
func (ghbm *WXGrabHBTask) SetAutoTransferReplyContent(content string) {
|
||||
ghbm.autoTransferReplyContent = content
|
||||
}
|
||||
|
||||
// 获取
|
||||
func (ghbm *WXGrabHBTask) GetAutoReplyContent() string {
|
||||
return ghbm.autoReplyContent
|
||||
}
|
||||
|
||||
// 接收转账后自动回复的内容
|
||||
func (ghbm *WXGrabHBTask) GetAutoTransferReplyContent() string {
|
||||
return ghbm.autoTransferReplyContent
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
// 是否开启 接收转账后自动回复
|
||||
func (ghbm *WXGrabHBTask) IsAutoTransferReply() bool {
|
||||
return ghbm.autoTransferReply
|
||||
}
|
||||
|
||||
// IsAutoReply 是否开启了自动感谢红包功能
|
||||
func (ghbm *WXGrabHBTask) IsAutoReply() bool {
|
||||
return ghbm.autoReply
|
||||
}
|
||||
|
||||
// 设置延迟抢红包时间
|
||||
func (ghbm *WXGrabHBTask) SetDelayOpen(bFlag int) {
|
||||
ghbm.delayOpen = bFlag
|
||||
}
|
||||
|
||||
// 获取延迟时间
|
||||
func (ghbm *WXGrabHBTask) GetDelayOpen() int {
|
||||
return ghbm.delayOpen
|
||||
}
|
||||
|
||||
// 判断群是否置顶
|
||||
func (ghbm *WXGrabHBTask) IsTopGroup(grouid string) bool {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
_, exists := ghbm.topGroup[grouid]
|
||||
return exists
|
||||
}
|
||||
|
||||
func (ghbm *WXGrabHBTask) InitTopGroup(uuid string) {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
topGroup := make(map[string]string)
|
||||
ghbm.topGroup = topGroup
|
||||
|
||||
error := db.GETObj(uuid+"_topGroup", &ghbm.topGroup)
|
||||
if error != nil {
|
||||
}
|
||||
}
|
||||
|
||||
// 记录置顶的群
|
||||
func (ghbm *WXGrabHBTask) RecordTopGroup(grouid string, grouName string) {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
if ghbm.topGroup == nil {
|
||||
ghbm.topGroup = make(map[string]string)
|
||||
}
|
||||
ghbm.topGroup[grouid] = grouName
|
||||
// 存 redis
|
||||
db.SETExpirationObj(ghbm.wxConn.GetWXAccount().GetUserInfo().UUID+"_topGroup", ghbm.topGroup, -1)
|
||||
}
|
||||
|
||||
// 删除置顶的群
|
||||
func (ghbm *WXGrabHBTask) DelTopGroup(grouid string) {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
// 如果 topGroup 为 nil,不进行操作
|
||||
if ghbm.topGroup == nil {
|
||||
return
|
||||
}
|
||||
// 删除指定键
|
||||
delete(ghbm.topGroup, grouid)
|
||||
// 存 redis
|
||||
db.SETExpirationObj(ghbm.wxConn.GetWXAccount().GetUserInfo().UUID+"_topGroup", ghbm.topGroup, -1)
|
||||
}
|
||||
|
||||
// 获取全部群名称
|
||||
func (ghbm *WXGrabHBTask) GetTopGroup() string {
|
||||
ghbm.mu.Lock()
|
||||
defer ghbm.mu.Unlock()
|
||||
group := ghbm.topGroup
|
||||
var groupNames string
|
||||
for _, name := range group {
|
||||
groupNames += name + "\n"
|
||||
}
|
||||
return groupNames
|
||||
}
|
||||
Reference in New Issue
Block a user