Files
wechat_ipad_pro/srv/wxrouter/wxbatchgetcontactbrief.go
2026-02-17 13:06:23 +08:00

98 lines
2.7 KiB
Go

package wxrouter
import (
"strings"
"time"
"xiawan/wx/clientsdk"
"xiawan/wx/db"
"xiawan/wx/protobuf/wechat"
"xiawan/wx/srv/wxcore"
"xiawan/wx/srv/wxface"
)
// WXBatchGetContactBriefInfoReqRouter 批量获取联系人信息
type WXBatchGetContactBriefInfoReqRouter struct {
wxcore.WXBaseRouter
}
// Handle 处理conn业务的方法
func (wxbgcbirr *WXBatchGetContactBriefInfoReqRouter) Handle(wxResp wxface.IWXResponse) error {
currentWXConn := wxResp.GetWXConncet()
currentWXAccount := currentWXConn.GetWXAccount()
currentWXCache := currentWXConn.GetWXCache()
currentUserInfo := currentWXAccount.GetUserInfo()
currentReqInvoker := currentWXConn.GetWXReqInvoker()
uuid := currentWXAccount.GetUserInfo().UUID
// 解析批量获取联系人信息响应包
var briefInfoResp wechat.BatchGetContactBriefInfoResp
err := clientsdk.ParseResponseData(currentUserInfo, wxResp.GetPackHeader(), &briefInfoResp)
if err != nil {
// 请求出问题了,判断是否掉线,并重连
time.Sleep(1 * time.Second)
go currentWXConn.CheckOnLineStatusLogin()
return err
}
// fmt.Println("批量获取联系人信息响应包:")
tmpContactList := briefInfoResp.GetContactList()
tmpCount := len(tmpContactList)
for index := 0; index < tmpCount; index++ {
tmpContactBriefInfo := tmpContactList[index]
userName := tmpContactBriefInfo.GetUsername()
tmpModContact := tmpContactBriefInfo.GetContact()
nickName := tmpModContact.GetNickName().GetStr()
// 公众号
hasExternalInfo := false
if len(tmpModContact.GetCustomizedInfo().GetExternalInfo()) > 0 {
hasExternalInfo = true
}
if strings.HasPrefix(userName, "gh_") || hasExternalInfo {
if len(nickName) <= 0 {
continue
}
// currentWXAccount.AddWXGhContact(tmpModContact)
continue
}
// 群
if strings.HasSuffix(userName, "@chatroom") {
// currentWXAccount.AddWXGroup(tmpModContact)
db.SaveOrUpdateContact(tmpModContact, uuid)
continue
}
// 好友
// currentWXAccount.AddWXFriendContact(tmpModContact)
if !isSystemWXID(userName) {
db.SaveOrUpdateContact(tmpModContact, uuid)
}
}
// 获取剩余20个微信ID列表
nextWxidList := currentWXCache.GetNextInitContactWxidList(20)
if len(nextWxidList) > 0 {
currentReqInvoker.SendBatchGetContactBriefInfoReq(nextWxidList)
} else {
// 初始化完成
db.UpdateInitContactStatus(uuid, 1)
// if !currentWXCache.IsInitContactFinished() {
// currentWXCache.SetInitContactFinished(true)
// }
}
return nil
}
func isSystemWXID(userName string) bool {
if userName == "qqmail" ||
userName == "qmessage" ||
userName == "mphelper" ||
userName == "filehelper" ||
userName == "weixin" ||
userName == "floatbottle" ||
userName == "fmessage" ||
userName == "medianote" {
return true
}
return false
}