Esempio n. 1
0
 public static async Task Update(CakeUser user)
 {
     using (var db = new CakeDb())
     {
         await db.UpdateAsync(user);
     }
 }
Esempio n. 2
0
        public static async Task <CakeUser> ResetUser(CakeUser user)
        {
            user.TotalXp = 0;
            user.Level   = 1;
            await UserQueries.Update(user);

            return(user);
        }
Esempio n. 3
0
        public static async Task <CakeUser> IncrementLevels(CakeUser user, int amount = 1)
        {
            for (int i = 0; i < amount; i++)
            {
                user.TotalXp += user.GetNextLevelExp();
                user.Level++;
            }
            await UserQueries.Update(user);

            return(user);
        }
Esempio n. 4
0
        public static async Task <bool> GiveExpToUser(CakeUser user, int expToGive)
        {
            user.TotalXp += expToGive;
            if (user.GetCurrentExp() >= user.GetNextLevelExp())
            {
                user.Level += 1;
                await UserQueries.Update(user);

                return(true);
            }
            await UserQueries.Update(user);

            return(false);
        }
Esempio n. 5
0
        public static async Task <CakeUser> DecreaseLevels(CakeUser user, int amount = 1)
        {
            for (int i = 0; i < amount; i++)
            {
                if (user.GetNextLevelExp() < user.GetCurrentExp())
                {
                    user.TotalXp -= user.GetNextLevelExp();
                    user.Level--;
                }
            }
            await UserQueries.Update(user);

            return(user);
        }
Esempio n. 6
0
        private static async Task <CakeUser> CreateUser(ulong userId)
        {
            using (var db = new CakeDb())
            {
                CakeUser newUser = new CakeUser
                {
                    Id       = userId,
                    TotalXp  = 0,
                    Admin    = false,
                    Restrict = false,
                    OsuId    = 0,
                    Money    = 0,
                    Level    = 1
                };

                await db.InsertAsync(newUser);

                return(newUser);
            }
        }
Esempio n. 7
0
        public async Task GetUserProfile(string osuId, bool findWithUsername, bool dUser = false, ulong dUserId = 0)
        {
            try
            {
                CakeUser databaseUser = !dUser
                    ? await GetDatabaseEntityAsync(Module.Context.User.Id)
                    : await GetDatabaseEntityAsync(dUserId);

                if (osuId.IsNullOrEmpty())
                {
                    osuId            = databaseUser.OsuId.ToString();
                    findWithUsername = false;
                }
                var user = GetJsonUser(osuId, findWithUsername, databaseUser.OsuMode);

                await SendEmbedAsync(Embeds.OsuModuleEmbeds.ReturnUserProfile(user, databaseUser.OsuMode));
            }
            catch (CakeException e)
            {
                await SendMessageAsync(e.Message);
            }
        }
