Files
wechat_ipad_pro/clientsdk/oplogitem.go
2026-02-17 13:06:23 +08:00

481 lines
15 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package clientsdk
import (
"github.com/golang/protobuf/proto"
"github.com/micro/go-micro/util/log"
"xiawan/wx/clientsdk/baseinfo"
"xiawan/wx/protobuf/wechat"
)
// CreateModifyUserInfoField 创建修改 账号信息 项
func CreateModifyUserInfoField(modUserInfo *wechat.ModUserInfo, initFlag uint32, nickName string) *baseinfo.ModifyItem {
// set ModUserInfo
var bitFlag = initFlag
// NickName
if modUserInfo.NickName != nil &&
modUserInfo.NickName.Str != nil &&
len(*modUserInfo.NickName.Str) > 0 {
bitFlag |= 0x2
}
// BindEmail
if modUserInfo.BindEmail != nil &&
modUserInfo.BindEmail.Str != nil &&
len(*modUserInfo.BindEmail.Str) > 0 {
bitFlag |= 0x8
}
// PersonalCard
if modUserInfo.PersonalCard != nil &&
*modUserInfo.PersonalCard != 0 {
bitFlag |= 0x80
}
modUserInfo.BitFlag = &bitFlag
data, marshalErr := proto.Marshal(modUserInfo)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(1),
Len: uint32(len(data)),
Data: data,
}
}
// CreateDeleteFriendField 创建删掉好友项
func CreateDeleteFriendField(modContact *wechat.ModContact) *baseinfo.ModifyItem {
zeroValue32 := uint32(0)
var emptySKString wechat.SKBuiltinString
emptySKString.Str = nil
var emptySKBuffer wechat.SKBuiltinString_
emptySKBuffer.Len = &zeroValue32
// 构造新的ModContact
var tmpModContact wechat.ModContact
tmpModContact.UserName = modContact.UserName
tmpModContact.NickName = modContact.NickName
tmpModContact.Pyinitial = &emptySKString
tmpModContact.QuanPin = modContact.QuanPin
tmpModContact.Sex = modContact.Sex
tmpModContact.ImgBuf = &emptySKBuffer
tmpModContact.ImgFlag = &zeroValue32
// bitVal
bitVal := modContact.GetBitVal()&modContact.GetBitMask() | 2
bitVal = bitVal & 0xFFFFFFFE
tmpModContact.BitVal = &bitVal
// bitMask
bitMask := uint32(0xFFFFFFFF)
tmpModContact.BitMask = &bitMask
tmpModContact.Remark = modContact.Remark
tmpModContact.RemarkPyinitial = modContact.RemarkPyinitial
tmpModContact.RemarkQuanPin = modContact.RemarkQuanPin
tmpModContact.ContactType = modContact.ContactType
tmpModContact.ChatRoomNotify = modContact.ChatRoomNotify
tmpModContact.AddContactScene = &zeroValue32
tmpModContact.DeleteContactScene = &zeroValue32
data, marshalErr := proto.Marshal(&tmpModContact)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(2),
Len: uint32(len(data)),
Data: data,
}
}
// CreateModifyFriendField 创建修改好友 备注名项
func CreateModifyFriendField(modContact *wechat.ModContact) *baseinfo.ModifyItem {
zeroValue32 := uint32(0)
emptyString := string("")
var emptySKString wechat.SKBuiltinString
emptySKString.Str = &emptyString
var emptySKBuffer wechat.SKBuiltinString_
emptySKBuffer.Len = &zeroValue32
// 构造新的ModContact
var tmpModContact wechat.ModContact
tmpModContact.UserName = modContact.UserName
tmpModContact.NickName = modContact.NickName
tmpModContact.Pyinitial = &emptySKString
tmpModContact.QuanPin = modContact.QuanPin
tmpModContact.Sex = modContact.Sex
tmpModContact.ImgBuf = &emptySKBuffer
tmpModContact.ImgFlag = &zeroValue32
// bitVal
bitVal := modContact.GetBitVal() & modContact.GetBitMask()
bitVal = bitVal | 0x5
tmpModContact.BitVal = &bitVal
// bitMask
bitMask := uint32(0xFFFFFFFF)
tmpModContact.BitMask = &bitMask
tmpModContact.Remark = modContact.Remark
tmpModContact.RemarkPyinitial = modContact.RemarkPyinitial
tmpModContact.RemarkQuanPin = modContact.RemarkQuanPin
tmpModContact.ContactType = modContact.ContactType
tmpModContact.RoomInfoCount = &zeroValue32
tmpModContact.RoomInfoList = make([]*wechat.RoomInfo, 0)
tmpModContact.ChatRoomNotify = modContact.ChatRoomNotify
tmpModContact.AddContactScene = &zeroValue32
tmpModContact.DeleteContactScene = &zeroValue32
data, marshalErr := proto.Marshal(&tmpModContact)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(2),
Len: uint32(len(data)),
Data: data,
}
}
// CreateSaveGroupToAddressBookField 创建保存群聊到通讯录项
func CreateSaveGroupToAddressBookField(modContact *wechat.ModContact, bSafeToAddressBook bool) *baseinfo.ModifyItem {
zeroValue32 := uint32(0)
emptyString := string("")
var emptySKString wechat.SKBuiltinString
emptySKString.Str = &emptyString
var emptySKBuffer wechat.SKBuiltinString_
emptySKBuffer.Len = &zeroValue32
// 构造新的ModContact
var tmpModContact wechat.ModContact
tmpModContact.UserName = modContact.UserName
tmpModContact.NickName = modContact.NickName
tmpModContact.Pyinitial = &emptySKString
tmpModContact.QuanPin = modContact.QuanPin
tmpModContact.Sex = modContact.Sex
tmpModContact.ImgBuf = &emptySKBuffer
tmpModContact.ImgFlag = &zeroValue32
// bitVal
bitVal := modContact.GetBitVal() & modContact.GetBitMask()
if bSafeToAddressBook {
bitVal = bitVal | 0x1
} else {
bitVal = bitVal & 0xFFFFFFFE
}
tmpModContact.BitVal = &bitVal
// bitMask
bitMask := uint32(0xFFFFFFFF)
tmpModContact.BitMask = &bitMask
tmpModContact.Remark = modContact.Remark
tmpModContact.RemarkPyinitial = modContact.RemarkPyinitial
tmpModContact.RemarkQuanPin = modContact.RemarkQuanPin
tmpModContact.ContactType = modContact.ContactType
tmpModContact.RoomInfoCount = &zeroValue32
tmpModContact.RoomInfoList = make([]*wechat.RoomInfo, 0)
tmpModContact.ChatRoomNotify = modContact.ChatRoomNotify
tmpModContact.AddContactScene = &zeroValue32
tmpModContact.DeleteContactScene = &zeroValue32
data, marshalErr := proto.Marshal(&tmpModContact)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(2),
Len: uint32(len(data)),
Data: data,
}
}
// CreateModifyFriendBlack 创建修改好友项:拉黑
func CreateModifyFriendBlack(modContact *wechat.ModContact) *baseinfo.ModifyItem {
zeroValue32 := uint32(0)
emptyString := string("")
var emptySKString wechat.SKBuiltinString
emptySKString.Str = &emptyString
var emptySKBuffer wechat.SKBuiltinString_
emptySKBuffer.Len = &zeroValue32
// 构造新的ModContact
var tmpModContact wechat.ModContact
tmpModContact.UserName = modContact.UserName
tmpModContact.NickName = modContact.NickName
tmpModContact.Pyinitial = &emptySKString
tmpModContact.QuanPin = modContact.QuanPin
tmpModContact.Sex = modContact.Sex
tmpModContact.ImgBuf = &emptySKBuffer
tmpModContact.ImgFlag = &zeroValue32
// bitVal
bitVal := modContact.GetBitVal() & modContact.GetBitMask()
bitVal = bitVal | 0xF
tmpModContact.BitVal = &bitVal
// bitMask
bitMask := uint32(0xFFFFFFFF)
tmpModContact.BitMask = &bitMask
tmpModContact.Remark = modContact.Remark
tmpModContact.RemarkPyinitial = modContact.RemarkPyinitial
tmpModContact.RemarkQuanPin = modContact.RemarkQuanPin
tmpModContact.ContactType = modContact.ContactType
tmpModContact.RoomInfoCount = &zeroValue32
tmpModContact.RoomInfoList = make([]*wechat.RoomInfo, 0)
// ChatRoomNotify
chatRoomNotify := uint32(0)
if modContact.GetChatroomStatus() != 1 {
chatRoomNotify = 1
}
tmpModContact.ChatRoomNotify = &chatRoomNotify
tmpModContact.AddContactScene = &zeroValue32
tmpModContact.DeleteContactScene = &zeroValue32
data, marshalErr := proto.Marshal(&tmpModContact)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(2),
Len: uint32(len(data)),
Data: data,
}
}
// CreateDelContactField 创建联系人项
func CreateDelContactField(userName string) *baseinfo.ModifyItem {
var delContact wechat.DelContact
// UserName
var skUserName wechat.SKBuiltinString
skUserName.Str = &userName
delContact.UserName = &skUserName
// DeleteContactScene
delContactSecne := uint32(0)
delContact.DeleteContactScene = &delContactSecne
data, marshalErr := proto.Marshal(&delContact)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(7),
Len: uint32(len(data)),
Data: data,
}
}
// CreateQutiChatRoomItem 创建退出群聊项
// chatRoomName: 群微信ID
// userName: 自己的微信ID
func CreateQutiChatRoomItem(chatRoomName string, userName string) *baseinfo.ModifyItem {
var quitChatRoomItem wechat.QuitChatRoom
// chatRoomName
var chatRoomNameBuffer wechat.SKBuiltinString
chatRoomNameBuffer.Str = &chatRoomName
quitChatRoomItem.ChatRoomName = &chatRoomNameBuffer
// UserName
var userNameBuffer wechat.SKBuiltinString
userNameBuffer.Str = &userName
quitChatRoomItem.UserName = &userNameBuffer
data, marshalErr := proto.Marshal(&quitChatRoomItem)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(16),
Len: uint32(len(data)),
Data: data,
}
}
// CreateFunctionSwitchItem 创建开关项
// funcID功能ID
// switchType功能开关值
func CreateFunctionSwitchItem(funcID uint32, switchType uint32) *baseinfo.ModifyItem {
var functionSwitch wechat.FunctionSwitch
functionSwitch.FunctionId = &funcID
functionSwitch.SwitchValue = &switchType
data, marshalErr := proto.Marshal(&functionSwitch)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(23),
Len: uint32(len(data)),
Data: data,
}
}
// CreateModifyGroupNameField 创建修改群名称(群主题名称) 项
// groupWxid: 群微信id
// topicName: 新的群主题名称
func CreateModifyGroupNameField(groupWxid string, topicName string) *baseinfo.ModifyItem {
var modChatRoomTopic wechat.ModChatRoomTopic
// 群号
var groupWxidBuffer wechat.SKBuiltinString
groupWxidBuffer.Str = &groupWxid
modChatRoomTopic.ChatRoomName = &groupWxidBuffer
// 新的昵称
var topicNameBuffer wechat.SKBuiltinString
topicNameBuffer.Str = &topicName
modChatRoomTopic.ChatRoomTopic = &topicNameBuffer
data, marshalErr := proto.Marshal(&modChatRoomTopic)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(27),
Len: uint32(len(data)),
Data: data,
}
}
// CreateModifyGroupNickNameField 创建修改群的个人昵称 项
// groupWxid: 群微信ID
// wxID: 自己的微信ID
// groupNickName: 新的群个人昵称
func CreateModifyGroupNickNameField(groupWxid string, wxID string, groupNickName string) *baseinfo.ModifyItem {
var chatRoomMemberDisplayName wechat.ModChatRoomMemberDisplayName
// 群号
chatRoomMemberDisplayName.ChatRoomName = &groupWxid
// 自己的微信ID
chatRoomMemberDisplayName.UserName = &wxID
// 新的个人群昵称
chatRoomMemberDisplayName.DisplayName = &groupNickName
data, marshalErr := proto.Marshal(&chatRoomMemberDisplayName)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(48),
Len: uint32(len(data)),
Data: data,
}
}
// CreateSnsShowTimeItem 允许朋友查看朋友的时间范围(三天、一个月、半年、无限制)
// snsUserInfo通过getProfile请求可以获取到
// hours时间范围小时(72-三天720-一个月、4320-半年、4294967295-全部),目前只能是这几个值
func CreateSnsShowTimeItem(snsUserInfo *wechat.SnsUserInfo, hours uint32) *baseinfo.ModifyItem {
snsUserInfo.SnsPrivacyRecent = &hours
data, marshalErr := proto.Marshal(snsUserInfo)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(51),
Len: uint32(len(data)),
Data: data,
}
}
// CreateSnsShowTenLineOfStrangerItem 允许陌生人查看十条朋友圈,设置
// snsUserInfo通过getProfile请求可以获取到
// bShowTenLines: true-代表允许false-代表不允许
func CreateSnsShowTenLineOfStrangerItem(snsUserInfo *wechat.SnsUserInfo, bShowTenLines bool) *baseinfo.ModifyItem {
tmpSnsFlagEx := snsUserInfo.GetSnsFlagex()
if bShowTenLines {
tmpSnsFlagEx = tmpSnsFlagEx & 0xFFFFFFFE
} else {
tmpSnsFlagEx = tmpSnsFlagEx | 1
}
snsUserInfo.SnsFlagex = &tmpSnsFlagEx
data, marshalErr := proto.Marshal(snsUserInfo)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(51),
Len: uint32(len(data)),
Data: data,
}
}
// CreateBlackSnsItem 创建Oplog项别人添加我是否需要验证
// needVerify: 0-不需要验证1-需要验证
func CreateBlackSnsItem(friendWxid string, modType uint32) *baseinfo.ModifyItem {
/*var snsBlackList wechat.ModSnsBlackList
snsBlackList.ContactUsername = &friendWxid
snsBlackList.ModType = &modType
data, marshalErr := proto.Marshal(&snsBlackList)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModUserInfo failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}*/
req := &wechat.FunctionSwitch{
FunctionId: proto.Uint32(4),
SwitchValue: proto.Uint32(modType),
}
reqBuf, _ := proto.Marshal(req)
return &baseinfo.ModifyItem{
CmdID: uint32(23),
Len: uint32(len(reqBuf)),
Data: reqBuf,
}
}
// CreateModifyNickNameField 创建修改 昵称 请求项
func CreateModifyNickNameField(newNickName string) *baseinfo.ModifyItem {
var singleField wechat.ModSingleField
// set singlefield
var opType = uint32(1)
singleField.OpType = &opType
singleField.Value = &newNickName
singleData, marshalErr := proto.Marshal(&singleField)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModSingleField failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(64),
Len: uint32(len(singleData)),
Data: singleData,
}
}
// CreateModifySignatureField 创建修改 个性签名 请求项
func CreateModifySignatureField(newSignature string) *baseinfo.ModifyItem {
var singleField wechat.ModSingleField
// set singlefield
var opType = uint32(2)
singleField.OpType = &opType
singleField.Value = &newSignature
singleData, marshalErr := proto.Marshal(&singleField)
if marshalErr != nil {
log.Info("proto.Marshal wechat.ModSingleField failed: ", marshalErr)
return &baseinfo.ModifyItem{}
}
return &baseinfo.ModifyItem{
CmdID: uint32(64),
Len: uint32(len(singleData)),
Data: singleData,
}
}