From 9e388b323f7423fe577d865f568d301362030b3b Mon Sep 17 00:00:00 2001 From: eatmoreapple Date: Sat, 12 Nov 2022 21:48:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relations.go | 121 +++++++++++++++++++++++++++------------------------ user.go | 40 ++++++----------- 2 files changed, 78 insertions(+), 83 deletions(-) diff --git a/relations.go b/relations.go index d7f4993..17a89b9 100644 --- a/relations.go +++ b/relations.go @@ -82,28 +82,25 @@ func (f Friends) SearchByRemarkName(limit int, remarkName string) (results Frien } // Search 根据自定义条件查找好友 -func (f Friends) Search(limit int, condFuncList ...func(friend *Friend) bool) (results Friends) { - if condFuncList == nil { - return f - } - if limit <= 0 { - limit = f.Count() - } - for _, member := range f { - if results.Count() == limit { - break - } - var passCount int - for _, condFunc := range condFuncList { - if condFunc(member) { - passCount++ +func (f Friends) Search(limit int, searchFuncList ...func(friend *Friend) bool) (results Friends) { + return f.AsMembers().Search(limit, func(user *User) bool { + var friend = &Friend{user} + for _, searchFunc := range searchFuncList { + if !searchFunc(friend) { + return false } } - if passCount == len(condFuncList) { - results = append(results, member) - } + return true + }).Friends() +} + +// AsMembers 将群组转换为用户列表 +func (f Friends) AsMembers() Members { + var members = make(Members, 0, f.Count()) + for _, friend := range f { + members = append(members, friend.User) } - return + return members } // SendText 向slice的好友依次发送文本消息 @@ -308,28 +305,25 @@ func (g Groups) SearchByRemarkName(limit int, remarkName string) (results Groups } // Search 根据自定义条件查找群组 -func (g Groups) Search(limit int, condFuncList ...func(group *Group) bool) (results Groups) { - if condFuncList == nil { - return g - } - if limit <= 0 { - limit = g.Count() - } - for _, member := range g { - if results.Count() == limit { - break - } - var passCount int - for _, condFunc := range condFuncList { - if condFunc(member) { - passCount++ +func (g Groups) Search(limit int, searchFuncList ...func(group *Group) bool) (results Groups) { + return g.AsMembers().Search(limit, func(user *User) bool { + var group = &Group{user} + for _, searchFunc := range searchFuncList { + if !searchFunc(group) { + return false } } - if passCount == len(condFuncList) { - results = append(results, member) - } + return true + }).Groups() +} + +// AsMembers 将群组列表转换为用户列表 +func (g Groups) AsMembers() Members { + var members = make(Members, 0, g.Count()) + for _, group := range g { + members = append(members, group.User) } - return + return members } // Mp 公众号对象 @@ -364,28 +358,25 @@ func (m Mps) Last() *Mp { } // Search 根据自定义条件查找 -func (m Mps) Search(limit int, condFuncList ...func(group *Mp) bool) (results Mps) { - if condFuncList == nil { - return m - } - if limit <= 0 { - limit = m.Count() - } - for _, member := range m { - if results.Count() == limit { - break - } - var passCount int - for _, condFunc := range condFuncList { - if condFunc(member) { - passCount++ +func (m Mps) Search(limit int, searchFuncList ...func(group *Mp) bool) (results Mps) { + return m.AsMembers().Search(limit, func(user *User) bool { + var mp = &Mp{user} + for _, searchFunc := range searchFuncList { + if !searchFunc(mp) { + return false } } - if passCount == len(condFuncList) { - results = append(results, member) - } + return true + }).MPs() +} + +// AsMembers 将公众号列表转换为用户列表 +func (m Mps) AsMembers() Members { + var members = make(Members, 0, m.Count()) + for _, mp := range m { + members = append(members, mp.User) } - return + return members } // SearchByUserName 根据用户名查找 @@ -452,3 +443,19 @@ func (m Mps) GetByNickName(nickname string) *Mp { func (m Mps) GetByUserName(username string) *Mp { return m.SearchByUserName(1, username).First() } + +// search 根据自定义条件查找 +func search(searchList Members, limit int, searchFunc func(group *User) bool) (results Members) { + if limit <= 0 { + limit = searchList.Count() + } + for _, member := range searchList { + if results.Count() == limit { + break + } + if searchFunc(member) { + results = append(results, member) + } + } + return +} diff --git a/user.go b/user.go index 4d7cb38..e0296a0 100644 --- a/user.go +++ b/user.go @@ -186,7 +186,8 @@ func (s *Self) updateMembers() error { } // FileHelper 获取文件传输助手对象,封装成Friend返回 -// fh, err := self.FileHelper() // or fh := openwechat.NewFriendHelper(self) +// +// fh, err := self.FileHelper() // or fh := openwechat.NewFriendHelper(self) func (s *Self) FileHelper() (*Friend, error) { // 如果缓存里有,直接返回,否则去联系人里面找 if s.fileHelper != nil { @@ -300,7 +301,8 @@ func (s *Self) SendFileToFriend(friend *Friend, file *os.File) (*SentMessage, er } // SetRemarkNameToFriend 设置好友备注 -// self.SetRemarkNameToFriend(friend, "remark") // or friend.SetRemarkName("remark") +// +// self.SetRemarkNameToFriend(friend, "remark") // or friend.SetRemarkName("remark") func (s *Self) SetRemarkNameToFriend(friend *Friend, remarkName string) error { req := s.Bot.Storage.Request return s.Bot.Caller.WebWxOplog(req, remarkName, friend.UserName) @@ -418,10 +420,11 @@ func (s *Self) SendFileToGroup(group *Group, file *os.File) (*SentMessage, error } // RevokeMessage 撤回消息 -// sentMessage, err := friend.SendText("message") -// if err == nil { -// self.RevokeMessage(sentMessage) // or sentMessage.Revoke() -// } +// +// sentMessage, err := friend.SendText("message") +// if err == nil { +// self.RevokeMessage(sentMessage) // or sentMessage.Revoke() +// } func (s *Self) RevokeMessage(msg *SentMessage) error { return s.Bot.Caller.WebWxRevokeMsg(msg, s.Bot.Storage.Request) } @@ -517,29 +520,14 @@ func (m Members) SearchByRemarkName(limit int, remarkName string) (results Membe // Search 根据自定义条件查找 func (m Members) Search(limit int, condFuncList ...func(user *User) bool) (results Members) { - if condFuncList == nil { - return m - } - if limit <= 0 { - limit = m.Count() - } - for _, member := range m { - if count := len(results); count == limit { - break - } - var passCount int + return search(m, limit, func(group *User) bool { for _, condFunc := range condFuncList { - if condFunc(member) { - passCount++ - } else { - break + if !condFunc(group) { + return false } } - if passCount == len(condFuncList) { - results = append(results, member) - } - } - return + return true + }) } // GetByUserName 根据username查找用户 From a4341e24d62047b4b24059d1499c1629f9d57007 Mon Sep 17 00:00:00 2001 From: eatmoreapple Date: Sat, 12 Nov 2022 21:49:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user.go b/user.go index e0296a0..ab3367a 100644 --- a/user.go +++ b/user.go @@ -519,10 +519,10 @@ func (m Members) SearchByRemarkName(limit int, remarkName string) (results Membe } // Search 根据自定义条件查找 -func (m Members) Search(limit int, condFuncList ...func(user *User) bool) (results Members) { +func (m Members) Search(limit int, searchFuncList ...func(user *User) bool) (results Members) { return search(m, limit, func(group *User) bool { - for _, condFunc := range condFuncList { - if !condFunc(group) { + for _, searchFunc := range searchFuncList { + if !searchFunc(group) { return false } }