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