添加用户查找功能
This commit is contained in:
parent
c1c2fd9f72
commit
9d85e8f231
30
bot_test.go
30
bot_test.go
@ -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)
|
||||
|
67
relations.go
67
relations.go
@ -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
39
user.go
@ -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{}
|
||||
|
Loading…
x
Reference in New Issue
Block a user