修复一个好友匹配的问题
This commit is contained in:
parent
dd01e45ad5
commit
7fbb5e6db0
@ -23,7 +23,7 @@ func TestDefaultBot(t *testing.T) {
|
||||
group, _ := self.Groups()
|
||||
friends, _ := self.Friends()
|
||||
fmt.Println(group.Search(Cond{"NickName": "厉害了"}))
|
||||
fmt.Println(friends.Search(Cond{"RemarkName": "阿青"}))
|
||||
fmt.Println(friends.Search(Cond{"RemarkName": "阿青", "Sex": 2}))
|
||||
fmt.Println(bot.Block())
|
||||
}
|
||||
|
||||
|
42
relations.go
42
relations.go
@ -72,7 +72,7 @@ func (f Friends) Search(cond Cond) (friends Friends, found bool) {
|
||||
switch k {
|
||||
case "UserName":
|
||||
if value, ok := v.(string); ok {
|
||||
return f.SearchByNickName(value)
|
||||
return f.SearchByUserName(value)
|
||||
}
|
||||
case "NickName":
|
||||
if value, ok := v.(string); ok {
|
||||
@ -85,19 +85,21 @@ func (f Friends) Search(cond Cond) (friends Friends, found bool) {
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, member := range f {
|
||||
value := reflect.ValueOf(member).Elem()
|
||||
for _, friend := range f {
|
||||
value := reflect.ValueOf(friend).Elem()
|
||||
var matchCount int
|
||||
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)
|
||||
if field.Interface() != v {
|
||||
break
|
||||
}
|
||||
matchCount++
|
||||
}
|
||||
}
|
||||
if matchCount == len(cond) {
|
||||
found = true
|
||||
friends = append(friends, friend)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -184,14 +186,14 @@ func (g Groups) SearchByRemarkName(remarkName string) (results Groups, found boo
|
||||
return
|
||||
}
|
||||
|
||||
func (g Groups) Search(cond Cond) (groups Groups, found bool) {
|
||||
func (g Groups) Search(cond Cond) (results Groups, found bool) {
|
||||
|
||||
if len(cond) == 1 {
|
||||
for k, v := range cond {
|
||||
switch k {
|
||||
case "UserName":
|
||||
if value, ok := v.(string); ok {
|
||||
return g.SearchByNickName(value)
|
||||
return g.SearchByUserName(value)
|
||||
}
|
||||
case "NickName":
|
||||
if value, ok := v.(string); ok {
|
||||
@ -205,19 +207,21 @@ func (g Groups) Search(cond Cond) (groups Groups, found bool) {
|
||||
}
|
||||
}
|
||||
|
||||
for _, member := range g {
|
||||
value := reflect.ValueOf(member).Elem()
|
||||
for _, group := range g {
|
||||
value := reflect.ValueOf(group).Elem()
|
||||
var matchCount int
|
||||
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)
|
||||
if field.Interface() != v {
|
||||
break
|
||||
}
|
||||
matchCount++
|
||||
}
|
||||
}
|
||||
if matchCount == len(cond) {
|
||||
found = true
|
||||
results = append(results, group)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
16
user.go
16
user.go
@ -343,7 +343,7 @@ func (m Members) Search(cond Cond) (results Members, found bool) {
|
||||
switch k {
|
||||
case "UserName":
|
||||
if value, ok := v.(string); ok {
|
||||
return m.SearchByNickName(value)
|
||||
return m.SearchByUserName(value)
|
||||
}
|
||||
case "NickName":
|
||||
if value, ok := v.(string); ok {
|
||||
@ -359,17 +359,19 @@ func (m Members) Search(cond Cond) (results Members, found bool) {
|
||||
|
||||
for _, member := range m {
|
||||
value := reflect.ValueOf(member).Elem()
|
||||
var matchCount int
|
||||
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)
|
||||
if field.Interface() != v {
|
||||
break
|
||||
}
|
||||
matchCount++
|
||||
}
|
||||
}
|
||||
if matchCount == len(cond) {
|
||||
found = true
|
||||
results = append(results, member)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user