Example #1
0
        public async Task User(CommandContext ctx)
        {
            ctx.TriggerTypingAsync();
            //add mod data in top plays
            var      input    = new Input(ctx.Message);
            UserData userData = await OsuApi.User(input);

            var user = new User(input, userData);
            await ctx.Channel.SendMessageAsync(embed : user.Embed);
        }
Example #2
0
        public async Task Link(CommandContext ctx, params string[] nameArgs)
        {
            ctx.TriggerTypingAsync();
            string osuName = string.Join(" ", nameArgs);

            if (string.IsNullOrEmpty(osuName))
            {
                throw new Exception("No name provided");
            }

            UserData osuUser = await OsuApi.User(osuName);

            await Database.SetOsuUser(ctx.Message.Author.Id, osuUser.UserId.ToString());

            await ctx.Channel.SendMessageAsync($"{ctx.Message.Author.Mention} has been linked to `{osuName}`");
        }
Example #3
0
        public async Task BadgeWeightedSeedingByUser(CommandContext ctx, int badgeCount, params string[] nameArgs)
        {
            int    rank = 0;
            string osuName;

            if (nameArgs.Length == 1)
            {
                int.TryParse(nameArgs[0], out rank);
            }

            if (rank == 0)
            {
                UserData osuUser;

                if (nameArgs.Length > 0)
                {
                    osuName = string.Join(" ", nameArgs).Replace("\"", "");
                    osuUser = await OsuApi.User(osuName);
                }
                else
                {
                    if (ctx.Message.MentionedUsers.Count > 0)
                    {
                        osuName = await Database.GetOsuUser(ctx.Message.MentionedUsers[0].Id);
                    }
                    else
                    {
                        osuName = await Database.GetOsuUser(ctx.Message.Author.Id);
                    }

                    osuUser = await OsuApi.User(int.Parse(osuName));
                }

                if (string.IsNullOrEmpty(osuName))
                {
                    throw new Exception("No username or rank provided");
                }

                await ctx.Channel.SendMessageAsync($"BWS rank for `{osuUser.Username}` with {badgeCount} badges is {Math.Round(Math.Pow(osuUser.PPRank, Math.Pow(0.9937, Math.Pow(badgeCount, 2))))}");
            }
            else
            {
                await ctx.Channel.SendMessageAsync($"BWS at rank `{rank}` with {badgeCount} badges is {Math.Round(Math.Pow(rank, Math.Pow(0.9937, Math.Pow(badgeCount, 2))))}");
            }
        }
Example #4
0
        public DiscordEmbedBuilder CreateListEmbed()
        {
            this.user = OsuApi.User(input).Result;

            DiscordEmbedBuilder embed = CreateBaseEmbed();

            for (int i = input.Page * 5 - 5; i < input.Page * 5; i++)
            {
                if (i < scoreList.Length)
                {
                    ScoreData score = scoreList[i];

                    int         modRequestNumber = OsuHelper.GetModRequestNumber(score.EnabledMods);
                    BeatmapData beatmap          = OsuApi.Beatmap(score.BeatmapId, modRequestNumber, input.Gamemode).Result[0];

                    ppData pp = new PerformanceCalculator(score, beatmap, input.Gamemode).Calculate();
                    string achievedPp;

                    if (score.Rank.Equals("F") || beatmap.Approved == 4)
                    {
                        achievedPp = $"~~{Math.Round(score.PP > 0 && !input.IsDeltaT ? score.PP : pp.AchievedPp)}pp~~";
                    }
                    else
                    {
                        achievedPp = Math.Round(score.PP > 0 && !input.IsDeltaT ? score.PP : pp.AchievedPp).ToString() + "pp";
                    }

                    Dictionary <string, string> data = GetModeData(score, beatmap);

                    embed.AddField($"**{beatmap.Artist} - {beatmap.Title} [{beatmap.Version}]**",
                                   $"{GetRankEmoji(score)}{OsuHelper.ParseMods(score.EnabledMods)} {data["accuracy"]} {achievedPp}\n" +
                                   $"{data["combo"]} ({data["hits"]})");
                }
                else
                {
                    break;
                }
            }

            return(embed);
        }
