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); } }
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); } }