add Friend.SearchByRemarkName func and fix a problem with get user detail
This commit is contained in:
parent
5c0c7e1f5b
commit
dfae882390
24
bot_test.go
24
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)
|
||||
}
|
||||
|
2
items.go
2
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)
|
||||
|
20
relations.go
20
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
|
||||
|
43
user.go
43
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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user