添加用户查找功能
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" {
|
if message.Content == "logout" {
|
||||||
bot.Logout()
|
bot.Logout()
|
||||||
}
|
}
|
||||||
|
fmt.Println(message.Content)
|
||||||
}
|
}
|
||||||
bot.RegisterMessageHandler(messageHandler)
|
bot.RegisterMessageHandler(messageHandler)
|
||||||
bot.UUIDCallback = PrintlnQrcodeUrl
|
bot.UUIDCallback = PrintlnQrcodeUrl
|
||||||
@ -18,6 +19,11 @@ func TestDefaultBot(t *testing.T) {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
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())
|
fmt.Println(bot.Block())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,30 +83,6 @@ func TestBotMessageSender(t *testing.T) {
|
|||||||
bot.Block()
|
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) {
|
func TestUser_GetAvatarResponse(t *testing.T) {
|
||||||
messageHandler := func(message *Message) {
|
messageHandler := func(message *Message) {
|
||||||
fmt.Println(message)
|
fmt.Println(message)
|
||||||
|
67
relations.go
67
relations.go
@ -3,6 +3,7 @@ package openwechat
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -35,24 +36,40 @@ func (f Friends) Count() int {
|
|||||||
return len(f)
|
return len(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Friends) SearchByRemarkName(name string) (Friends, error) {
|
func (f Friends) Search(cond Cond) (friends Friends, found bool) {
|
||||||
if f.Count() == 0 {
|
for _, member := range f {
|
||||||
return nil, nil
|
value := reflect.ValueOf(member).Elem()
|
||||||
}
|
for k, v := range cond {
|
||||||
self := f[0].Self
|
if field := value.FieldByName(k); field.IsValid() {
|
||||||
members, err := searchByRemarkName(name, self)
|
if field.Interface() == v {
|
||||||
if err != nil {
|
found = true
|
||||||
return nil, err
|
if friends == nil {
|
||||||
}
|
friends = make(Friends, 0)
|
||||||
var newFriends Friends
|
}
|
||||||
for _, member := range members {
|
friends = append(friends, member)
|
||||||
friend := &Friend{member}
|
}
|
||||||
if newFriends == nil {
|
}
|
||||||
newFriends = make(Friends, 0)
|
|
||||||
}
|
}
|
||||||
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 }
|
type Group struct{ *User }
|
||||||
@ -89,6 +106,24 @@ func (g Groups) Count() int {
|
|||||||
return len(g)
|
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 {
|
func isFriend(user User) bool {
|
||||||
return !isGroup(user) && strings.HasPrefix(user.UserName, "@") && user.VerifyFlag == 0
|
return !isGroup(user) && strings.HasPrefix(user.UserName, "@") && user.VerifyFlag == 0
|
||||||
}
|
}
|
||||||
|
39
user.go
39
user.go
@ -6,6 +6,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
@ -306,30 +307,22 @@ func (m Members) SearchByUserName(username string) (*User, error) {
|
|||||||
return nil, errors.New("no such user found")
|
return nil, errors.New("no such user found")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m Members) SearchByRemarkName(name string) (Members, error) {
|
func (m Members) Search(cond Cond) (results Members, found bool) {
|
||||||
if m.Count() == 0 {
|
for _, member := range m {
|
||||||
return nil, nil
|
value := reflect.ValueOf(member).Elem()
|
||||||
}
|
for k, v := range cond {
|
||||||
self := m[0].Self
|
if field := value.FieldByName(k); field.IsValid() {
|
||||||
return searchByRemarkName(name, self)
|
if field.Interface() == v {
|
||||||
}
|
found = true
|
||||||
|
if results == nil {
|
||||||
func searchByRemarkName(name string, self *Self) (Members, error) {
|
results = make(Members, 0)
|
||||||
if err := self.UpdateMembersDetail(); err != nil {
|
}
|
||||||
return nil, err
|
results = append(results, member)
|
||||||
}
|
}
|
||||||
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Cond map[string]interface{}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user