public async Task GetResults(CommandContext ctx) { var strBuilder = new StringBuilder("### _Game Results_ ###\n"); strBuilder.AppendLine($"Rounds played: {_roundCount}"); strBuilder.AppendLine(); var highestPlayer = new UserGameData(null); foreach (var(user, gameData) in _players) { strBuilder.AppendLine($"{user.Username} results:"); if (gameData.Points > highestPlayer.Points) { highestPlayer = gameData; } strBuilder.Append(gameData.GetGameData()); strBuilder.AppendLine(); } strBuilder.AppendLine($"Player: {highestPlayer.User.Mention} Wins with {highestPlayer.Points} points!"); await ctx.RespondAsync(strBuilder.ToString()); }
public async Task AskQuestion(CommandContext ctx) { var question = GameMaster.GetQuestion(_askedQuestions.Select(q => q.Id).ToList()); await ctx.RespondAsync($"Question: {question.QuestionText} [Time limit: 1 min]"); var interactivity = ctx.Client.GetInteractivityModule(); var answer = await interactivity.WaitForMessageAsync(msg => { // If this user has already answered this question, do not accept any new answers. if (_players.ContainsKey(msg.Author) && _players[msg.Author].QuestionsAnswered.ContainsKey(question.QuestionText)) { msg.DeleteAsync(); return(false); } var result = question.VerifyAnswer(msg.Content); var response = false; switch (result.AnswerStatus) { case AnswerStatus.PartiallyCorrect: if (_players.ContainsKey(msg.Author)) { var player = _players[msg.Author]; player.AddAnswer(question.QuestionText, msg.Content, (int)((double)question.Points / 2)); } else { var userData = new UserGameData(msg.Author); userData.AddAnswer(question.QuestionText, msg.Content, (int)((double)question.Points / 2)); _players.TryAdd(msg.Author, userData); } break; case AnswerStatus.Error: _logger.Error(result.Exception, $"Error parsing command for question: {question.QuestionText}"); break; case AnswerStatus.NormalCorrect: if (_players.ContainsKey(msg.Author)) { var player = _players[msg.Author]; player.AddAnswer(question.QuestionText, msg.Content, question.Points); } else { var userData = new UserGameData(msg.Author); userData.AddAnswer(question.QuestionText, msg.Content, question.Points); _players.TryAdd(msg.Author, userData); } response = true; break; case AnswerStatus.BonusCorrect: if (_players.ContainsKey(msg.Author)) { var player = _players[msg.Author]; player.AddAnswer(question.QuestionText, msg.Content, question.BonusPoints.Value); } else { var userData = new UserGameData(msg.Author); userData.AddAnswer(question.QuestionText, msg.Content, question.BonusPoints.Value); _players.TryAdd(msg.Author, userData); } response = true; break; case AnswerStatus.Incorrect: if (_players.ContainsKey(msg.Author)) { var player = _players[msg.Author]; player.AddAnswer(question.QuestionText, msg.Content, 0); } else { var userData = new UserGameData(msg.Author); userData.AddAnswer(question.QuestionText, msg.Content, 0); _players.TryAdd(msg.Author, userData); } break; } msg.DeleteAsync(); return(response); }, TimeSpan.FromMinutes(1)); if (answer != null) { await ctx.RespondAsync($"User: {answer.User.Mention} answered correctly! [Round Over]"); } else { await ctx.RespondAsync("Timeout reached! [Round Over]"); } _roundCount++; _askedQuestions.Add(question); }