mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-05 03:23:50 +08:00
Merge
sync
This commit is contained in:
commit
ecd8cc4f71
@ -763,6 +763,9 @@ func (c *QQClient) GetGroupMembers(group *GroupInfo) ([]*GroupMemberInfo, error)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if data == nil {
|
||||||
|
return nil, errors.New("rsp is nil")
|
||||||
|
}
|
||||||
rsp := data.(groupMemberListResponse)
|
rsp := data.(groupMemberListResponse)
|
||||||
nextUin = rsp.NextUin
|
nextUin = rsp.NextUin
|
||||||
for _, m := range rsp.list {
|
for _, m := range rsp.list {
|
||||||
@ -829,24 +832,6 @@ func (c *QQClient) SolveFriendRequest(req *NewFriendRequest, accept bool) {
|
|||||||
_ = c.send(pkt)
|
_ = c.send(pkt)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupInfo) SelfPermission() MemberPermission {
|
|
||||||
return g.FindMember(g.client.Uin).Permission
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) AdministratorOrOwner() bool {
|
|
||||||
return g.SelfPermission() == Administrator || g.SelfPermission() == Owner
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo {
|
|
||||||
for _, m := range g.Members {
|
|
||||||
f := m
|
|
||||||
if f.Uin == uin {
|
|
||||||
return f
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *QQClient) getCookies() string {
|
func (c *QQClient) getCookies() string {
|
||||||
return fmt.Sprintf("uin=o%d; skey=%s;", c.Uin, c.sigInfo.sKey)
|
return fmt.Sprintf("uin=o%d; skey=%s;", c.Uin, c.sigInfo.sKey)
|
||||||
}
|
}
|
||||||
@ -914,14 +899,14 @@ func (c *QQClient) kickGroupMember(groupCode, memberUin int64, msg string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupInfo) removeMember(uin int64) {
|
func (g *GroupInfo) removeMember(uin int64) {
|
||||||
g.memLock.Lock()
|
g.Update(func(info *GroupInfo) {
|
||||||
defer g.memLock.Unlock()
|
for i, m := range info.Members {
|
||||||
for i, m := range g.Members {
|
if m.Uin == uin {
|
||||||
if m.Uin == uin {
|
info.Members = append(info.Members[:i], info.Members[i+1:]...)
|
||||||
g.Members = append(g.Members[:i], g.Members[i+1:]...)
|
break
|
||||||
break
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *QQClient) connect() error {
|
func (c *QQClient) connect() error {
|
||||||
@ -1066,7 +1051,7 @@ func (c *QQClient) netLoop() {
|
|||||||
go func() {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if pan := recover(); pan != nil {
|
if pan := recover(); pan != nil {
|
||||||
c.Error("panic on decoder: %v", pan)
|
c.Error("panic on decoder %v : %v", pkt.CommandName, pan)
|
||||||
//fmt.Println("panic on decoder:", pan)
|
//fmt.Println("panic on decoder:", pan)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -29,8 +29,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
groupJoinLock = new(sync.Mutex)
|
groupJoinLock sync.Mutex
|
||||||
groupLeaveLock = new(sync.Mutex)
|
groupLeaveLock sync.Mutex
|
||||||
)
|
)
|
||||||
|
|
||||||
// wtlogin.login
|
// wtlogin.login
|
||||||
@ -228,7 +228,9 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
|
|||||||
Permission: Member,
|
Permission: Member,
|
||||||
Group: group,
|
Group: group,
|
||||||
}
|
}
|
||||||
group.Members = append(group.Members, mem)
|
group.Update(func(info *GroupInfo) {
|
||||||
|
info.Members = append(info.Members, mem)
|
||||||
|
})
|
||||||
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
||||||
Group: group,
|
Group: group,
|
||||||
Member: mem,
|
Member: mem,
|
||||||
@ -459,6 +461,7 @@ func decodeGroupInfoResponse(c *QQClient, _ uint16, payload []byte) (interface{}
|
|||||||
OwnerUin: int64(*info.GroupInfo.GroupOwner),
|
OwnerUin: int64(*info.GroupInfo.GroupOwner),
|
||||||
MemberCount: uint16(*info.GroupInfo.GroupMemberNum),
|
MemberCount: uint16(*info.GroupInfo.GroupMemberNum),
|
||||||
MaxMemberCount: uint16(*info.GroupInfo.GroupMemberMaxNum),
|
MaxMemberCount: uint16(*info.GroupInfo.GroupMemberMaxNum),
|
||||||
|
Members: []*GroupMemberInfo{},
|
||||||
client: c,
|
client: c,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -70,8 +70,8 @@ type (
|
|||||||
MaxMemberCount uint16
|
MaxMemberCount uint16
|
||||||
Members []*GroupMemberInfo
|
Members []*GroupMemberInfo
|
||||||
|
|
||||||
client *QQClient
|
client *QQClient
|
||||||
memLock sync.Mutex
|
lock sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
GroupMemberInfo struct {
|
GroupMemberInfo struct {
|
||||||
@ -285,6 +285,42 @@ func (g *GroupInfo) Quit() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) SelfPermission() MemberPermission {
|
||||||
|
return g.FindMember(g.client.Uin).Permission
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) AdministratorOrOwner() bool {
|
||||||
|
return g.SelfPermission() == Administrator || g.SelfPermission() == Owner
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo {
|
||||||
|
r := g.Read(func(info *GroupInfo) interface{} {
|
||||||
|
for _, m := range info.Members {
|
||||||
|
f := m
|
||||||
|
if f.Uin == uin {
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if r == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return r.(*GroupMemberInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) Update(f func(*GroupInfo)) {
|
||||||
|
g.lock.Lock()
|
||||||
|
defer g.lock.Unlock()
|
||||||
|
f(g)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) Read(f func(*GroupInfo) interface{}) interface{} {
|
||||||
|
g.lock.RLock()
|
||||||
|
defer g.lock.RUnlock()
|
||||||
|
return f(g)
|
||||||
|
}
|
||||||
|
|
||||||
func (m *GroupMemberInfo) DisplayName() string {
|
func (m *GroupMemberInfo) DisplayName() string {
|
||||||
if m.CardName == "" {
|
if m.CardName == "" {
|
||||||
return m.Nickname
|
return m.Nickname
|
||||||
|
@ -304,8 +304,8 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
|
|||||||
if info == nil {
|
if info == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
group.Members = append(group.Members, mem)
|
|
||||||
mem = info
|
mem = info
|
||||||
|
group.Members = append(group.Members, mem)
|
||||||
go c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
go c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
||||||
Group: group,
|
Group: group,
|
||||||
Member: info,
|
Member: info,
|
||||||
|
@ -294,15 +294,15 @@ func ToProtoElems(elems []IMessageElement, generalFlags bool) (r []*msg.Elem) {
|
|||||||
CustomFace: &msg.CustomFace{
|
CustomFace: &msg.CustomFace{
|
||||||
FilePath: e.Filename,
|
FilePath: e.Filename,
|
||||||
Md5: e.Md5,
|
Md5: e.Md5,
|
||||||
Size: e.Size,
|
//Size: e.Size,
|
||||||
Flag: make([]byte, 4),
|
Flag: make([]byte, 4),
|
||||||
OldData: imgOld,
|
OldData: imgOld,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
case *GroupImageElement:
|
case *GroupImageElement:
|
||||||
r = append(r, &msg.Elem{
|
r = append(r, &msg.Elem{
|
||||||
CustomFace: &msg.CustomFace{
|
CustomFace: &msg.CustomFace{
|
||||||
FileType: 66,
|
//FileType: 66,
|
||||||
Useful: 1,
|
Useful: 1,
|
||||||
Origin: 1,
|
Origin: 1,
|
||||||
FileId: int32(e.FileId),
|
FileId: int32(e.FileId),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user