add Friend.SearchByRemarkName func and fix a problem with get user detail

This commit is contained in:
Ivy1996-encode 2021-02-21 12:38:35 +08:00
parent 5c0c7e1f5b
commit dfae882390
4 changed files with 81 additions and 8 deletions

View File

@ -74,3 +74,27 @@ func TestBotMessageSender(t *testing.T) {
} }
bot.Block() bot.Block()
} }
func TestFriends_SearchByRemarkName(t *testing.T) {
messageHandler := func(message *Message) {
fmt.Println(message)
}
bot := DefaultBot()
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil {
fmt.Println(err)
return
}
self, _ := bot.GetCurrentUser()
friends, err := self.Friends()
if err != nil {
fmt.Println(err)
return
}
d, err := friends[0].Detail()
fmt.Println(d, err)
firends2, err := friends.SearchByRemarkName("66")
fmt.Println(firends2)
fmt.Println(err)
}

View File

@ -102,7 +102,7 @@ type UserDetailItem struct {
type UserDetailItemList []UserDetailItem type UserDetailItemList []UserDetailItem
func NewUserDetailItemList(members Members) UserDetailItemList { func NewUserDetailItemList(members Members) UserDetailItemList {
list := make(UserDetailItemList, members.Count()-1) list := make(UserDetailItemList, 0)
for _, member := range members { for _, member := range members {
item := UserDetailItem{UserName: member.UserName, EncryChatRoomId: member.EncryChatRoomId} item := UserDetailItem{UserName: member.UserName, EncryChatRoomId: member.EncryChatRoomId}
list = append(list, item) list = append(list, item)

View File

@ -35,6 +35,26 @@ func (f Friends) Count() int {
return len(f) return len(f)
} }
func (f Friends) SearchByRemarkName(name string) (Friends, error) {
if f.Count() == 0 {
return nil, nil
}
self := f[0].Self
members, err := searchByRemarkName(name, self)
if err != nil {
return nil, err
}
var newFriends Friends
for _, member := range members {
friend := &Friend{member}
if newFriends == nil {
newFriends = make(Friends, 0)
}
newFriends = append(newFriends, friend)
}
return newFriends, nil
}
type Group struct{ *User } type Group struct{ *User }
// implement fmt.Stringer // implement fmt.Stringer

43
user.go
View File

@ -172,7 +172,7 @@ func (s *Self) FileHelper() (*Friend, error) {
// 获取所有的好友 // 获取所有的好友
func (s *Self) Friends(update ...bool) (Friends, error) { func (s *Self) Friends(update ...bool) (Friends, error) {
if s.friends == nil { if s.friends == nil {
if err := s.updateFriends(update...); err != nil { if err := s.updateFriends(true); err != nil {
return nil, err return nil, err
} }
} }
@ -204,6 +204,7 @@ func (s *Self) updateFriends(update ...bool) error {
for _, member := range s.members { for _, member := range s.members {
if isFriend(*member) { if isFriend(*member) {
friend := &Friend{member} friend := &Friend{member}
friend.Self = s
friends = append(friends, friend) friends = append(friends, friend)
} }
} }
@ -252,16 +253,16 @@ func (s *Self) UpdateMembersDetail() error {
times = count / 50 times = count / 50
} }
newMembers := make(Members, 0) newMembers := make(Members, 0)
request := s.Self.Bot.storage.GetBaseRequest() request := s.Bot.storage.GetBaseRequest()
var pMembers Members var pMembers Members
// 分情况依次更新 // 分情况依次更新
for i := 0; i < times; i++ { for i := 1; i <= times; i++ {
if times == 1 { if times == 1 {
pMembers = members pMembers = members
} else { } else {
pMembers = members[i*50 : (i+1)*times] pMembers = members[(i-1)*50 : i*50]
} }
nMembers, err := s.Self.Bot.Caller.WebWxBatchGetContact(pMembers, request) nMembers, err := s.Bot.Caller.WebWxBatchGetContact(pMembers, request)
if err != nil { if err != nil {
return err return err
} }
@ -271,9 +272,9 @@ func (s *Self) UpdateMembersDetail() error {
total := times * 50 total := times * 50
if total < count { if total < count {
// 将全部剩余的更新完毕 // 将全部剩余的更新完毕
left := total - count left := count - total
pMembers = members[total : total+left] pMembers = members[total : total+left]
nMembers, err := s.Self.Bot.Caller.WebWxBatchGetContact(pMembers, request) nMembers, err := s.Bot.Caller.WebWxBatchGetContact(pMembers, request)
if err != nil { if err != nil {
return err return err
} }
@ -304,3 +305,31 @@ func (m Members) SearchByUserName(username string) (*User, error) {
} }
return nil, errors.New("no such user found") return nil, errors.New("no such user found")
} }
func (m Members) SearchByRemarkName(name string) (Members, error) {
if m.Count() == 0 {
return nil, nil
}
self := m[0].Self
return searchByRemarkName(name, self)
}
func searchByRemarkName(name string, self *Self) (Members, error) {
if err := self.UpdateMembersDetail(); err != nil {
return nil, err
}
members, err := self.Members()
if err != nil {
return nil, err
}
var newMembers Members
for _, member := range members {
if member.RemarkName == name {
if newMembers == nil {
newMembers = make(Members, 0)
}
newMembers = append(newMembers, member)
}
}
return newMembers, nil
}