From 5f4c6ffe63dbdea8176aca5ae5bc77751f72536d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Wed, 23 Aug 2023 11:07:42 +0800 Subject: [PATCH] =?UTF-8?q?Add=20=E8=B8=A2=E5=87=BA=E6=88=90=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/imserver/guilddbmgr.go | 17 ++++++++++-- server/imserver/guildmgr.go | 49 +++++++++++++++++++---------------- server/imserver/player.go | 6 ++--- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/server/imserver/guilddbmgr.go b/server/imserver/guilddbmgr.go index 3aa61cdc..d32079c5 100644 --- a/server/imserver/guilddbmgr.go +++ b/server/imserver/guilddbmgr.go @@ -206,12 +206,19 @@ func (gm *GuildMgr) insertGuildMember(guildId int64, member *GuildMember) { {"guild_id", q5.ToString(guildId)}, {"account_id", member.AccountId}, {"level", q5.ToString(member.Level)}, + {"is_leave_guild", "0"}, } f5.GetJsStyleDb().Replace( FRIEND_DB, "t_guild_members", fields, - func(error, int64, int64) {}, + func(err error, lastInsertId int64, rowsAffected int64) { + if err != nil { + fmt.Printf("error:%v\n", err) + } + fmt.Printf("lastInsertId:%d\n", lastInsertId) + fmt.Printf("rowsAffected:%d\n", rowsAffected) + }, ) } @@ -231,6 +238,12 @@ func (gm *GuildMgr) updateGuildMember(g *Guild, fields [][]string, newWhere []st "t_guild_members", fields, where, - func(error, int64, int64) {}, + func(err error, lastInsertId int64, rowsAffected int64) { + if err != nil { + fmt.Printf("error:%v\n", err) + } + fmt.Printf("lastInsertId:%d\n", lastInsertId) + fmt.Printf("rowsAffected:%d\n", rowsAffected) + }, ) } diff --git a/server/imserver/guildmgr.go b/server/imserver/guildmgr.go index 391fcf97..92508b91 100644 --- a/server/imserver/guildmgr.go +++ b/server/imserver/guildmgr.go @@ -87,7 +87,7 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error return nil } -// Approve 批准申请加入公会 +// Approve 同意申请者加入公会 func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string) error { guild, exists := gm.Guilds[guildId] if !exists { @@ -125,7 +125,7 @@ func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string) return nil } -// Reject 拒绝申请加入公会 +// Reject 拒绝申请者加入公会 func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error { _, exists := gm.pendingReqs[guildId] if !exists { @@ -140,7 +140,7 @@ func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error { } // JoinGuild 可直接加入公会 -//func (gm *GuildMgr) JoinGuild(guildId int64, memberID string) error { +//func (gm *GuildMgr) JoinGuild(guildId int64, accountId string) error { // guild, exists := gm.Guilds[guildId] // if !exists { // return fmt.Errorf("guild not found") @@ -150,28 +150,28 @@ func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error { // return fmt.Errorf("guild is full") // } // -// newMember := GuildMember{AccountId: memberID, Level: 3} +// newMember := GuildMember{AccountId: accountId, Level: 3} // guild.Members = append(guild.Members, newMember) // return nil //} // LeaveGuild 离开公会 -func (gm *GuildMgr) LeaveGuild(guildId int64, memberID string) error { +func (gm *GuildMgr) LeaveGuild(guildId int64, accountId string) error { guild, exists := gm.Guilds[guildId] if !exists { return fmt.Errorf("guild not found") } - if guild.LeaderId == memberID { + if guild.LeaderId == accountId { return fmt.Errorf("leader not leave guild") } - member, err := guild.GetMember(memberID) + member, err := guild.GetMember(accountId) if err != nil { return fmt.Errorf("member not found in the guild") } - _ = guild.RemoveMember(memberID) + _ = guild.RemoveMember(accountId) fields := [][]string{{"is_leave_guild", q5.ToString(1)}} where := []string{"account_id", q5.ToString(member.AccountId)} gm.updateGuildMember(guild, fields, where) @@ -180,25 +180,28 @@ func (gm *GuildMgr) LeaveGuild(guildId int64, memberID string) error { } // DismissMember 开除成员 踢出 -func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, memberID string) error { +func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, accountId string) error { guild, exists := gm.Guilds[guildId] if !exists { return fmt.Errorf("guild not found") } - if memberID == guild.LeaderId { + if accountId == guild.LeaderId { return fmt.Errorf("cannot dismiss the leader") } - operatorMember, err := guild.GetMember(operatorAccountId) + // 公会干部及以上仅可操作 + operatorPermLevel := 2 + err := gm.checkOperatorPerm(guild, operatorAccountId, operatorPermLevel) if err != nil { - return fmt.Errorf("cannot dismiss the leader") - } - if operatorMember.Level >= 2 { - return fmt.Errorf("no permission") + return err } - dismissMember, err := guild.GetMember(memberID) + if operatorAccountId == accountId { + return fmt.Errorf("member not dismiss") + } + + dismissMember, err := guild.GetMember(accountId) if err != nil { return fmt.Errorf("member not found in the guild") } @@ -206,7 +209,7 @@ func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, memberID str return fmt.Errorf("no permission") } - _ = guild.RemoveMember(memberID) + _ = guild.RemoveMember(accountId) fields := [][]string{{"is_leave_guild", q5.ToString(1)}} where := []string{"account_id", q5.ToString(dismissMember.AccountId)} gm.updateGuildMember(guild, fields, where) @@ -215,17 +218,17 @@ func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, memberID str } // PromoteMember 提升成员为干部 -func (gm *GuildMgr) PromoteMember(guildId int64, operatorAccountId, memberID string) error { +func (gm *GuildMgr) PromoteMember(guildId int64, operatorAccountId, accountId string) error { guild, exists := gm.Guilds[guildId] if !exists { return fmt.Errorf("guild not found") } - if memberID == guild.LeaderId { + if accountId == guild.LeaderId { return fmt.Errorf("cannot promote the leader") } - member, err := guild.GetMember(memberID) + member, err := guild.GetMember(accountId) if err != nil { return fmt.Errorf("member not found in the guild") } @@ -240,17 +243,17 @@ func (gm *GuildMgr) PromoteMember(guildId int64, operatorAccountId, memberID str } // DemoteMember 解除成员干部身份 -func (gm *GuildMgr) DemoteMember(guildId int64, operatorAccountId, memberID string) error { +func (gm *GuildMgr) DemoteMember(guildId int64, operatorAccountId, accountId string) error { guild, exists := gm.Guilds[guildId] if !exists { return fmt.Errorf("guild not found") } - if memberID == guild.LeaderId { + if accountId == guild.LeaderId { return fmt.Errorf("cannot demote the leader") } - member, err := guild.GetMember(memberID) + member, err := guild.GetMember(accountId) if err != nil { return fmt.Errorf("member not found in the guild") } diff --git a/server/imserver/player.go b/server/imserver/player.go index 8014339d..47ff58bf 100644 --- a/server/imserver/player.go +++ b/server/imserver/player.go @@ -206,7 +206,7 @@ func (p *Player) CMCreateGuild(hdr *f5.MsgHdr, msg *cs.CMCreateGuild) { wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) } -// CMApplyToGuild 申请加入公会 +// CMApplyToGuild 同意申请者加入公会 func (p *Player) CMApplyToGuild(hdr *f5.MsgHdr, msg *cs.CMApplyToGuild) { rspMsg := new(cs.SMApplyToGuild) guildId := msg.GetGuildId() @@ -222,7 +222,7 @@ func (p *Player) CMApplyToGuild(hdr *f5.MsgHdr, msg *cs.CMApplyToGuild) { wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) } -// CMApprove 批准申请加入公会 +// CMApprove 同意申请者加入公会 func (p *Player) CMApprove(hdr *f5.MsgHdr, msg *cs.CMApprove) { rspMsg := new(cs.SMApprove) guildId := msg.GetGuildId() @@ -241,7 +241,7 @@ func (p *Player) CMApprove(hdr *f5.MsgHdr, msg *cs.CMApprove) { wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) } -// CMReject 拒绝申请加入公会 +// CMReject 拒绝申请者加入公会 func (p *Player) CMReject(hdr *f5.MsgHdr, msg *cs.CMReject) { rspMsg := new(cs.SMReject) guildId := msg.GetGuildId()