public async Task OsuTrack(string gameModeStr) { OsuBoundUserDB boundUser = await OsuDB.GetBoundUserBy_DiscordID(Context.Message.Author.ID); if (boundUser == null) { await Context.Channel.SendMessageAsync($"You need to bind your osu account first with `{Context.Discord.PREFIX}OsuBind [player_name]`."); } else { OsuGameModes gameMode = OsuGameModesConverter.FromOfficialName(gameModeStr, true); OsuGameModeUserDB gameModeUser = await OsuDB.GetGameModeUserBy_OsuID(boundUser.UserID, gameMode); if (!boundUser.GameModes.HasFlag(gameMode)) { OsuUser osuUser = await OsuNetwork.DownloadUser(boundUser.UserID, gameMode); await OsuDB.WriteOsuGameModeUser(osuUser, gameMode); boundUser.GameModes |= gameMode; await OsuDB.UpdateBoundOsuUser(osuUser, boundUser); await Context.Channel.SendMessageAsync($"You are now being tracked for {Enum.GetName(typeof(OsuGameModes), gameMode)} gameplay."); } else { await Context.Channel.SendMessageAsync($"You are already being tracked for {Enum.GetName(typeof(OsuGameModes), gameMode)} gameplay."); } } }
private static async Task OsuFlexible(string username, CommandEventArgs Context, OsuGameModes gamemode = OsuGameModes.None) { if (Context.Message.Mentions.Length > 1) { await Context.Channel.SendMessageAsync("AAAA Too many mentions, calm down.\nOne at a time :)"); return; } OsuBoundUserDB boundUser = string.IsNullOrEmpty(username) ? boundUser = await OsuDB.GetBoundUserBy_DiscordID(Context.Message.Author.ID) : Context.Message.Mentions.Length == 1 ? await OsuDB.GetBoundUserBy_DiscordID(Context.Message.Mentions[0]) : await OsuDB.GetBoundUserBy_UserName(username); if (Context.Message.Mentions.Length == 1 && boundUser == null) { await Context.Channel.SendMessageAsync("Mentioned user is not binded."); return; } if (boundUser != null) { username = boundUser.UserName; } else if (string.IsNullOrEmpty(username)) { await Context.Channel.SendMessageAsync( "You don't exist in the database yet." + "Do `$osubind [username]` to continue the use of `$osu` without parameters."); } OsuGameModes gameMode = gamemode == OsuGameModes.None ? (boundUser != null ? boundUser.MainMode : OsuGameModes.STD) : gamemode; SocketUserMessage msg = await Context.Channel.SendMessageAsync("Fetching data...", attachID : true); OsuUser osuUser = await OsuNetwork.DownloadUser(username, gameMode, maxAttempts : 2); EmbedBuilder eb = new EmbedBuilder(); double progressDebug = osuUser.OsuLevel.Progress; eb.Description = $"*• PP:* __***{Math.Round(osuUser.PP, 2, MidpointRounding.AwayFromZero)}***__\n" + $"*• Accuracy:* __***{string.Format("{0:0.##}", osuUser.Accuracy)}%***__\n" + $"*• Level:* __***{osuUser.OsuLevel.Level}***__ ~~-~~ *{osuUser.OsuLevel.Progress.ToString("#0.000%")}*"; if (boundUser != null) { //Get all entries of tracked user gameplay statistics OsuGameModes[] userGameModes = OsuGameModesConverter.ToGameModesArray(boundUser.GameModes); OsuGameModeUserDB[] gameModeUsers = new OsuGameModeUserDB[userGameModes.Length]; for (int i = 0; i < userGameModes.Length; i++) { gameModeUsers[i] = await OsuDB.GetGameModeUserBy_OsuID(boundUser.UserID, userGameModes[i]); } if (userGameModes.Length > 0) { for (int i = 0; i < userGameModes.Length; i++) { string emoji = CustomEmoji.Osu.Gamemode.GetGamemodeEmoji(userGameModes[i]).ToString(); eb.AddField(x => { x.Name = $"{emoji} Total Hits {Enum.GetName(typeof(OsuGameModes), userGameModes[i])} {CustomEmoji.TotalHits_Anim}"; if (gameModeUsers[i] != null) { string hitsDaily = gameModeUsers[i].HitsDaily / 10000 > 0 ? gameModeUsers[i].HitsDaily.ToString("#,#", CultureInfo.InvariantCulture) : gameModeUsers[i].HitsDaily.ToString(); string hitsWeekly = gameModeUsers[i].HitsWeekly / 10000 > 0 ? gameModeUsers[i].HitsWeekly.ToString("#,#", CultureInfo.InvariantCulture) : gameModeUsers[i].HitsWeekly.ToString(); string hitsMonthly = gameModeUsers[i].HitsMonthly / 10000 > 0 ? gameModeUsers[i].HitsMonthly.ToString("#,#", CultureInfo.InvariantCulture) : gameModeUsers[i].HitsMonthly.ToString(); string hitsSince = gameModeUsers[i].HitsSince / 10000 > 0 ? gameModeUsers[i].HitsSince.ToString("#,#", CultureInfo.InvariantCulture) : gameModeUsers[i].HitsSince.ToString(); string totalHits = gameModeUsers[i].TotalHits / 10000 > 0 ? gameModeUsers[i].TotalHits.ToString("#,#", CultureInfo.InvariantCulture) : gameModeUsers[i].TotalHits.ToString(); x.Value = $"*Today:* ***{hitsDaily}***\n" + $"*This Week:* ***{hitsWeekly}***\n" + $"*This Month:* ***{hitsMonthly}***\n" + $"*Since:* ***{hitsSince}*** / ***{totalHits}***"; } else { x.Value = $"No stored data has been found yet.\n" + $"Wait for the next update.\n" + $"*maximum waiting time - 1 minute*"; } if (gameModeUsers.Length > 2 && i < 2) { x.Value += "\n\u200b"; } else if (i == 0) { x.Value += "\t\t\t\u200b"; } x.IsInline = true; }); } } } eb.WithAuthor(x => { x.IconUrl = CustomEmoji.Osu.Gamemode.GetGamemodeEmoji(gameMode).URL; x.Name = osuUser.Username; x.Url = osuUser.ProfileURL; }); eb.Color = Color.LightPink; eb.Thumbnail = osuUser.AvatarURL; await msg.EditAsync("", eb.Build()); }