This commit is contained in:
殷勇 2023-08-17 16:50:53 +08:00
parent 80383c5bb8
commit 96253d24e3
2 changed files with 35 additions and 13 deletions

View File

@ -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 {

View File

@ -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 提升成员为干部