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,
|
|
}
|
|
}
|