コード例 #1
0
        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));
                }
            }
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
 public static string BuildOthelloStatsString(this DatabaseGameStats stats)
 => $"W: {stats.OthelloWon} L: {stats.OthelloLost} ({Formatter.Bold($"{stats.CalculateWinPercentage(stats.OthelloWon, stats.OthelloLost)}")}%)";
コード例 #6
0
 public static string BuildHangmanStatsString(this DatabaseGameStats stats)
 => $"W: {stats.HangmanWon}";
コード例 #7
0
 public static string BuildAnimalRaceStatsString(this DatabaseGameStats stats)
 => $"W: {stats.AnimalRacesWon}";
コード例 #8
0
 public static string BuildQuizStatsString(this DatabaseGameStats stats)
 => $"W: {stats.QuizesWon}";
コード例 #9
0
 public static string BuildNumberRaceStatsString(this DatabaseGameStats stats)
 => $"W: {stats.NumberRacesWon}";
コード例 #10
0
 public static string BuildTicTacToeStatsString(this DatabaseGameStats stats)
 => $"W: {stats.TicTacToeWon} L: {stats.TicTacToeLost} ({Formatter.Bold($"{stats.CalculateWinPercentage(stats.TicTacToeWon, stats.TicTacToeLost)}")}%)";