From 16bfabcd28d7450a3ff56c1740e1645f8279fe40 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 16 Jul 2020 19:10:08 +0800 Subject: [PATCH] supported solve group invited request. --- README.md | 2 +- client/client.go | 14 ++++++++++---- client/decoders.go | 9 +++++---- client/entities.go | 14 ++++++++++++-- client/events.go | 6 +++--- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 6a7a1566..b9d17f66 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ qq-android协议的golang实现 移植于Mirai - [x] 获取/刷新群成员列表 - [x] 获取/刷新好友列表 - [ ] 获取/刷新讨论组列表 -- [ ] 处理加群请求 +- [x] 处理加群请求 - [ ] 处理好友请求 - [ ] 撤回群消息 - [ ] 群公告设置 diff --git a/client/client.go b/client/client.go index 1b1dc56a..82d0ae66 100644 --- a/client/client.go +++ b/client/client.go @@ -344,9 +344,15 @@ func (c *QQClient) FindGroup(code int64) *GroupInfo { return nil } -func (c *QQClient) SolveGroupJoinRequest(req *UserJoinGroupRequest, accept bool) { - _, pkt := c.buildSystemMsgGroupActionPacket(req.RequestId, req.RequesterUin, req.GroupCode, false, accept, false) - _ = c.send(pkt) +func (c *QQClient) SolveGroupJoinRequest(i interface{}, accept bool) { + switch req := i.(type) { + case *UserJoinGroupRequest: + _, pkt := c.buildSystemMsgGroupActionPacket(req.RequestId, req.RequesterUin, req.GroupCode, false, accept, false) + _ = c.send(pkt) + case *GroupInvitedRequest: + _, pkt := c.buildSystemMsgGroupActionPacket(req.RequestId, req.InvitorUin, req.GroupCode, true, accept, false) + _ = c.send(pkt) + } } func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo { @@ -359,7 +365,7 @@ func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo { return nil } -func (g *GroupInfo) RemoveMember(uin int64) { +func (g *GroupInfo) removeMember(uin int64) { if g.memLock == nil { g.memLock = new(sync.Mutex) } diff --git a/client/decoders.go b/client/decoders.go index f367a92f..01243f71 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -470,7 +470,7 @@ func decodeOnlinePushTransPacket(c *QQClient, _ uint16, payload []byte) (interfa }) case 0x82: if m := g.FindMember(target); m != nil { - g.RemoveMember(m.Uin) + g.removeMember(m.Uin) c.dispatchMemberLeaveEvent(&MemberLeaveGroupEvent{ Group: g, Member: m, @@ -478,7 +478,7 @@ func decodeOnlinePushTransPacket(c *QQClient, _ uint16, payload []byte) (interfa } case 0x83: if m := g.FindMember(target); m != nil { - g.RemoveMember(m.Uin) + g.removeMember(m.Uin) c.dispatchMemberLeaveEvent(&MemberLeaveGroupEvent{ Group: g, Member: m, @@ -546,12 +546,13 @@ func decodeSystemMsgGroupPacket(c *QQClient, _ uint16, payload []byte) (interfac client: c, }) case 1: // 被邀请 - c.dispatchGroupInvitedEvent(&GroupInvitedEvent{ - EventId: st.MsgSeq, + c.dispatchGroupInvitedEvent(&GroupInvitedRequest{ + RequestId: st.MsgSeq, InvitorUin: st.Msg.ActionUin, InvitorNick: st.Msg.ActionUinNick, GroupCode: st.Msg.GroupCode, GroupName: st.Msg.GroupName, + client: c, }) } } diff --git a/client/entities.go b/client/entities.go index 7c703540..31dd7c47 100644 --- a/client/entities.go +++ b/client/entities.go @@ -104,12 +104,14 @@ type ( NewPermission MemberPermission } - GroupInvitedEvent struct { - EventId int64 + GroupInvitedRequest struct { + RequestId int64 InvitorUin int64 InvitorNick string GroupCode int64 GroupName string + + client *QQClient } UserJoinGroupRequest struct { @@ -177,3 +179,11 @@ func (r *UserJoinGroupRequest) Accept() { func (r *UserJoinGroupRequest) Reject() { r.client.SolveGroupJoinRequest(r, false) } + +func (r *GroupInvitedRequest) Accept() { + r.client.SolveGroupJoinRequest(r, true) +} + +func (r *GroupInvitedRequest) Reject() { + r.client.SolveGroupJoinRequest(r, false) +} diff --git a/client/events.go b/client/events.go index 6f6f9856..a9524eec 100644 --- a/client/events.go +++ b/client/events.go @@ -16,7 +16,7 @@ type eventHandlers struct { memberJoinedHandlers []func(*QQClient, *MemberJoinGroupEvent) memberLeavedHandlers []func(*QQClient, *MemberLeaveGroupEvent) permissionChangedHandlers []func(*QQClient, *MemberPermissionChangedEvent) - groupInvitedHandlers []func(*QQClient, *GroupInvitedEvent) + groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest) joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest) friendRequestHandlers []func(*QQClient, *NewFriendRequest) groupMessageReceiptHandlers sync.Map @@ -70,7 +70,7 @@ func (c *QQClient) OnGroupMessageRecalled(f func(*QQClient, *GroupMessageRecalle c.eventHandlers.groupRecalledHandlers = append(c.eventHandlers.groupRecalledHandlers, f) } -func (c *QQClient) OnGroupInvited(f func(*QQClient, *GroupInvitedEvent)) { +func (c *QQClient) OnGroupInvited(f func(*QQClient, *GroupInvitedRequest)) { c.eventHandlers.groupInvitedHandlers = append(c.eventHandlers.groupInvitedHandlers, f) } @@ -213,7 +213,7 @@ func (c *QQClient) dispatchGroupMessageReceiptEvent(e *groupMessageReceiptEvent) }) } -func (c *QQClient) dispatchGroupInvitedEvent(e *GroupInvitedEvent) { +func (c *QQClient) dispatchGroupInvitedEvent(e *GroupInvitedRequest) { if e == nil { return }