public static async Task <ValidatedView> RejectJoinRequest(int accountId, int targetId) { try { ClanMemberModel clanMemberModel = await Model <ClanMemberModel> .AsQueryable() .FirstOrDefault(x => x.AccountID == accountId); if (clanMemberModel == null || clanMemberModel.Role < ClanRole.VICE_LEADER) { return(ValidatedView.Invalid(ErrorCode.CLAN_ACCEPT_MEMBER_INSUFFICIENT_RIGHTS)); } ClanMemberPendingModel clanMemberPendingModel = await Model <ClanMemberPendingModel> .AsQueryable() .FirstOrDefault(x => x.AccountID == targetId && x.ClanID == clanMemberModel.ClanID); if (clanMemberPendingModel == null) { return(ValidatedView.Invalid(ErrorCode.CLAN_PENDING_DID_NOT_REQUEST)); } await Model <ClanMemberPendingModel> .AsCollection() .DeleteOneAsync(x => x.AccountID == targetId && x.ClanID == clanMemberModel.ClanID); return(ValidatedView.Valid()); } catch (Exception e) { GameContext.Logger.LogError(e); } return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED)); }
public static async Task <ValidatedView> AcceptJoinRequest(int accountId, int targetId) { try { ClanMemberModel clanMemberModel = await Model <ClanMemberModel> .AsQueryable() .FirstOrDefault(x => x.AccountID == accountId); if (clanMemberModel == null || clanMemberModel.Role < ClanRole.VICE_LEADER) { return(ValidatedView.Invalid(ErrorCode.CLAN_ACCEPT_MEMBER_INSUFFICIENT_RIGHTS)); } if (await Model <ClanMemberModel> .AsQueryable().Count(x => x.ClanID == clanMemberModel.ClanID) >= 50) { return(ValidatedView.Invalid(ErrorCode.CLAN_FULL)); } ClanMemberPendingModel clanMemberPendingModel = await Model <ClanMemberPendingModel> .AsQueryable() .FirstOrDefault(x => x.AccountID == targetId && x.ClanID == clanMemberModel.ClanID); if (clanMemberPendingModel == null) { return(ValidatedView.Invalid(ErrorCode.CLAN_PENDING_DID_NOT_REQUEST)); } ClanMemberModel newClanMemberModel = new ClanMemberModel { ClanID = clanMemberModel.ClanID, AccountID = targetId }; await Model <ClanMemberPendingModel> .AsCollection().DeleteManyAsync(x => x.AccountID == targetId); await Model <ClanMemberModel> .AsCollection().InsertOneAsync(newClanMemberModel); if (GameManager.Get(accountId, out PlayerController controller)) { ValidatedView <ClanOverview> validatedView = await RetrieveClanOverviewFromMember(accountId); if (validatedView.IsValid) { controller.Account.Clan = validatedView.Object ?? new ClanOverview(); } ClanChangedCommand clanChangedCommand = PacketBuilder.ClanChangedCommand(controller); controller.Send(clanChangedCommand); controller.EntitesInRange(x => x.Send(clanChangedCommand)); } return(ValidatedView.Valid()); } catch (Exception e) { GameContext.Logger.LogError(e); } return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED)); }