From dfae882390eb186153bdbb16c9d7e2d3dd20e292 Mon Sep 17 00:00:00 2001 From: Ivy1996-encode <2682904957@qq.com> Date: Sun, 21 Feb 2021 12:38:35 +0800 Subject: [PATCH] add Friend.SearchByRemarkName func and fix a problem with get user detail --- bot_test.go | 24 ++++++++++++++++++++++++ items.go | 2 +- relations.go | 20 ++++++++++++++++++++ user.go | 43 ++++++++++++++++++++++++++++++++++++------- 4 files changed, 81 insertions(+), 8 deletions(-) diff --git a/bot_test.go b/bot_test.go index 18cb5f6..bb97f18 100644 --- a/bot_test.go +++ b/bot_test.go @@ -74,3 +74,27 @@ func TestBotMessageSender(t *testing.T) { } 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) +} diff --git a/items.go b/items.go index 20c2b21..2229256 100644 --- a/items.go +++ b/items.go @@ -102,7 +102,7 @@ type UserDetailItem struct { type UserDetailItemList []UserDetailItem func NewUserDetailItemList(members Members) UserDetailItemList { - list := make(UserDetailItemList, members.Count()-1) + list := make(UserDetailItemList, 0) for _, member := range members { item := UserDetailItem{UserName: member.UserName, EncryChatRoomId: member.EncryChatRoomId} list = append(list, item) diff --git a/relations.go b/relations.go index 3051422..eb86564 100644 --- a/relations.go +++ b/relations.go @@ -35,6 +35,26 @@ func (f Friends) Count() int { 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 } // implement fmt.Stringer diff --git a/user.go b/user.go index 0101147..cd9fdcf 100644 --- a/user.go +++ b/user.go @@ -172,7 +172,7 @@ func (s *Self) FileHelper() (*Friend, error) { // 获取所有的好友 func (s *Self) Friends(update ...bool) (Friends, error) { if s.friends == nil { - if err := s.updateFriends(update...); err != nil { + if err := s.updateFriends(true); err != nil { return nil, err } } @@ -204,6 +204,7 @@ func (s *Self) updateFriends(update ...bool) error { for _, member := range s.members { if isFriend(*member) { friend := &Friend{member} + friend.Self = s friends = append(friends, friend) } } @@ -252,16 +253,16 @@ func (s *Self) UpdateMembersDetail() error { times = count / 50 } newMembers := make(Members, 0) - request := s.Self.Bot.storage.GetBaseRequest() + request := s.Bot.storage.GetBaseRequest() var pMembers Members // 分情况依次更新 - for i := 0; i < times; i++ { + for i := 1; i <= times; i++ { if times == 1 { pMembers = members } 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 { return err } @@ -271,9 +272,9 @@ func (s *Self) UpdateMembersDetail() error { total := times * 50 if total < count { // 将全部剩余的更新完毕 - left := total - count + left := count - total 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 { return err } @@ -304,3 +305,31 @@ func (m Members) SearchByUserName(username string) (*User, error) { } 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 +}