481 lines
15 KiB
Go
481 lines
15 KiB
Go
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,
|
||
}
|
||
}
|