From 6da8636424fc3e6ebb5a6d186e3ee5406d46735f Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Sun, 4 Oct 2020 12:52:22 +0800 Subject: [PATCH] add: MemberCardUpdatedEvent. --- client/entities.go | 6 ++++++ client/events.go | 16 ++++++++++++++++ client/global.go | 15 +++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/client/entities.go b/client/entities.go index dac40505..dd1bbb98 100644 --- a/client/entities.go +++ b/client/entities.go @@ -119,6 +119,12 @@ type ( Member *GroupMemberInfo } + MemberCardUpdatedEvent struct { + Group *GroupInfo + OldCard string + Member *GroupMemberInfo + } + IGroupNotifyEvent interface { From() int64 Content() string diff --git a/client/events.go b/client/events.go index 38ad020c..4de6607a 100644 --- a/client/events.go +++ b/client/events.go @@ -17,6 +17,7 @@ type eventHandlers struct { leaveGroupHandlers []func(*QQClient, *GroupLeaveEvent) memberJoinedHandlers []func(*QQClient, *MemberJoinGroupEvent) memberLeavedHandlers []func(*QQClient, *MemberLeaveGroupEvent) + memberCardUpdatedHandlers []func(*QQClient, *MemberCardUpdatedEvent) permissionChangedHandlers []func(*QQClient, *MemberPermissionChangedEvent) groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest) joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest) @@ -69,6 +70,10 @@ func (c *QQClient) OnGroupMemberLeaved(f func(*QQClient, *MemberLeaveGroupEvent) c.eventHandlers.memberLeavedHandlers = append(c.eventHandlers.memberLeavedHandlers, f) } +func (c *QQClient) OnGroupMemberCardUpdated(f func(*QQClient, *MemberCardUpdatedEvent)) { + c.eventHandlers.memberCardUpdatedHandlers = append(c.eventHandlers.memberCardUpdatedHandlers, f) +} + func (c *QQClient) OnGroupMemberPermissionChanged(f func(*QQClient, *MemberPermissionChangedEvent)) { c.eventHandlers.permissionChangedHandlers = append(c.eventHandlers.permissionChangedHandlers, f) } @@ -237,6 +242,17 @@ func (c *QQClient) dispatchMemberLeaveEvent(e *MemberLeaveGroupEvent) { } } +func (c *QQClient) dispatchMemberCardUpdatedEvent(e *MemberCardUpdatedEvent) { + if e == nil { + return + } + for _, f := range c.eventHandlers.memberCardUpdatedHandlers { + cover(func() { + f(c, e) + }) + } +} + func (c *QQClient) dispatchPermissionChanged(e *MemberPermissionChangedEvent) { if e == nil { return diff --git a/client/global.go b/client/global.go index c474d90e..e251e365 100644 --- a/client/global.go +++ b/client/global.go @@ -311,6 +311,21 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { Member: info, }) } + if m.Head.GroupInfo != nil && m.Head.GroupInfo.GroupCard != "" && mem.CardName != m.Head.GroupInfo.GroupCard { + old := mem.CardName + if mem.Nickname == m.Head.GroupInfo.GroupCard { + mem.CardName = "" + } else { + mem.CardName = m.Head.GroupInfo.GroupCard + } + if old != mem.CardName { + go c.dispatchMemberCardUpdatedEvent(&MemberCardUpdatedEvent{ + Group: group, + OldCard: old, + Member: mem, + }) + } + } sender = &message.Sender{ Uin: mem.Uin, Nickname: mem.Nickname,