public IActionResult AddNewUser(LoginViewModel loginViewModel) { if (ModelState.IsValid) { Repository.AddAccount(loginViewModel); return(View("AccountCreated", loginViewModel)); } else { return(View("CreateAccount")); } }
public IActionResult ThankYou(string email, string password, CreateProfile account) { //string account; if (IsValidEmail(email) == true && IsValidPassWord(password) == true) { Repository.AddAccount(account); return(View("AccountCreated")); //Console.WriteLine("Email is good"); } else { return(View("AccountFailed")); //Console.WriteLine("Email is bad"); } //return View(); }
private static void OnGetPlayerMatchHistoryResponse(ClientGCMsgProtobuf <CMsgDOTAGetPlayerMatchHistoryResponse> response) { var accountId = _currentHistoryRequest; try { var player = _lobbyMembers.Where(m => m.AccountId == _currentHistoryRequest.ToString()).SingleOrDefault(); player.PlayerMatches = response.Body.matches.Select(m => new PlayerMatch() { MatchId = m.match_id.ToString() }).ToList(); _currentHistoryRequest = 0; //_logger.Info("Match history - Player: " + player.Name + " - Matches: " + player.PlayerMatches.Count); using (IRepository repository = new Repository(_dbOptions)) { var account = repository.Accounts.Include(a => a.Bans).Where(m => m.AccountId == player.AccountId).FirstOrDefault(); var newUser = player.PlayerMatches.Count < _game.PlayerMinGamesRequired; if (newUser && !_test) { var playerId = SteamHelper.ConvertIDToUint32(ulong.Parse(player.AccountId)); if (_lobbyMembersCount < _map.MaxPlayers) { player.Kicked = true; SendChatMessage(String.Format(_game.NewAccountKickMessage, player.Name)); _dotaClient.KickLobbyMember(playerId); } _playersToKick.Add(playerId); } if (account == null) { account = new Account() { AccountId = player.AccountId, NewUser = newUser, AccountNames = new List <AccountName>() { new AccountName() { Name = player.Name } }, Bans = new List <Ban>(), Matches = new List <AccountMatch>() }; repository.AddAccount(account); repository.SaveChanges(); } else { var ban = account.Bans.Where(b => b.Expires > DateTime.UtcNow).OrderByDescending(b => b.Expires).FirstOrDefault(); if (ban != null && !_test) { var playerId = SteamHelper.ConvertIDToUint32(ulong.Parse(player.AccountId)); if (_lobbyMembersCount < _map.MaxPlayers) { player.Kicked = true; SendChatMessage(String.Format(_game.BannedAccountKickMessage, player.Name, ban.Reason, ban.Expires.ToString("d") + " " + ban.Expires.ToString("t"))); _dotaClient.KickLobbyMember(playerId); } _playersToKick.Add(playerId); } if (account.NewUser && !newUser) { account.NewUser = false; repository.SaveChanges(); } } } } catch (Exception e) { _logger.Error("Error occurred while processing player history response - Account ID: " + accountId, e); } }
public void OnMatchDetailsResponse(ClientGCMsgProtobuf <CMsgGCMatchDetailsResponse> response) { try { //_logger.Info("Received match details - Match ID: " + response?.Body?.match?.match_id); if (response.Body.match.match_id != _matchId) { throw new Exception(String.Format("Match ID mismatch - Original ID: {0} - Returned ID: {1}", _matchId, response?.Body?.match?.match_id)); } //var map = Startup.Config.Games.Where(g => m.CustomMapName == _match.CustomMapName).SingleOrDefault(); var game = Startup.Config.Games.Where(g => g.Maps.Any(m => m.MapId == _match.CustomMapName)).SingleOrDefault(); var map = game.Maps.Where(m => m.MapId == _match.CustomMapName).SingleOrDefault(); try { using (IRepository repository = new Repository(_dbOptions)) { bool saveRequired = false; foreach (var player in response.Body.match.players) { var accountId = SteamHelper.ConvertIDToUint64(player.account_id); var account = repository.Accounts.Include(a => a.AccountNames).Where(a => a.AccountId == accountId.ToString()).FirstOrDefault(); if (account == null) { account = new Account() { AccountId = accountId.ToString(), NewUser = false, AccountNames = new List <AccountName>(), Bans = new List <Ban>(), Matches = new List <AccountMatch>(), }; repository.AddAccount(account); saveRequired = true; } if (!String.IsNullOrEmpty(player.player_name)) { if (!account.AccountNames.Any(n => n.Name == player.player_name)) { account.AccountNames.Add(new AccountName { Name = player.player_name }); saveRequired = true; } } } if (saveRequired) { repository.SaveChanges(); } } } catch (Exception e) { _logger.Error("Error while processing finished match accounts - Match ID: " + response?.Body?.match?.match_id, e); } try { using (IRepository repository = new Repository(_dbOptions)) { var match = new Match() { CustomMapName = _match.CustomMapName, Registered = _match.Started, Closed = DateTime.UtcNow, MatchId = response.Body.match.match_id.ToString(), RequestedBy = repository.Accounts.Where(a => a.AccountId == _match.RequestedBy).FirstOrDefault(), Bans = new List <Ban>(), Players = new List <AccountMatch>() }; repository.AddMatch(match); var bannedUsers = new List <string>(); var totalBans = response.Body.match.players.Where(p => p.leaver_status != 0).Count(); var teamGoldSpent = new Dictionary <uint, List <uint> >(); foreach (var player in response.Body.match.players) { var team = player.custom_game_data.dota_team; if (map.Solo) { team = 1; } List <uint> goldSpentList; if (!teamGoldSpent.TryGetValue(team, out goldSpentList)) { goldSpentList = new List <uint>(); teamGoldSpent[team] = goldSpentList; } goldSpentList.Add(player.gold_spent); } var teamGoldSpentTopAverage = new Dictionary <uint, float>(); foreach (var team in teamGoldSpent) { var half = Convert.ToInt32(Math.Ceiling((double)(team.Value.Count / 2))); var topAverageSpents = team.Value.OrderByDescending(v => v).Take(half); float average = topAverageSpents.Sum(v => v) / half; teamGoldSpentTopAverage[team.Key] = average; _logger.Info("Team gold spent average - Team: " + team.Key + " - Average: " + average); } foreach (var player in response.Body.match.players) { var accountId = SteamHelper.ConvertIDToUint64(player.account_id); var account = repository.Accounts.Include(a => a.Bans).Where(a => a.AccountId == accountId.ToString()).SingleOrDefault(); match.Players.Add(new AccountMatch() { Account = account, Match = match }); if (totalBans < Math.Floor(map.MaxPlayers * 0.75)) { if (player.leaver_status != 0 && !Startup.Config.Admins.Contains(accountId)) { var banDuration = game.BanDurationLeave; float banSeverity = 1; float teamGoldSpentAverage = 0; var team = player.custom_game_data.dota_team; if (map.Solo) { team = 1; } if (game.VariableLeaveBan) { teamGoldSpentAverage = teamGoldSpentTopAverage[team]; banSeverity = 1 - (player.gold_spent / teamGoldSpentAverage); if (banSeverity < 0) { banSeverity = 0; } if (banSeverity > 1) { throw new Exception("Ban severity calculation error"); } } if (!game.VariableLeaveBan || banSeverity > game.VariableLeaveBanThreshold) { banDuration = Convert.ToInt32((float)banDuration * banSeverity); _logger.Info("Banned leaver - Name: " + player.player_name + " - Severity: " + banSeverity + " - Duration: " + banDuration + " hours - Gold spent: " + player.gold_spent + " - Team gold spent average: " + teamGoldSpentAverage + " - Team: " + team + " - ID: " + accountId); bannedUsers.Add(player.player_name); var previousBan = account.Bans.Where(b => b.Expires > DateTime.UtcNow).OrderByDescending(b => b.Expires).FirstOrDefault(); repository.AddBan(new Ban() { Account = account, Match = match, Duration = banDuration, Expires = previousBan != null ? previousBan.Expires.AddHours(banDuration) : DateTime.UtcNow.AddHours(banDuration), Severity = banSeverity, Set = DateTime.UtcNow, Type = BanTypes.LEAVE, Reason = String.Format("Abandoned {0} match {1}", game.Name, response?.Body?.match?.match_id) }); } else if (banSeverity <= game.VariableLeaveBanThreshold) { _logger.Info("Ban severity below threashold - Name: " + player.player_name + " - Severity: " + banSeverity + " - Gold spent: " + player.gold_spent + " - Team gold spent average: " + teamGoldSpentAverage + " - Team: " + team); } } } if (player.feeding_detected) { _logger.Info("FEEDER: " + player.player_name); } /*else if ((int)player.deaths - ((int)player.kills + (int)player.assists) >= map.FeedingScore) { * _logger.Info(String.Format("Banned Feeder - Player: {0} - KDA: ({1}/{2}/{3}) - Feeding Score: {4}", player.player_name, player.kills, player.deaths, player.assists, (int)player.deaths - ((int)player.kills + (int)player.assists))); * var previousBan = account.Bans.Where(b => b.Expires > DateTime.UtcNow).OrderByDescending(b => b.Expires).FirstOrDefault(); * repository.AddBan(new Ban() { * Account = account, * Match = match, * Duration = map.BanDurationLeave, * Expires = previousBan != null ? previousBan.Expires.AddHours(map.BanDurationLeave) : DateTime.UtcNow.AddHours(map.BanDurationLeave), * Set = DateTime.UtcNow, * Type = BanTypes.LEAVE, * Reason = "Feeding in match " + response?.Body?.match?.match_id, * }); * }*/ } DeleteOngoingMatch(repository, _match.LobbyId); repository.SaveChanges(); _logger.Info("Finalized lobby: " + _match.LobbyId); var channelId = Startup.Bot.Channels.Where(c => c.Value == Startup.Config.PrivateChat).FirstOrDefault().Key; var gameName = game.Name; if (game.Maps.Count > 1) { gameName += " " + map.Name; } var message = String.Format("Finalized {0} match: {1}", gameName, _matchId); if (bannedUsers.Count == 0) { if (totalBans < Math.Floor(map.MaxPlayers * 0.75)) { message += " - No users to ban."; } else { message += " - Voided due to mass leaving."; } } else { message += " - Banned leavers (" + bannedUsers.Count + "): " + String.Join(", ", bannedUsers) + "."; } Startup.Bot.DotaClient.QueueChatMessage(channelId, message, false); } } catch (Exception e) { _logger.Error("Error while processing finished match details - Match ID: " + response?.Body?.match?.match_id, e); PostponeLobbyCheck(_match.LobbyId); } StopMatchChecking(); } catch (Exception e) { _logger.Error("Error while processing match details response - Match ID: " + response?.Body?.match?.match_id, e); } }