添加用户查找功能

This commit is contained in:
ivy1996-encode 2021-03-15 15:31:48 +08:00
parent c1c2fd9f72
commit 9d85e8f231
3 changed files with 73 additions and 63 deletions

View File

@ -11,6 +11,7 @@ func TestDefaultBot(t *testing.T) {
if message.Content == "logout" {
bot.Logout()
}
fmt.Println(message.Content)
}
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl
@ -18,6 +19,11 @@ func TestDefaultBot(t *testing.T) {
fmt.Println(err)
return
}
self, _ := bot.GetCurrentUser()
group, _ := self.Groups()
friends, _ := self.Friends()
fmt.Println(group.Search(Cond{"NickName": "厉害了"}))
fmt.Println(friends.Search(Cond{"RemarkName": "阿青"}))
fmt.Println(bot.Block())
}
@ -77,30 +83,6 @@ 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)
}
func TestUser_GetAvatarResponse(t *testing.T) {
messageHandler := func(message *Message) {
fmt.Println(message)

View File

@ -3,6 +3,7 @@ package openwechat
import (
"fmt"
"os"
"reflect"
"strings"
)
@ -35,24 +36,40 @@ 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)
func (f Friends) Search(cond Cond) (friends Friends, found bool) {
for _, member := range f {
value := reflect.ValueOf(member).Elem()
for k, v := range cond {
if field := value.FieldByName(k); field.IsValid() {
if field.Interface() == v {
found = true
if friends == nil {
friends = make(Friends, 0)
}
friends = append(friends, member)
}
}
}
newFriends = append(newFriends, friend)
}
return newFriends, nil
return
}
func (f Friends) SendMsg(msg *SendMessage) error {
for _, friend := range f {
if err := friend.SendMsg(msg); err != nil {
return err
}
}
return nil
}
func (f Friends) SendText(text string) error {
for _, friend := range f {
if err := friend.SendText(text); err != nil {
return err
}
}
return nil
}
type Group struct{ *User }
@ -89,6 +106,24 @@ func (g Groups) Count() int {
return len(g)
}
func (g Groups) Search(cond Cond) (groups Groups, found bool) {
for _, member := range g {
value := reflect.ValueOf(member).Elem()
for k, v := range cond {
if field := value.FieldByName(k); field.IsValid() {
if field.Interface() == v {
found = true
if groups == nil {
groups = make(Groups, 0)
}
groups = append(groups, member)
}
}
}
}
return
}
func isFriend(user User) bool {
return !isGroup(user) && strings.HasPrefix(user.UserName, "@") && user.VerifyFlag == 0
}

39
user.go
View File

@ -6,6 +6,7 @@ import (
"io/ioutil"
"net/http"
"os"
"reflect"
)
type User struct {
@ -306,30 +307,22 @@ 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)
func (m Members) Search(cond Cond) (results Members, found bool) {
for _, member := range m {
value := reflect.ValueOf(member).Elem()
for k, v := range cond {
if field := value.FieldByName(k); field.IsValid() {
if field.Interface() == v {
found = true
if results == nil {
results = make(Members, 0)
}
results = append(results, member)
}
}
newMembers = append(newMembers, member)
}
}
return newMembers, nil
return
}
type Cond map[string]interface{}