From 967e85ad9d0ee3f2dfad3aa259b89be1ba4ec5b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E5=90=83=E7=82=B9=E8=8B=B9=E6=9E=9C?= <73388495+eatmoreapple@users.noreply.github.com> Date: Sat, 10 Dec 2022 16:07:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BE=A4=E6=88=90=E5=91=98?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E5=8A=9F=E8=83=BD=20(#145)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- message.go | 21 +++++---------------- relations.go | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 16 deletions(-) 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 获取群组数量