diff --git a/message.go b/message.go index 7a2ded4..20bd9a2 100644 --- a/message.go +++ b/message.go @@ -91,26 +91,15 @@ func (m *Message) SenderInGroup() (*User, error) { } return nil, errors.New("can not found sender from system message") } - group, err := m.Sender() + user, err := m.Sender() if err != nil { return nil, err } - if group.IsFriend() { - return group, nil + if user.IsFriend() { + return user, nil } - // 如果群聊的群成员是空的, 则从服务器获取 - if group.MemberList.Count() == 0 { - // 更新群详情 - if err = group.Detail(); err != nil { - return nil, err - } - } - users := group.MemberList.SearchByUserName(1, m.senderInGroupUserName) - if users == nil { - return nil, ErrNoSuchUserFoundError - } - users.init(m.Bot.self) - return users.First(), nil + group := &Group{user} + return group.SearchMemberByUsername(m.senderInGroupUserName) } // Receiver 获取消息的接收者 diff --git a/relations.go b/relations.go index f7c2d84..1240836 100644 --- a/relations.go +++ b/relations.go @@ -195,6 +195,28 @@ func (g *Group) Rename(name string) error { return g.Self.RenameGroup(g, name) } +// SearchMemberByUsername 根据用户名查找群成员 +func (g *Group) SearchMemberByUsername(username string) (*User, error) { + if g.MemberList.Count() == 0 { + if _, err := g.Members(); err != nil { + return nil, err + } + } + members := g.MemberList.SearchByUserName(1, username) + // 如果此时本地查不到, 那么该成员可能是新加入的 + if members.Count() == 0 { + if _, err := g.Members(); err != nil { + return nil, err + } + } + // 再次尝试获取 + members = g.MemberList.SearchByUserName(1, username) + if members.Count() == 0 { + return nil, ErrNoSuchUserFoundError + } + return members.First(), nil +} + type Groups []*Group // Count 获取群组数量