mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
move structs.
This commit is contained in:
parent
7312c96e82
commit
7dca259315
@ -1,9 +1,6 @@
|
|||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/Mrs4s/MiraiGo/binary/jce"
|
"github.com/Mrs4s/MiraiGo/binary/jce"
|
||||||
"github.com/Mrs4s/MiraiGo/message"
|
"github.com/Mrs4s/MiraiGo/message"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -65,35 +62,6 @@ type (
|
|||||||
List []*FriendInfo
|
List []*FriendInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
GroupInfo struct {
|
|
||||||
Uin int64
|
|
||||||
Code int64
|
|
||||||
Name string
|
|
||||||
Memo string
|
|
||||||
OwnerUin int64
|
|
||||||
MemberCount uint16
|
|
||||||
MaxMemberCount uint16
|
|
||||||
Members []*GroupMemberInfo
|
|
||||||
|
|
||||||
client *QQClient
|
|
||||||
lastMsgSeq int64
|
|
||||||
lock sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
GroupMemberInfo struct {
|
|
||||||
Group *GroupInfo
|
|
||||||
Uin int64
|
|
||||||
Gender byte
|
|
||||||
Nickname string
|
|
||||||
CardName string
|
|
||||||
Level uint16
|
|
||||||
JoinTime int64
|
|
||||||
LastSpeakTime int64
|
|
||||||
SpecialTitle string
|
|
||||||
SpecialTitleExpireTime int64
|
|
||||||
Permission MemberPermission
|
|
||||||
}
|
|
||||||
|
|
||||||
GroupMuteEvent struct {
|
GroupMuteEvent struct {
|
||||||
GroupCode int64
|
GroupCode int64
|
||||||
OperatorUin int64
|
OperatorUin int64
|
||||||
@ -263,145 +231,6 @@ const (
|
|||||||
MacOS ClientProtocol = 4
|
MacOS ClientProtocol = 4
|
||||||
)
|
)
|
||||||
|
|
||||||
func (g *GroupInfo) UpdateName(newName string) {
|
|
||||||
if g.AdministratorOrOwner() && newName != "" && strings.Count(newName, "") <= 20 {
|
|
||||||
g.client.updateGroupName(g.Code, newName)
|
|
||||||
g.Name = newName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) UpdateMemo(newMemo string) {
|
|
||||||
if g.AdministratorOrOwner() {
|
|
||||||
g.client.updateGroupMemo(g.Code, newMemo)
|
|
||||||
g.Memo = newMemo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) UpdateGroupHeadPortrait(img []byte) {
|
|
||||||
if g.AdministratorOrOwner() {
|
|
||||||
_ = g.client.uploadGroupHeadPortrait(g.Uin, img)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) MuteAll(mute bool) {
|
|
||||||
if g.AdministratorOrOwner() {
|
|
||||||
g.client.groupMuteAll(g.Code, mute)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) Quit() {
|
|
||||||
if g.SelfPermission() != Owner {
|
|
||||||
g.client.quitGroup(g.Code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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{} {
|
|
||||||
return info.FindMemberWithoutLock(uin)
|
|
||||||
})
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return r.(*GroupMemberInfo)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupInfo) FindMemberWithoutLock(uin int64) *GroupMemberInfo {
|
|
||||||
for _, m := range g.Members {
|
|
||||||
f := m
|
|
||||||
if f.Uin == uin {
|
|
||||||
return f
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
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 {
|
|
||||||
if m.CardName == "" {
|
|
||||||
return m.Nickname
|
|
||||||
}
|
|
||||||
return m.CardName
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) EditCard(card string) {
|
|
||||||
if m.CardChangable() && len(card) <= 60 {
|
|
||||||
m.Group.client.editMemberCard(m.Group.Code, m.Uin, card)
|
|
||||||
m.CardName = card
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) Poke() {
|
|
||||||
m.Group.client.sendGroupPoke(m.Group.Code, m.Uin)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) SetAdmin(flag bool) {
|
|
||||||
if m.Group.OwnerUin == m.Group.client.Uin {
|
|
||||||
m.Group.client.setGroupAdmin(m.Group.Code, m.Uin, flag)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) EditSpecialTitle(title string) {
|
|
||||||
if m.Group.SelfPermission() == Owner && len(title) <= 18 {
|
|
||||||
m.Group.client.editMemberSpecialTitle(m.Group.Code, m.Uin, title)
|
|
||||||
m.SpecialTitle = title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) Kick(msg string, block bool) {
|
|
||||||
if m.Uin != m.Group.client.Uin && m.Manageable() {
|
|
||||||
m.Group.client.kickGroupMember(m.Group.Code, m.Uin, msg, block)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) Mute(time uint32) {
|
|
||||||
if m.Uin != m.Group.client.Uin && m.Manageable() {
|
|
||||||
if time < 2592000 {
|
|
||||||
m.Group.client.groupMute(m.Group.Code, m.Uin, time)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) Manageable() bool {
|
|
||||||
if m.Uin == m.Group.client.Uin {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
self := m.Group.SelfPermission()
|
|
||||||
if self == Member || m.Permission == Owner {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return m.Permission != Administrator || self == Owner
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *GroupMemberInfo) CardChangable() bool {
|
|
||||||
if m.Uin == m.Group.client.Uin {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
self := m.Group.SelfPermission()
|
|
||||||
if self == Member {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return m.Permission != Owner
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *UserJoinGroupRequest) Accept() {
|
func (r *UserJoinGroupRequest) Accept() {
|
||||||
r.client.SolveGroupJoinRequest(r, true, false, "")
|
r.client.SolveGroupJoinRequest(r, true, false, "")
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,39 @@ import (
|
|||||||
"github.com/Mrs4s/MiraiGo/protocol/packets"
|
"github.com/Mrs4s/MiraiGo/protocol/packets"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
GroupInfo struct {
|
||||||
|
Uin int64
|
||||||
|
Code int64
|
||||||
|
Name string
|
||||||
|
Memo string
|
||||||
|
OwnerUin int64
|
||||||
|
MemberCount uint16
|
||||||
|
MaxMemberCount uint16
|
||||||
|
Members []*GroupMemberInfo
|
||||||
|
|
||||||
|
client *QQClient
|
||||||
|
lastMsgSeq int64
|
||||||
|
lock sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupMemberInfo struct {
|
||||||
|
Group *GroupInfo
|
||||||
|
Uin int64
|
||||||
|
Gender byte
|
||||||
|
Nickname string
|
||||||
|
CardName string
|
||||||
|
Level uint16
|
||||||
|
JoinTime int64
|
||||||
|
LastSpeakTime int64
|
||||||
|
SpecialTitle string
|
||||||
|
SpecialTitleExpireTime int64
|
||||||
|
Permission MemberPermission
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -151,3 +184,142 @@ func decodeGroupInfoResponse(c *QQClient, _ uint16, payload []byte) (interface{}
|
|||||||
client: c,
|
client: c,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) UpdateName(newName string) {
|
||||||
|
if g.AdministratorOrOwner() && newName != "" && strings.Count(newName, "") <= 20 {
|
||||||
|
g.client.updateGroupName(g.Code, newName)
|
||||||
|
g.Name = newName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) UpdateMemo(newMemo string) {
|
||||||
|
if g.AdministratorOrOwner() {
|
||||||
|
g.client.updateGroupMemo(g.Code, newMemo)
|
||||||
|
g.Memo = newMemo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) UpdateGroupHeadPortrait(img []byte) {
|
||||||
|
if g.AdministratorOrOwner() {
|
||||||
|
_ = g.client.uploadGroupHeadPortrait(g.Uin, img)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) MuteAll(mute bool) {
|
||||||
|
if g.AdministratorOrOwner() {
|
||||||
|
g.client.groupMuteAll(g.Code, mute)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) Quit() {
|
||||||
|
if g.SelfPermission() != Owner {
|
||||||
|
g.client.quitGroup(g.Code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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{} {
|
||||||
|
return info.FindMemberWithoutLock(uin)
|
||||||
|
})
|
||||||
|
if r == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return r.(*GroupMemberInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupInfo) FindMemberWithoutLock(uin int64) *GroupMemberInfo {
|
||||||
|
for _, m := range g.Members {
|
||||||
|
f := m
|
||||||
|
if f.Uin == uin {
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
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 {
|
||||||
|
if m.CardName == "" {
|
||||||
|
return m.Nickname
|
||||||
|
}
|
||||||
|
return m.CardName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) EditCard(card string) {
|
||||||
|
if m.CardChangable() && len(card) <= 60 {
|
||||||
|
m.Group.client.editMemberCard(m.Group.Code, m.Uin, card)
|
||||||
|
m.CardName = card
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) Poke() {
|
||||||
|
m.Group.client.sendGroupPoke(m.Group.Code, m.Uin)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) SetAdmin(flag bool) {
|
||||||
|
if m.Group.OwnerUin == m.Group.client.Uin {
|
||||||
|
m.Group.client.setGroupAdmin(m.Group.Code, m.Uin, flag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) EditSpecialTitle(title string) {
|
||||||
|
if m.Group.SelfPermission() == Owner && len(title) <= 18 {
|
||||||
|
m.Group.client.editMemberSpecialTitle(m.Group.Code, m.Uin, title)
|
||||||
|
m.SpecialTitle = title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) Kick(msg string, block bool) {
|
||||||
|
if m.Uin != m.Group.client.Uin && m.Manageable() {
|
||||||
|
m.Group.client.kickGroupMember(m.Group.Code, m.Uin, msg, block)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) Mute(time uint32) {
|
||||||
|
if m.Uin != m.Group.client.Uin && m.Manageable() {
|
||||||
|
if time < 2592000 {
|
||||||
|
m.Group.client.groupMute(m.Group.Code, m.Uin, time)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) Manageable() bool {
|
||||||
|
if m.Uin == m.Group.client.Uin {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
self := m.Group.SelfPermission()
|
||||||
|
if self == Member || m.Permission == Owner {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return m.Permission != Administrator || self == Owner
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GroupMemberInfo) CardChangable() bool {
|
||||||
|
if m.Uin == m.Group.client.Uin {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
self := m.Group.SelfPermission()
|
||||||
|
if self == Member {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return m.Permission != Owner
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user