diff --git a/relations.go b/relations.go index 9aac6c1..362eec4 100644 --- a/relations.go +++ b/relations.go @@ -3,7 +3,6 @@ package openwechat import ( "fmt" "os" - "strings" "time" ) @@ -336,17 +335,4 @@ func (m Mps) Search(limit int, condFuncList ...func(group *Mp) bool) (results Mp return } -// 判断是否为好友 -func isFriend(user User) bool { - return !isGroup(user) && strings.HasPrefix(user.UserName, "@") && user.VerifyFlag == 0 -} -// 判断是否为群组 -func isGroup(user User) bool { - return strings.HasPrefix(user.UserName, "@@") && user.VerifyFlag == 0 -} - -// 判断是否为公众号 -func isMP(user User) bool { - return user.VerifyFlag == 8 || user.VerifyFlag == 24 || user.VerifyFlag == 136 -} diff --git a/user.go b/user.go index c5eaaa1..f6fb6b6 100644 --- a/user.go +++ b/user.go @@ -6,6 +6,7 @@ import ( "fmt" "net/http" "os" + "strings" ) type User struct { @@ -118,6 +119,21 @@ func (u *User) Detail() (*User, error) { return user, nil } +// 判断是否为好友 +func (u *User) IsFriend() bool { + return !u.IsGroup() && strings.HasPrefix(u.UserName, "@") && u.VerifyFlag == 0 +} + +// 判断是否为群组 +func (u *User) IsGroup() bool { + return strings.HasPrefix(u.UserName, "@@") && u.VerifyFlag == 0 +} + +// 判断是否为公众号 +func (u *User) IsMP() bool { + return u.VerifyFlag == 8 || u.VerifyFlag == 24 || u.VerifyFlag == 136 +} + // 自己,当前登录用户对象 type Self struct { *User @@ -214,70 +230,28 @@ func (s *Self) Mps(update ...bool) (Mps, error) { // 更新好友处理 func (s *Self) updateFriends(update ...bool) error { - var isUpdate bool - if len(update) > 0 { - isUpdate = update[len(update)-1] + if _, err := s.Members(update...); err != nil { + return err } - if isUpdate || s.members == nil { - if err := s.updateMembers(); err != nil { - return err - } - } - var friends Friends - for _, member := range s.members { - if isFriend(*member) { - friend := &Friend{member} - friend.Self = s - friends = append(friends, friend) - } - } - s.friends = friends + s.friends = s.members.Friends() return nil } // 更新群组处理 func (s *Self) updateGroups(update ...bool) error { - var isUpdate bool - if len(update) > 0 { - isUpdate = update[len(update)-1] + if _, err := s.Members(update...); err != nil { + return err } - if isUpdate || s.members == nil { - if err := s.updateMembers(); err != nil { - return err - } - } - var groups Groups - for _, member := range s.members { - if isGroup(*member) { - group := &Group{member} - group.Self = s - groups = append(groups, group) - } - } - s.groups = groups + s.groups = s.members.Groups() return nil } // 更新公众号处理 func (s *Self) updateMps(update ...bool) error { - var isUpdate bool - if len(update) > 0 { - isUpdate = update[len(update)-1] + if _, err := s.Members(update...); err != nil { + return err } - if isUpdate || s.members == nil { - if err := s.updateMembers(); err != nil { - return err - } - } - var mps Mps - for _, member := range s.members { - if isMP(*member) { - mp := &Mp{member} - mp.Self = s - mps = append(mps, mp) - } - } - s.mps = mps + s.mps = s.members.MPs() return nil } @@ -527,6 +501,39 @@ func (m Members) Search(limit int, condFuncList ...func(user *User) bool) (resul return } +func (m Members) Friends() Friends { + friends := make(Friends, 0) + for _, mb := range m { + if mb.IsFriend() { + friend := &Friend{mb} + friends = append(friends, friend) + } + } + return friends +} + +func (m Members) Groups() Groups { + groups := make(Groups, 0) + for _, mb := range m { + if mb.IsGroup() { + group := &Group{mb} + groups = append(groups, group) + } + } + return groups +} + +func (m Members) MPs() Mps { + mps := make(Mps, 0) + for _, mb := range m { + if mb.IsMP() { + mp := &Mp{mb} + mps = append(mps, mp) + } + } + return mps +} + // 这里为了兼容Desktop版本找不到文件传输助手的问题 // 文件传输助手的微信身份标识符永远是filehelper // 这种形式的对象可能缺少一些其他属性