public async Task StatsAsync(CommandContext ctx, [Description("User.")] DiscordUser user = null) { user = user ?? ctx.User; using (DatabaseContext db = this.Database.CreateContext()) { DatabaseGameStats stats = await db.GameStats.FindAsync((long)user.Id); if (stats is null) { await ctx.RespondAsync(embed : new DiscordEmbedBuilder { Title = $"Stats for {user.Username}", Description = "No games played yet!", ThumbnailUrl = user.AvatarUrl, Color = this.ModuleColor }.Build()); return; } else { await ctx.RespondAsync(embed : stats.ToDiscordEmbed(user)); } } }
public static DiscordEmbed ToDiscordEmbed(this DatabaseGameStats stats, DiscordUser user) { DiscordEmbedBuilder emb = stats.ToPartialDiscordEmbed(); emb.WithTitle($"Stats for {user.Username}"); emb.WithThumbnailUrl(user.AvatarUrl); return(emb.Build()); }
public static DiscordEmbedBuilder ToPartialDiscordEmbed(this DatabaseGameStats stats) { var emb = new DiscordEmbedBuilder { Color = DiscordColor.Chartreuse }; emb.AddField("Duel stats", stats.BuildDuelStatsString()) .AddField("Tic-Tac-Toe stats", stats.BuildTicTacToeStatsString()) .AddField("Connect4 stats", stats.BuildChain4StatsString()) .AddField("Caro stats", stats.BuildCaroStatsString()) .AddField("Othello stats", stats.BuildOthelloStatsString()) .AddField("Nunchi stats", stats.BuildNumberRaceStatsString(), inline: true) .AddField("Quiz stats", stats.BuildQuizStatsString(), inline: true) .AddField("Race stats", stats.BuildAnimalRaceStatsString(), inline: true) .AddField("Hangman stats", stats.BuildHangmanStatsString(), inline: true); return(emb); }
public static async Task UpdateStatsAsync(this DatabaseContextBuilder dbb, ulong uid, Action <DatabaseGameStats> action) { using (DatabaseContext db = dbb.CreateContext()) { DatabaseGameStats stats = await db.GameStats.FindAsync((long)uid); if (stats is null) { stats = new DatabaseGameStats { UserId = uid }; action(stats); db.GameStats.Add(stats); } else { action(stats); db.GameStats.Update(stats); } await db.SaveChangesAsync(); } }
public static string BuildOthelloStatsString(this DatabaseGameStats stats) => $"W: {stats.OthelloWon} L: {stats.OthelloLost} ({Formatter.Bold($"{stats.CalculateWinPercentage(stats.OthelloWon, stats.OthelloLost)}")}%)";
public static string BuildHangmanStatsString(this DatabaseGameStats stats) => $"W: {stats.HangmanWon}";
public static string BuildAnimalRaceStatsString(this DatabaseGameStats stats) => $"W: {stats.AnimalRacesWon}";
public static string BuildQuizStatsString(this DatabaseGameStats stats) => $"W: {stats.QuizesWon}";
public static string BuildNumberRaceStatsString(this DatabaseGameStats stats) => $"W: {stats.NumberRacesWon}";
public static string BuildTicTacToeStatsString(this DatabaseGameStats stats) => $"W: {stats.TicTacToeWon} L: {stats.TicTacToeLost} ({Formatter.Bold($"{stats.CalculateWinPercentage(stats.TicTacToeWon, stats.TicTacToeLost)}")}%)";