public static RecommendationBeatmapId Create(UserBest best, Mode mode) { return(new RecommendationBeatmapId { BeatmapId = best.BeatmapId, ValidMods = best.EnabledMods & s_modFilters[(int)mode], }); }
private static Embed CreateSinglePlayEmbed(User user, UserBest score, Beatmap beatmap) { var oppaiBeatmap = GetOppaiBeatmapFromUrl(GetBeatmapApiUrlFromBeatmap(beatmap)); var mods = (OppaiSharp.Mods)score.Mods; var diffCalc = new OppaiSharp.DiffCalc().Calc(oppaiBeatmap, mods); var fcPP = new OppaiSharp.PPv2(new OppaiSharp.PPv2Parameters(oppaiBeatmap, diffCalc, score.Count100, 0, c300: score.Count300 + score.Miss, mods: mods)); EmbedBuilder embed = new EmbedBuilder() { Author = new EmbedAuthorBuilder() { Name = user.Username, Url = GetUserpageFromUserId(user.Userid), IconUrl = GetAvatarUrlFromUserId(user.Userid) }, Title = $"{beatmap.Artist} - {beatmap.Title} [{beatmap.Difficulty}] +{score.Mods} [{beatmap.DifficultyRating:F2}⚝]", Url = GetBeatmapUrlFromBeatmap(beatmap), ThumbnailUrl = beatmap.ThumbnailUrl, Color = Color.Purple, Description = $"◉ **{score.Rank} Rank** ◉ **{score.Pp:F2}PP** ({fcPP.Total:F2} for {fcPP.ComputedAccuracy.Value() * 100:F2}% FC) ◉ {score.Accuracy:F2}% ◉ {score.ScorePoints} ◉ x{score.MaxCombo}/{beatmap.MaxCombo} ◉ [{score.Count300}/{score.Count100}/{score.Count50}/{score.Miss}]" }; return(embed); }
public InfoEmbed(User user) { string mainModString; if (user.pp_rank == 0) { mainModString = "없음"; } else { UserBest userBest = new UserBest(user.user_id); userBest.GetMainMods(); if (userBest.mainMods == 0) { mainModString = "노모드"; } else { mainModString = userBest.mainMods.ToModString(); } } if (user.pp_rank == 0) { WithDescription("플레이 기록이 없는 유저\n\u200B"); AddField("레벨", string.Format("{0:0.##}", user.level), true); AddField("\u200B", "\u200B", true); } else if (user.pp_raw == 0) { WithDescription("장기간 활동이 없는 유저\n\u200B"); AddField("순위", "#" + user.pp_rank, true); AddField("주력 모드", mainModString, true); AddField("\u200B", "\u200B", true); AddField("정확도", string.Format("{0:0.##}%", user.accuracy), true); AddField("레벨", string.Format("{0:0.##}", user.level), true); } else { if (user.user_id == 10901226) { WithDescription("개발자입니다!\n\u200B"); } else { WithDescription(""); } AddField("퍼포먼스", string.Format("{0:0.##}pp", user.pp_raw), true); AddField("주력 모드", mainModString, true); AddField("\u200B", "\u200B", true); AddField("순위", "#" + user.pp_rank, true); AddField("국가 순위", "#" + user.pp_country_rank, true); AddField("\u200B", "\u200B", true); AddField("정확도", string.Format("{0:0.##}%", user.accuracy), true); AddField("레벨", string.Format("{0:0.##}", user.level), true); } AddField("\u200B", "\u200B", true); AddField("플레이 횟수", user.playcount + "회\n\u200B", true); AddField("플레이 시간", user.total_seconds_played / 3600 + "시간\u200B", true); AddField("\u200B", "\u200B", true); WithColor(new Color(0xFF69B4)); WithTimestamp(user.join_date.ToDateTimeOffset()); WithFooter(footer => { footer .WithText("가입 일시"); }); WithThumbnailUrl("https://a.ppy.sh/" + user.user_id); WithAuthor(author => { author .WithName(user.username) .WithUrl("https://osu.ppy.sh/users/" + user.user_id) .WithIconUrl("https://www.countryflags.io/" + user.country.ToLower() + "/flat/64.png"); }); }
public ScoreEmbed(UserBest userBest) { Score best = userBest.newBest; User user = User.Search(best.user_id); Beatmap beatmap = Beatmap.Search(best.beatmap_id, best.enabled_mods); string modsString = best.enabled_mods.ToModString(); if (modsString.Length > 0) { modsString = " +" + modsString; } WithTitle(string.Format("\n{0} - {1}", beatmap.artist, beatmap.title)); WithDescription(string.Format("**[{0}]{1} {2:0.##}🟊**\n", beatmap.version, modsString, beatmap.difficultyrating)); WithUrl(string.Format("https://osu.ppy.sh/beatmapsets/{0}#osu/{1}", beatmap.beatmapset_id, best.beatmap_id)); WithColor(new Color(0xFF69B4)); WithTimestamp(best.date.ToDateTimeOffset()); WithFooter(footer => { footer .WithText((best.index + 1) + "번째 탑 플레이"); }); WithThumbnailUrl(best.RankImageUrl()); WithImageUrl(string.Format("https://assets.ppy.sh/beatmaps/{0}/covers/cover.jpg", beatmap.beatmapset_id)); WithAuthor(author => { author .WithName(user.username) .WithUrl("https://osu.ppy.sh/users/" + user.user_id) .WithIconUrl("https://www.countryflags.io/" + user.country.ToLower() + "/flat/64.png"); }); AddField("점수", best.score, true); AddField("퍼포먼스", string.Format("{0:0.##}pp", best.pp), true); if (userBest.previous_pp_raw == 0 && userBest.previous_pp_rank != 0) { AddField("퍼포먼스 변화", string.Format("{0:0.##}pp (복귀 유저)", userBest.pp_raw)); } else { AddField("퍼포먼스 변화", string.Format("{0:0.##}pp ({1}{2:0.##})", userBest.pp_raw, userBest.pp_raw >= userBest.previous_pp_raw ? "+" : "", userBest.pp_raw - userBest.previous_pp_raw ), true ); } AddField("콤보", string.Format("{0}/{1}", best.maxcombo, beatmap.max_combo), true); AddField("정확도", string.Format("{0:0.##}%", best.Accuracy()), true); if (userBest.previous_pp_rank == 0) { AddField("순위 변화", string.Format("#{0} (신규 유저)", userBest.pp_rank), true); } else { AddField("순위 변화", string.Format("#{0} ({1}{2})", userBest.pp_rank, userBest.previous_pp_rank >= userBest.pp_rank ? "+" : "", userBest.previous_pp_rank - userBest.pp_rank ), true ); } AddField("300", "x" + best.count300, true); AddField("100", "x" + best.count100, true); AddField("\u200B", "\u200B", true); AddField("50", "x" + best.count50, true); AddField("미스", "x" + best.countmiss, true); AddField("\u200B", "\u200B", true); }