Exemplo n.º 1
0
 public static RecommendationBeatmapId Create(UserBest best, Mode mode)
 {
     return(new RecommendationBeatmapId
     {
         BeatmapId = best.BeatmapId,
         ValidMods = best.EnabledMods & s_modFilters[(int)mode],
     });
 }
Exemplo n.º 2
0
        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);
        }