Save
This commit is contained in:
parent
80383c5bb8
commit
96253d24e3
@ -4,7 +4,6 @@ import "errors"
|
||||
|
||||
type GuildMember struct {
|
||||
AccountId string
|
||||
Username string
|
||||
Level int // 1: 会长, 2: 干部, 3: 成员
|
||||
}
|
||||
|
||||
@ -31,6 +30,16 @@ func (g *Guild) findMemberIndex(AccountId string) int {
|
||||
return -1
|
||||
}
|
||||
|
||||
// GetMember 获取成员
|
||||
func (g *Guild) GetMember(accountId string) (*GuildMember, error) {
|
||||
index := g.findMemberIndex(accountId)
|
||||
if index == -1 {
|
||||
return nil, errors.New("member not found")
|
||||
}
|
||||
|
||||
return &g.Members[index], nil
|
||||
}
|
||||
|
||||
// AddMember 添加成员
|
||||
func (g *Guild) AddMember(member GuildMember) error {
|
||||
if len(g.Members) >= g.MaxMembers {
|
||||
|
@ -53,7 +53,6 @@ func (gm *GuildMgr) ApplyToGuild(guildID int, applicantAccountId string) error {
|
||||
}
|
||||
|
||||
guild := gm.Guilds[guildID]
|
||||
// 获取即时人数, 是否需要锁
|
||||
if len(guild.Members) >= guild.MaxMembers {
|
||||
return errors.New("guild is full")
|
||||
}
|
||||
@ -85,7 +84,7 @@ func (gm *GuildMgr) ApproveApplication(guildID int, applicantAccountId string) e
|
||||
|
||||
for i, accountId := range pendingAccountIds {
|
||||
if accountId == applicantAccountId {
|
||||
newMember := GuildMember{AccountId: applicantAccountId, Username: applicantAccountId, Level: 3}
|
||||
newMember := GuildMember{AccountId: applicantAccountId, Level: 3}
|
||||
err := guild.AddMember(newMember)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -115,7 +114,7 @@ func (gm *GuildMgr) RejectApplication(guildID int, applicantAccountId string) er
|
||||
return errors.New("applicant not found")
|
||||
}
|
||||
|
||||
// JoinGuild 加入公会
|
||||
// JoinGuild 可直接加入公会
|
||||
func (gm *GuildMgr) JoinGuild(guildID int, memberID string) error {
|
||||
guild, exists := gm.Guilds[guildID]
|
||||
if !exists {
|
||||
@ -126,7 +125,7 @@ func (gm *GuildMgr) JoinGuild(guildID int, memberID string) error {
|
||||
return errors.New("guild is full")
|
||||
}
|
||||
|
||||
newMember := GuildMember{AccountId: memberID, Username: memberID, Level: 3}
|
||||
newMember := GuildMember{AccountId: memberID, Level: 3}
|
||||
guild.Members = append(guild.Members, newMember)
|
||||
return nil
|
||||
}
|
||||
@ -137,6 +136,9 @@ func (gm *GuildMgr) LeaveGuild(guildID int, memberID string) error {
|
||||
if !exists {
|
||||
return errors.New("guild not found")
|
||||
}
|
||||
if guild.LeaderID == memberID {
|
||||
return errors.New("leader not leave guild")
|
||||
}
|
||||
|
||||
for i, member := range guild.Members {
|
||||
if member.AccountId == memberID {
|
||||
@ -148,8 +150,8 @@ func (gm *GuildMgr) LeaveGuild(guildID int, memberID string) error {
|
||||
return errors.New("member not found in the guild")
|
||||
}
|
||||
|
||||
// DismissMember 开除成员
|
||||
func (gm *GuildMgr) DismissMember(guildID int, memberID string) error {
|
||||
// DismissMember 开除成员 踢出
|
||||
func (gm *GuildMgr) DismissMember(guildID int, operatorAccountId, memberID string) error {
|
||||
guild, exists := gm.Guilds[guildID]
|
||||
if !exists {
|
||||
return errors.New("guild not found")
|
||||
@ -159,14 +161,25 @@ func (gm *GuildMgr) DismissMember(guildID int, memberID string) error {
|
||||
return errors.New("cannot dismiss the leader")
|
||||
}
|
||||
|
||||
for i, member := range guild.Members {
|
||||
if member.AccountId == memberID {
|
||||
guild.Members = append(guild.Members[:i], guild.Members[i+1:]...)
|
||||
return nil
|
||||
}
|
||||
operatorMember, err := guild.GetMember(operatorAccountId)
|
||||
if err != nil {
|
||||
return errors.New("cannot dismiss the leader")
|
||||
}
|
||||
if operatorMember.Level >= 2 {
|
||||
return errors.New("no permission")
|
||||
}
|
||||
|
||||
return errors.New("member not found in the guild")
|
||||
dismissMember, err := guild.GetMember(memberID)
|
||||
if err != nil {
|
||||
return errors.New("member not found in the guild")
|
||||
}
|
||||
if dismissMember.Level <= 2 {
|
||||
return errors.New("no permission")
|
||||
}
|
||||
|
||||
_ = guild.RemoveMember(memberID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// PromoteMember 提升成员为干部
|
||||
|
Loading…
x
Reference in New Issue
Block a user