Esempio n. 8
0
        public async Task GetCompare(string osuId, bool findWithUsername, bool dUser = false, ulong dUserId = 0)
        {
            try
            {
                CakeUser databaseUser = null;
                if (!dUser)
                {
                    databaseUser = await GetDatabaseEntityAsync(Module.Context.User.Id).ConfigureAwait(false);
                }
                else
                {
                    databaseUser = await GetDatabaseEntityAsync(dUserId).ConfigureAwait(false);
                }
                var mode = databaseUser.OsuMode;

                if (osuId.IsNullOrEmpty())
                {
                    osuId            = databaseUser.OsuId.ToString();
                    findWithUsername = false;
                }

                var user  = GetJsonUser(osuId, findWithUsername, mode);
                var info  = "";
                var mapId = Database.Queries.ChannelQueries.FindOrCreateChannel(Module.Context.Channel.Id).Result.OsuMapId;

                if (mapId == 0)
                {
                    throw new CakeException("`No beatmap found in channel`");
                }

                var scoreBuilder = new OsuScoreBuilder
                {
                    BeatmapId = mapId,
                    Mode      = mode,
                    UserId    = user.user_id
                };

                var score = scoreBuilder.Execute();

                if (!score.Any())
                {
                    throw new CakeException($"`No score(s) found in {mapId}`");
                }

                foreach (var t in score)
                {
                    var modName = t.enabled_mods == "0" ? "No Mod" : OsuMods.Modnames(Convert.ToInt32(t.enabled_mods));

                    var dateTicks  = TimeSpan.FromTicks(DateTime.UtcNow.Ticks - t.date.UtcTicks);
                    var timeFormat = new TimeFormat(dateTicks);

                    var date = dateTicks.TotalDays > 30 ? timeFormat.ToShortString() : timeFormat.ToLongString();

                    info += $"***{modName}*** \n";
                    if (t.pp != null)
                    {
                        info += $"⤷ **PP:** {Math.Round((double)t.pp, 0)} " +
                                $"**Rank:**{t.rank.LevelEmotes()} ";
                    }
                    else
                    {
                        info += $"⤷ **Rank:**{t.rank.LevelEmotes()} ";
                    }

                    info += $"**Accuracy:** {Math.Round(t.calculated_accuracy, 2)}% " +
                            $"**Combo:** {t.maxcombo}({t.Beatmap.max_combo}) \n" +
                            $" {OsuEmoteCodes.Emote300} {t.count300} ♢ {OsuEmoteCodes.Emote100} {t.count100} ♢ {OsuEmoteCodes.Emote50} {t.count50} ♢ {OsuEmoteCodes.EmoteX} {t.countmiss}\n " +
                            $" {date} ago\n\n";
                }

                await SendEmbedAsync(Embeds.OsuModuleEmbeds.ReturnChannelCompare(user, score[0].Beatmap, info, mode));
            }
            catch (CakeException e)
            {
                await SendMessageAsync(e.Message);
            }
            catch (Exception e)
            {
                _logger.LogError(e);
            }
        }
Esempio n. 9
0
        public async Task GetUserRecent(string osuId, bool findWithUsername, bool dUser = false, ulong dUserId = 0)
        {
            try
            {
                CakeUser databaseUser = !dUser
                    ? await GetDatabaseEntityAsync(Module.Context.User.Id)
                    : await GetDatabaseEntityAsync(dUserId);

                var info = "";

                if (osuId.IsNullOrEmpty())
                {
                    osuId            = databaseUser.OsuId.ToString();
                    findWithUsername = false;
                }

                var user = GetJsonUser(osuId, findWithUsername, databaseUser.OsuMode);

                var recentBuilder = new OsuUserRecentBuilder
                {
                    Mode   = databaseUser.OsuMode,
                    Limit  = "1",
                    UserId = user.user_id
                };
                var recent = OsuTimeConverter.ConvertScorableDate(user.country, recentBuilder.Execute());

                var retryCount = 0;

                if (recent.Count == 0)
                {
                    throw new CakeException($"`No recent play(s) has been found for {user.username}`");
                }

                for (var i = 0; i < recent.Count; i++)
                {
                    var t = recent[i];

                    retryCount = OsuCheckRetries.Tries(databaseUser.OsuMode, t.user_id, t.Beatmap.beatmap_id);
                    info       = $"**{t.rounded_score} ♢ " +
                                 $"{t.rank.LevelEmotes()} ♢ {t.maxcombo}x*({ t.Beatmap.max_combo}x)*** {OsuMods.Modnames(Convert.ToInt32(t.enabled_mods))} \n " +
                                 $"{OsuEmoteCodes.Emote300} {t.count300} ♢ {OsuEmoteCodes.Emote100} {t.count100} ♢ {OsuEmoteCodes.Emote50} {t.count50} ♢ {OsuEmoteCodes.EmoteX} {t.countmiss} ♢ {Math.Round(t.calculated_accuracy, 2)}%\n";

                    if (t.rank == "F")
                    {
                        info += $"{Math.Round(t.completion, 2)}% completed ♢ if completed **{Math.Round(t.pp, 2)} PP**\n";
                    }
                    else
                    {
                        if (!t.choked)
                        {
                            info += $"**{Math.Round(t.pp, 2)} PP**\n\n";
                        }
                        else
                        {
                            info += $"**{Math.Round(t.pp, 2)} PP** ♢ {Math.Round(t.nochokepp, 2)} PP if FC ({Math.Round(t.nochokeaccuracy, 2)}%)\n\n";
                        }
                    }
                }

                await SendEmbedAsync(Embeds.OsuModuleEmbeds.ReturnUserRecent(user, recent[0].Beatmap, recent[0], info, databaseUser.OsuMode, retryCount));

                if (recent[0].Beatmap.beatmap_id != 0)
                {
                    OsuModule.SetMapId(recent[0].Beatmap.beatmap_id);
                }
            }
            catch (CakeException e)
            {
                await SendMessageAsync(e.Message);
            }
            catch (Exception e)
            {
                _logger.LogError(e);
            }
        }
