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

fix group member permission error.

This commit is contained in:
Mrs4s 2020-07-09 10:04:05 +08:00
parent 2289b05764
commit 1afa9f801f
5 changed files with 29 additions and 14 deletions

View File

@ -16,6 +16,5 @@ qq-android协议的golang实现 移植于Mirai
| 群消息接受 |完成| | 群消息接受 |完成|
| 群消息发送 | 50% (仅支持 文本/图片/表情)| | 群消息发送 | 50% (仅支持 文本/图片/表情)|
| QQ各种事件 | 正在做, 已支持 群内禁言/群内消息撤回 | | QQ各种事件 | 正在做, 已支持 群内禁言/群内消息撤回 |
| Cookies相关 | 咕咕|
| MiraiGo文档 | 咕咕| | MiraiGo文档 | 咕咕|
| QQ协议说明文档| 自用整理 有空了应该会做| | QQ协议说明文档| 自用整理 有空了应该会做|

View File

@ -407,9 +407,9 @@ func (pkt *TroopMemberInfo) ReadFrom(r *JceReader) {
pkt.MemberLevel = r.ReadInt64(14) pkt.MemberLevel = r.ReadInt64(14)
pkt.JoinTime = r.ReadInt64(15) pkt.JoinTime = r.ReadInt64(15)
pkt.LastSpeakTime = r.ReadInt64(16) pkt.LastSpeakTime = r.ReadInt64(16)
pkt.Flag = r.ReadInt64(18)
pkt.SpecialTitle = r.ReadString(23) pkt.SpecialTitle = r.ReadString(23)
pkt.SpecialTitleExpireTime = r.ReadInt64(24) pkt.SpecialTitleExpireTime = r.ReadInt64(24)
pkt.Job = r.ReadString(25)
} }
func (pkt *PushMessageInfo) ReadFrom(r *JceReader) { func (pkt *PushMessageInfo) ReadFrom(r *JceReader) {

View File

@ -264,9 +264,9 @@ func (c *QQClient) GetGroupList() ([]*GroupInfo, error) {
return r, nil return r, nil
} }
func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]GroupMemberInfo, error) { func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]*GroupMemberInfo, error) {
var nextUin int64 var nextUin int64
var list []GroupMemberInfo var list []*GroupMemberInfo
for { for {
data, err := c.sendAndWait(c.buildGroupMemberListRequestPacket(group.Uin, group.Code, nextUin)) data, err := c.sendAndWait(c.buildGroupMemberListRequestPacket(group.Uin, group.Code, nextUin))
if err != nil { if err != nil {
@ -274,6 +274,12 @@ func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]GroupMemberInfo, error)
} }
rsp := data.(groupMemberListResponse) rsp := data.(groupMemberListResponse)
nextUin = rsp.NextUin nextUin = rsp.NextUin
for _, m := range rsp.list {
if m.Uin == group.OwnerUin {
m.Permission = Owner
break
}
}
list = append(list, rsp.list...) list = append(list, rsp.list...)
if nextUin == 0 { if nextUin == 0 {
return list, nil return list, nil
@ -305,7 +311,7 @@ func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo {
for _, m := range g.Members { for _, m := range g.Members {
f := m f := m
if f.Uin == uin { if f.Uin == uin {
return &f return f
} }
} }
return nil return nil

View File

@ -224,7 +224,7 @@ func decodeGroupListResponse(c *QQClient, seq uint16, payload []byte) (interface
Code: g.GroupCode, Code: g.GroupCode,
Name: g.GroupName, Name: g.GroupName,
Memo: g.GroupMemo, Memo: g.GroupMemo,
OwnerUin: uint32(g.GroupOwnerUin), OwnerUin: g.GroupOwnerUin,
MemberCount: uint16(g.MemberNum), MemberCount: uint16(g.MemberNum),
MaxMemberCount: uint16(g.MaxGroupMemberNum), MaxMemberCount: uint16(g.MaxGroupMemberNum),
}) })
@ -241,9 +241,9 @@ func decodeGroupMemberListResponse(c *QQClient, seq uint16, payload []byte) (int
members := []jce.TroopMemberInfo{} members := []jce.TroopMemberInfo{}
r.ReadSlice(&members, 3) r.ReadSlice(&members, 3)
next := r.ReadInt64(4) next := r.ReadInt64(4)
var l []GroupMemberInfo var l []*GroupMemberInfo
for _, m := range members { for _, m := range members {
l = append(l, GroupMemberInfo{ l = append(l, &GroupMemberInfo{
Uin: m.MemberUin, Uin: m.MemberUin,
Nickname: m.Nick, Nickname: m.Nick,
CardName: m.Name, CardName: m.Name,
@ -252,7 +252,12 @@ func decodeGroupMemberListResponse(c *QQClient, seq uint16, payload []byte) (int
LastSpeakTime: m.LastSpeakTime, LastSpeakTime: m.LastSpeakTime,
SpecialTitle: m.SpecialTitle, SpecialTitle: m.SpecialTitle,
SpecialTitleExpireTime: m.SpecialTitleExpireTime, SpecialTitleExpireTime: m.SpecialTitleExpireTime,
Job: m.Job, Permission: func() MemberPermission {
if m.Flag == 1 {
return Administrator
}
return Member
}(),
}) })
} }
return groupMemberListResponse{ return groupMemberListResponse{

View File

@ -9,6 +9,8 @@ var (
type ( type (
LoginError int LoginError int
MemberPermission int
LoginResponse struct { LoginResponse struct {
Success bool Success bool
Error LoginError Error LoginError
@ -41,10 +43,10 @@ type (
Code int64 Code int64
Name string Name string
Memo string Memo string
OwnerUin uint32 OwnerUin int64
MemberCount uint16 MemberCount uint16
MaxMemberCount uint16 MaxMemberCount uint16
Members []GroupMemberInfo Members []*GroupMemberInfo
} }
GroupMemberInfo struct { GroupMemberInfo struct {
@ -56,7 +58,7 @@ type (
LastSpeakTime int64 LastSpeakTime int64
SpecialTitle string SpecialTitle string
SpecialTitleExpireTime int64 SpecialTitleExpireTime int64
Job string Permission MemberPermission
} }
GroupMuteEvent struct { GroupMuteEvent struct {
@ -76,7 +78,7 @@ type (
groupMemberListResponse struct { groupMemberListResponse struct {
NextUin int64 NextUin int64
list []GroupMemberInfo list []*GroupMemberInfo
} }
groupImageUploadResponse struct { groupImageUploadResponse struct {
@ -93,8 +95,11 @@ type (
const ( const (
NeedCaptcha LoginError = 1 NeedCaptcha LoginError = 1
DeviceLockError = 2
OtherLoginError = 3 OtherLoginError = 3
UnsafeDeviceError = 4 UnsafeDeviceError = 4
UnknownLoginError = -1 UnknownLoginError = -1
Owner MemberPermission = iota
Administrator
Member
) )