Example #5
0
        public async Task <DiscordEmbedBuilder> CreateScoreEmbed()
        {
            int requestnumber = OsuHelper.GetModRequestNumber(score.EnabledMods);

            Task <UserData>      userRequest        = OsuApi.User(input);
            Task <BeatmapData[]> beatmapRequest     = OsuApi.Beatmap(score.BeatmapId ?? input.BeatmapId, requestnumber, input.Gamemode);
            Task <ScoreData[]>   leaderboardRequest = OsuApi.Leaderboard(score.BeatmapId, input.Gamemode);

            Task.WhenAll(
                userRequest,
                beatmapRequest,
                leaderboardRequest
                ).Wait();

            user        = userRequest.Result;
            beatmap     = beatmapRequest.Result[0];
            leaderboard = leaderboardRequest.Result;

            DiscordEmbedBuilder         embed = CreateBaseEmbed();
            Dictionary <string, string> data  = GetModeData(score, beatmap);
            string emoji = GetRankEmoji(score);
            string mods  = OsuHelper.ParseMods(score.EnabledMods);

            ppData pp = new PerformanceCalculator(score, beatmap, input.Gamemode).Calculate();
            string achievedPp;

            if (score.Rank.Equals("F") || beatmap.Approved == 4)
            {
                achievedPp = $"~~{Math.Round(score.PP > 0 && !input.IsDeltaT ? score.PP : pp.AchievedPp)}pp~~";
            }
            else
            {
                achievedPp = Math.Round(score.PP > 0 && !input.IsDeltaT ? score.PP : pp.AchievedPp).ToString() + "pp";
            }

            var    totalTimeSpan = TimeSpan.FromSeconds(beatmap.TotalLength);
            var    hitTimeSpan   = TimeSpan.FromSeconds(beatmap.HitLength);
            string totalLength   = string.Format("{0:D2}:{1:D2}", totalTimeSpan.Minutes, totalTimeSpan.Seconds);
            string hitLength     = string.Format("{0:D2}:{1:D2}", hitTimeSpan.Minutes, hitTimeSpan.Seconds);

            int retryCount = GetRetryCount();

            if (retryCount > 0)
            {
                embed.Author.Name += $" | Try #{retryCount}";
            }

            embed.WithDescription($"[{beatmap.Artist} - {beatmap.Title} [{beatmap.Version}]](https://osu.ppy.sh/b/{beatmap.BeatmapId})\n" +
                                  $"{mods} **{achievedPp}**");

            int leaderboardPosition = GetLeaderboardPosition();

            if (leaderboardPosition > 0)
            {
                embed.Description += $" BM#{leaderboardPosition}";
            }

            embed.AddField("**Score**",
                           $"{emoji} {score.Score.ToString("#,##0")}",
                           true);

            embed.AddField("**Combo**",
                           data["combo"],
                           true);

            embed.AddField("**Accuracy**",
                           data["accuracy"],
                           true);

            embed.AddField("**Hits**",
                           data["hits"],
                           true);

            if (pp.FullComboPp != 0)
            {
                embed.AddField("**PP if FC**",
                               Math.Round(pp.FullComboPp) + "pp",
                               true);
            }

            if (pp.ssPp != 0)
            {
                embed.AddField("**PP if SS**",
                               Math.Round(pp.ssPp) + "pp",
                               true);
            }

            embed.AddField("**Beatmap Values**",
                           $"★{Math.Round(beatmap.DifficultyRating, 2)} **Length**: {totalLength} ({hitLength}) **BPM** {beatmap.bpm}\n" +
                           data["stats"]);

            embed.WithFooter($"Beatmap by: {beatmap.Creator} | Played on {score.Date}");

            Database.SetLastMap(input.DiscordChannelId, beatmap.BeatmapId);
            return(embed);
        }
Example #6
0
        public DiscordEmbed CreateEmbed(string calcType)
        {
            var embed = CreateBaseEmbed();

            if (isFfa)
            {
                string NameList = "";
                string CostList = "";

                foreach (KeyValuePair <int, double[]> cost in totalCosts.OrderByDescending(key => key.Value[0]))
                {
                    UserData user = OsuApi.User(cost.Key).Result;
                    NameList += $"**{user.Username}:**\n";
                    CostList += $"{Math.Round(cost.Value[0], 2)}\n";
                }

                embed.AddField($"🔵__**Costs**__",
                               NameList,
                               true);

                embed.AddField("** **",
                               CostList,
                               true);
            }
            else
            {
                int valueIndex;

                if (calcType.Equals("All"))
                {
                    valueIndex = 0;
                }
                else
                {
                    valueIndex = 1;
                }

                string redNameList  = "";
                string redCostList  = "";
                string blueNameList = "";
                string blueCostList = "";

                foreach (KeyValuePair <int, double[]> cost in redCosts.OrderByDescending(key => key.Value[valueIndex]))
                {
                    UserData user = OsuApi.User(cost.Key).Result;
                    redNameList += $"**{user.Username}:**\n";
                    redCostList += $"{Math.Round(cost.Value[valueIndex], 2)}\n";
                }

                foreach (KeyValuePair <int, double[]> cost in blueCosts.OrderByDescending(key => key.Value[valueIndex]))
                {
                    UserData user = OsuApi.User(cost.Key).Result;
                    blueNameList += $"**{user.Username}:**\n";
                    blueCostList += $"{Math.Round(cost.Value[valueIndex], 2)}\n";
                }

                embed.Description += $"Calculated for: {calcType}";

                embed.AddField($"🔴__**Red Team**__",
                               redNameList,
                               true);

                embed.AddField("** **",
                               redCostList,
                               true);

                embed.AddField("** **",
                               "** **",
                               true);

                embed.AddField($"🔵__**Blue Team**__",
                               blueNameList,
                               true);

                embed.AddField("** **",
                               blueCostList,
                               true);

                embed.AddField("** **",
                               "** **",
                               true);
            }

            return(embed);
        }