Esempio n. 10
0
        public async Task GetUserBest(string osuId, bool findWithUsername, bool recent, int?play, bool dUser = false, ulong dUserId = 0)
        {
            try
            {
                var      fields       = new List <Tuple <string, string> >();
                CakeUser databaseUser = !dUser
                    ? await GetDatabaseEntityAsync(Module.Context.User.Id)
                    : await GetDatabaseEntityAsync(dUserId);

                if (osuId.IsNullOrEmpty())
                {
                    osuId            = databaseUser.OsuId.ToString();
                    findWithUsername = false;
                }

                var user = GetJsonUser(osuId, findWithUsername, databaseUser.OsuMode);

                var bestBuilder = new OsuUserBestBuilder
                {
                    Mode       = databaseUser.OsuMode,
                    Limit      = (recent || play != null ? 100 : 5).ToString(),
                    UserId     = user.user_id,
                    Recent     = recent,
                    PlayNumber = play
                };

                var best = OsuTimeConverter.ConvertScorableDate(user.country, bestBuilder.Execute());

                foreach (var item in best)
                {
                    if (play != null)
                    {
                        item.play_number = (int)play;
                    }

                    var dateTicks  = TimeSpan.FromTicks(DateTime.UtcNow.Ticks - item.date.UtcTicks);
                    var timeFormat = new TimeFormat(dateTicks);

                    var date = dateTicks.TotalDays > 30 ? timeFormat.ToShortString() : timeFormat.ToLongString();

                    var starRating = Math.Abs(item.starrating) <= 0 ? item.Beatmap.difficultyrating : item.starrating;

                    fields.Add(new Tuple <string, string>($"#{item.play_number}: {item.Beatmap.complete_title} {OsuMods.Modnames(Convert.ToInt32(item.enabled_mods))} {Math.Round(starRating, 2)}★",
                                                          $@"⤷ **PP:** {Math.Round(item.pp, 0)} " +
                                                          $"**Rank:** {item.rank.LevelEmotes()} " +
                                                          $"**Combo:** {item.maxcombo}({item.Beatmap.max_combo}) \n" +
                                                          $" {OsuEmoteCodes.Emote300} {item.count300} ♢ {OsuEmoteCodes.Emote100} {item.count100} ♢ {OsuEmoteCodes.Emote50} {item.count50} ♢ {OsuEmoteCodes.EmoteX} {item.countmiss} ♢ {Math.Round(item.calculated_accuracy, 2)}%\n" +
                                                          $" **Downloads:** [Beatmap]({item.Beatmap.beatmap_url})" +
                                                          $"([no vid]({item.Beatmap.beatmap_url + "n"})) " +
                                                          $"[Bloodcat]({item.Beatmap.bloodcat})\n" +
                                                          $" {date} ago\n"));
                }

                await SendEmbedAsync(Embeds.OsuModuleEmbeds.ReturnUserBest(user, $"https://b.ppy.sh/thumb/{best.First().Beatmap.beatmapset_id}l.jpg", fields, databaseUser.OsuMode));
            }
            catch (CakeException e)
            {
                await SendMessageAsync(e.Message);
            }
            catch (Exception e)
            {
                _logger.LogError(e);
            }
        }