Merge pull request #121 from eatmoreapple/update-search

更新用户查找逻辑
This commit is contained in:
多吃点苹果 2022-11-12 21:51:15 +08:00 committed by GitHub
commit 4feda379ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 80 additions and 85 deletions

View File

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

44
user.go
View File

@ -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)
}
@ -516,30 +519,15 @@ 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
for _, condFunc := range condFuncList {
if condFunc(member) {
passCount++
} else {
break
func (m Members) Search(limit int, searchFuncList ...func(user *User) bool) (results Members) {
return search(m, limit, func(group *User) bool {
for _, searchFunc := range searchFuncList {
if !searchFunc(group) {
return false
}
}
if passCount == len(condFuncList) {
results = append(results, member)
}
}
return
return true
})
}
// GetByUserName 根据username查找用户