1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

supported solve group invited request.

This commit is contained in:
Mrs4s 2020-07-16 19:10:08 +08:00
parent f96dcb7e9f
commit 16bfabcd28
5 changed files with 31 additions and 14 deletions

View File

@ -48,7 +48,7 @@ qq-android协议的golang实现 移植于Mirai
- [x] 获取/刷新群成员列表
- [x] 获取/刷新好友列表
- [ ] 获取/刷新讨论组列表
- [ ] 处理加群请求
- [x] 处理加群请求
- [ ] 处理好友请求
- [ ] 撤回群消息
- [ ] 群公告设置

View File

@ -344,9 +344,15 @@ func (c *QQClient) FindGroup(code int64) *GroupInfo {
return nil
}
func (c *QQClient) SolveGroupJoinRequest(req *UserJoinGroupRequest, accept bool) {
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)
}

View File

@ -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,
})
}
}

View File

@ -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)
}

View File

@ -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
}