/// <summary> /// Finds all active games and ends every game that is 1 day old or older /// </summary> private async Task EndOldGames() { var activeGames = await _gameReaderWriter.GetActiveGamesAsync(); foreach (var activeGame in activeGames) { var elapsedTime = DateTime.Now - activeGame.ThreadTimeStamp; if (elapsedTime.TotalDays >= 1.0) { _gameReaderWriter.EndGame(activeGame.Id); } } }
public async Task <PrintMessage> ProcessMessage(NewMessage message) { // Check Global Commands switch (message.text.ToLower().Trim()) { case "wiki-bot: leaders": case "wiki-bot leaders": case "wiki-bot: leaderboard": case "wiki-bot leaderboard": case "wiki-bot leader board": case "wiki-bot: leader board": var leaderboardString = _leaderBoardGenerator.GenerateLeaderBoardString(); if (string.IsNullOrEmpty(leaderboardString)) { return(new PrintMessage { IsReply = false, MessageText = "No players are playering; Cannot generate leaderboard" }); } else { return(new PrintMessage { IsReply = false, MessageText = leaderboardString }); } } // Check if a new game has started GameStartData gameStartData = GetGameStartData(message); if (gameStartData.IsValid) { Console.WriteLine("New Game Started"); _gameReaderWriter.CreateNewGame(gameStartData); return(new PrintMessage { IsReply = true, MessageText = $"New Game Started! To end game, type \n> wiki-bot: end game", ThreadTs = message.ts }); } else { var game = _gameReaderWriter.GetGame(message); if (game != null) { switch (message.text.ToLower().Trim()) { case "wiki-bot stats": case "wiki-bot: stats": var stats = _gameReaderWriter.GetGameStatistics(game.Id); return(PrintStats(stats, game.Id)); case "wiki-bot end": case "wiki-bot end game": case "wiki-bot endgame": case "wiki-bot: end": case "wiki-bot: end game": case "wiki-bot: endgame": return(_gameReaderWriter.EndGame(game.Id)); default: break; } var pathValidationOutput = await FindAndProcessPath(game, message); // Only process valid messages as determined by validator output if (pathValidationOutput != null && pathValidationOutput.IsValid) { var responce = _gameReaderWriter.AddGameEntry(new GameEntry { LinkCount = pathValidationOutput.PathLength, User = message.user, RawText = message.text, UserName = message.username, GameId = game.Id }); if (responce == LoaderResponse.Success) { return(new PrintMessage { IsReply = true, MessageText = $"{message.username}'s Entry Received! Number of clicks: {pathValidationOutput.PathLength}", ThreadTs = message.thread_ts }); } else { return(new PrintMessage { IsReply = true, MessageText = $"You have already played this round. You only get one chance per game", ThreadTs = message.thread_ts }); } } else { if (pathValidationOutput != null) { return(new PrintMessage { IsReply = true, MessageText = pathValidationOutput.ValidationMessage, ThreadTs = message.thread_ts }); } } } } return(null); }