From 1afa9f801fdf343b13cc6fb9c1775a318c675a1b Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 9 Jul 2020 10:04:05 +0800 Subject: [PATCH] fix group member permission error. --- README.md | 1 - binary/jce/structs.go | 2 +- client/client.go | 12 +++++++++--- client/decoders.go | 13 +++++++++---- client/entities.go | 15 ++++++++++----- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index a882401d..e22bbd4b 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,5 @@ qq-android协议的golang实现 移植于Mirai | 群消息接受 |完成| | 群消息发送 | 50% (仅支持 文本/图片/表情)| | QQ各种事件 | 正在做, 已支持 群内禁言/群内消息撤回 | -| Cookies相关 | 咕咕| | MiraiGo文档 | 咕咕| | QQ协议说明文档| 自用整理 有空了应该会做| \ No newline at end of file diff --git a/binary/jce/structs.go b/binary/jce/structs.go index 6796645e..41e737e2 100644 --- a/binary/jce/structs.go +++ b/binary/jce/structs.go @@ -407,9 +407,9 @@ func (pkt *TroopMemberInfo) ReadFrom(r *JceReader) { pkt.MemberLevel = r.ReadInt64(14) pkt.JoinTime = r.ReadInt64(15) pkt.LastSpeakTime = r.ReadInt64(16) + pkt.Flag = r.ReadInt64(18) pkt.SpecialTitle = r.ReadString(23) pkt.SpecialTitleExpireTime = r.ReadInt64(24) - pkt.Job = r.ReadString(25) } func (pkt *PushMessageInfo) ReadFrom(r *JceReader) { diff --git a/client/client.go b/client/client.go index 1d65ab65..2bcb37b5 100644 --- a/client/client.go +++ b/client/client.go @@ -264,9 +264,9 @@ func (c *QQClient) GetGroupList() ([]*GroupInfo, error) { return r, nil } -func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]GroupMemberInfo, error) { +func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]*GroupMemberInfo, error) { var nextUin int64 - var list []GroupMemberInfo + var list []*GroupMemberInfo for { data, err := c.sendAndWait(c.buildGroupMemberListRequestPacket(group.Uin, group.Code, nextUin)) if err != nil { @@ -274,6 +274,12 @@ func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]GroupMemberInfo, error) } rsp := data.(groupMemberListResponse) nextUin = rsp.NextUin + for _, m := range rsp.list { + if m.Uin == group.OwnerUin { + m.Permission = Owner + break + } + } list = append(list, rsp.list...) if nextUin == 0 { return list, nil @@ -305,7 +311,7 @@ func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo { for _, m := range g.Members { f := m if f.Uin == uin { - return &f + return f } } return nil diff --git a/client/decoders.go b/client/decoders.go index de0d54c3..23ffd5ee 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -224,7 +224,7 @@ func decodeGroupListResponse(c *QQClient, seq uint16, payload []byte) (interface Code: g.GroupCode, Name: g.GroupName, Memo: g.GroupMemo, - OwnerUin: uint32(g.GroupOwnerUin), + OwnerUin: g.GroupOwnerUin, MemberCount: uint16(g.MemberNum), MaxMemberCount: uint16(g.MaxGroupMemberNum), }) @@ -241,9 +241,9 @@ func decodeGroupMemberListResponse(c *QQClient, seq uint16, payload []byte) (int members := []jce.TroopMemberInfo{} r.ReadSlice(&members, 3) next := r.ReadInt64(4) - var l []GroupMemberInfo + var l []*GroupMemberInfo for _, m := range members { - l = append(l, GroupMemberInfo{ + l = append(l, &GroupMemberInfo{ Uin: m.MemberUin, Nickname: m.Nick, CardName: m.Name, @@ -252,7 +252,12 @@ func decodeGroupMemberListResponse(c *QQClient, seq uint16, payload []byte) (int LastSpeakTime: m.LastSpeakTime, SpecialTitle: m.SpecialTitle, SpecialTitleExpireTime: m.SpecialTitleExpireTime, - Job: m.Job, + Permission: func() MemberPermission { + if m.Flag == 1 { + return Administrator + } + return Member + }(), }) } return groupMemberListResponse{ diff --git a/client/entities.go b/client/entities.go index f050d95b..cf7f028d 100644 --- a/client/entities.go +++ b/client/entities.go @@ -9,6 +9,8 @@ var ( type ( LoginError int + MemberPermission int + LoginResponse struct { Success bool Error LoginError @@ -41,10 +43,10 @@ type ( Code int64 Name string Memo string - OwnerUin uint32 + OwnerUin int64 MemberCount uint16 MaxMemberCount uint16 - Members []GroupMemberInfo + Members []*GroupMemberInfo } GroupMemberInfo struct { @@ -56,7 +58,7 @@ type ( LastSpeakTime int64 SpecialTitle string SpecialTitleExpireTime int64 - Job string + Permission MemberPermission } GroupMuteEvent struct { @@ -76,7 +78,7 @@ type ( groupMemberListResponse struct { NextUin int64 - list []GroupMemberInfo + list []*GroupMemberInfo } groupImageUploadResponse struct { @@ -93,8 +95,11 @@ type ( const ( NeedCaptcha LoginError = 1 - DeviceLockError = 2 OtherLoginError = 3 UnsafeDeviceError = 4 UnknownLoginError = -1 + + Owner MemberPermission = iota + Administrator + Member )