public async Task GetPlayerStatsAsync_ShouldRaiseArgumentException_WhenNoPlayerNameProvided() { //Arrange var client = new PUBGStatsClient("dummy"); //Act StatsResponse responseTask = await client.GetPlayerStatsAsync(null).ConfigureAwait(false); }
public async Task <ActionResult> GetStats(string userId) { using (var client = new PUBGStatsClient(_apiKey)) { var stats = await client.GetPlayerStatsAsync(userId).ConfigureAwait(false); var na = stats.Stats.Find(s => s.Region == PUBGSharp.Data.Region.NA); var currentSeason = Services.Season.CurrentSeason(); var solo = stats.Stats.FindLast(s => s.Region == PUBGSharp.Data.Region.NA && s.Mode == PUBGSharp.Data.Mode.Solo && s.Season == currentSeason); var duos = stats.Stats.FindLast(s => s.Region == PUBGSharp.Data.Region.NA && s.Mode == PUBGSharp.Data.Mode.Duo && s.Season == currentSeason); var squads = stats.Stats.FindLast(s => s.Region == PUBGSharp.Data.Region.NA && s.Mode == PUBGSharp.Data.Mode.Squad && s.Season == currentSeason); var minimalStats = new Models.MinimalStats() { Solo = new List <string> { solo.Stats.Find(x => x.Stat == Stats.KDR).Value, solo.Stats.Find(x => x.Stat == Stats.Wins).Value, solo.Stats.Find(x => x.Stat == Stats.Top10).Value }, Duos = new List <string> { duos.Stats.Find(x => x.Stat == Stats.KDR).Value, duos.Stats.Find(x => x.Stat == Stats.Wins).Value, duos.Stats.Find(x => x.Stat == Stats.Top10).Value }, Squads = new List <string> { squads.Stats.Find(x => x.Stat == Stats.KDR).Value, squads.Stats.Find(x => x.Stat == Stats.Wins).Value, squads.Stats.Find(x => x.Stat == Stats.Top10).Value } }; var json = JsonConvert.SerializeObject(minimalStats); return(Ok(json)); }; }
public void PUBGStatsClientConstructor_ShouldRaiseArgumentException_WhenNoKeyProvided() { //Arrange //Act var client = new PUBGStatsClient(null); //Assert }
private async Task MainAsync() { // Create client and send a stats request You can either use the "using" keyword or // dispose the PUBGStatsClient manually with the Dispose method. using (var statsClient = new PUBGStatsClient("api-key-here")) { // Searching for Player and Mode var stats = await statsClient.GetPlayerStatsAsync("shroud", mode : Mode.Solo).ConfigureAwait(false); // Searching for Player and specific value // the 1 seconds throttle applies her too, keep that in mind var test = await statsClient.GetPlayerStatsValue("shroud", mode : Mode.Solo, value : Stats.KDR); // Searching for Player, Region, Mode // var stats = await statsClient.GetPlayerStatsAsync("shroud",region: Region.NA, mode: Mode.Solo).ConfigureAwait(false); // Searching for Player, Region // var stats = await statsClient.GetPlayerStatsAsync("shroud", region: Region.NA).ConfigureAwait(false); // Print out player name and date the stats were last updated at. Console.WriteLine($"{stats.nickname}, last updated at: {stats.LastUpdated}"); try { //Print out Region chosen with mode selected // Stats[0] = the region u selected, eg EU in this example // Stats[1] = region AGG. The API also outputs the AGG values even when you select a specific region. var latestKillstats = stats.Stats[0].Stats.Find(x => x.Stat == Stats.Kills); // Print out amount of kills in the last season player has played in: // This old searching method from the APIv1 still works! var latestSeasonSoloStats = stats.Stats.FindLast(x => x.Mode == Mode.Solo); var kills = latestSeasonSoloStats.Stats.Find(x => x.Stat == Stats.Kills); Console.WriteLine($"Season: {latestSeasonSoloStats.Season}, kills: {kills.Value}"); } /* IMPORTANT STUFF ABOUT EXCEPTIONS: * The LINQ and other selector methods (e.g. .Find) will throw NullReferenceException in case the stats don't exist. * So if player has no stats in specified region or game mode, it will throw NullReferenceException. * For example, if you only have played in Europe and try to look up your stats in the Asia server, instead of showing 0's everywhere it throws this. */ catch (PUBGSharpException ex) { Console.WriteLine($"Could not retrieve stats for {stats.nickname}, error: {ex.Message}"); } catch (NullReferenceException) { Console.WriteLine($"Could not retrieve stats for {stats.nickname}."); Console.WriteLine("The player might not exist or have stats in the specified mode or region."); } /* Outputs: * Mithrain, last updated at: 2017-09-07T19:53:40.3611629Z * Duo KDR: 2.87 * Stat: Headshot Kills, value: 69, Rank: # * Season: 2017-pre4, kills: 32 */ } await Task.Delay(-1); }
private async Task MainAsync() { // Create client and send a stats request You can either use the "using" keyword or // dispose the PUBGStatsClient manually with the Dispose method. using (var statsClient = new PUBGStatsClient("api-key-here")) { var stats = await statsClient.GetPlayerStatsAsync("Mithrain", Region.AGG).ConfigureAwait(false); // Print out player name and date the stats were last updated at. Console.WriteLine($"{stats.nickname}, last updated at: {stats.LastUpdated}"); try { //Print out Region chosen with mode selected // Stats[0] = the region u selected, eg EU in this example // Stats[1] = region AGG. The API also outputs the AGG values even when you select a specific region. var latestKillstats = stats.Stats[0].Stats.Find(x => x.Stat == Stats.Kills); //The Find method from APIv1 still works in APIv2 // Print out amount of players KDR (Stats.KDR) in DUO mode (Mode.Duo) in ALL // regions (Region.AGG) in SEASON 1 (Seasons.EASeason1). var kdr = stats.Stats.Find(x => x.Mode == Mode.Duo && x.Region == Region.AGG && x.Season == Seasons.EASeason1).Stats.Find(x => x.Stat == Stats.KDR).Value; Console.WriteLine($"Duo KDR: {kdr}"); // Print out amount of headshots kills in SOLO mode in NA region in SEASON 2. var headshotKills = stats.Stats.Find(x => x.Mode == Mode.Solo && x.Region == Region.NA && x.Season == Seasons.EASeason2).Stats.Find(x => x.Stat == Stats.HeadshotKills); // You can also display the stats by using .ToString() on the stat object, e.g: Console.WriteLine(headshotKills.ToString()); // Print out amount of kills in the last season player has played in: var latestSeasonSoloStats = stats.Stats.FindLast(x => x.Mode == Mode.Solo); var kills = latestSeasonSoloStats.Stats.Find(x => x.Stat == Stats.Kills); Console.WriteLine($"Season: {latestSeasonSoloStats.Season}, kills: {kills.Value}"); } /* IMPORTANT STUFF ABOUT EXCEPTIONS: * The LINQ and other selector methods (e.g. .Find) will throw NullReferenceException in case the stats don't exist. * So if player has no stats in specified region or game mode, it will throw NullReferenceException. * For example, if you only have played in Europe and try to look up your stats in the Asia server, instead of showing 0's everywhere it throws this. */ catch (PUBGSharpException ex) { Console.WriteLine($"Could not retrieve stats for {stats.nickname}, error: {ex.Message}"); } catch (NullReferenceException) { Console.WriteLine($"Could not retrieve stats for {stats.nickname}."); Console.WriteLine("The player might not exist or have stats in the specified mode or region."); } /* Outputs: * Mithrain, last updated at: 2017-09-07T19:53:40.3611629Z * Duo KDR: 2.87 * Stat: Headshot Kills, value: 69, Rank: # * Season: 2017-pre4, kills: 32 */ } await Task.Delay(-1); }
public async Task useApiAsync() { var statsClient = new PUBGStatsClient("3922a41f-afb0-42b0-b401-af64563159bb"); var stats = await statsClient.GetPlayerStatsAsync("Shroud"); try { var kdr = stats.Stats.Find(x => x.Mode == Mode.Duo && x.Region == Region.AGG && x.Season == Seasons.EASeason1).Stats.Find(x => x.Stat == Stats.KDR); Console.WriteLine($"Duo KDR: {kdr.Value}"); DuoKda = kdr.Value; } catch (NullReferenceException) { Console.WriteLine($"Could not retrieve stats for {stats.PlayerName}.."); } }
private async Task MainAsync() { // Create client and send a stats request You can either use the "using" keyword or // dispose the PUBGStatsClient manually with the Dispose method. using (var statsClient = new PUBGStatsClient("api-key-here")) { var stats = await statsClient.GetPlayerStatsAsync("Mithrain").ConfigureAwait(false); // Print out player name and date the stats were last updated at. Console.WriteLine($"{stats.PlayerName}, last updated at: {stats.LastUpdated}"); try { // Print out amount of players KDR (Stats.KDR) in DUO mode (Mode.Duo) in ALL // regions (Region.AGG) in SEASON 1 (Seasons.EASeason1). var kdr = stats.Stats.Find(x => x.Mode == Mode.Duo && x.Region == Region.AGG && x.Season == Seasons.EASeason1).Stats.Find(x => x.Stat == Stats.KDR).Value; Console.WriteLine($"Duo KDR: {kdr}"); // Print out amount of headshots kills in SOLO mode in NA region in SEASON 2. var headshotKills = stats.Stats.Find(x => x.Mode == Mode.Solo && x.Region == Region.NA && x.Season == Seasons.EASeason2).Stats.Find(x => x.Stat == Stats.HeadshotKills); // You can also display the stats by using .ToString() on the stat object, e.g: Console.WriteLine(headshotKills.ToString()); } /* IMPORTANT STUFF ABOUT EXCEPTIONS: * The LINQ and other selector methods (e.g. .Find) will throw NullReferenceException in case the stats don't exist. * So if player has no stats in specified region or game mode, it will throw NullReferenceException. * For example, if you only have played in Europe and try to look up your stats in the Asia server, instead of showing 0's everywhere it throws this. */ catch (PUBGSharpException ex) { Console.WriteLine($"Could not retrieve stats for {stats.PlayerName}, error: {ex.Message}"); } catch (NullReferenceException) { Console.WriteLine($"Could not retrieve stats for {stats.PlayerName}."); Console.WriteLine("The player might not exist or have stats in the specified mode or region."); } /* Outputs: * Mithrain, last updated at: 2017-06-13T19:12:24.0579462Z * Duo KDR: 2.87 * Stat: HeadshotKills, value: 54, Rank: #533 */ } await Task.Delay(-1); }
public void GetPlayerStatsAsync_ShouldRaiseArgumentException_WhenNoPlayerNameProvided() { //Arrange var client = new PUBGStatsClient("dummy"); //Act try { StatsResponse responseTask = client.GetPlayerStatsAsync(null).Result; } catch (Exception e) { //Assert //In case of awaitable tasks, aggregate exception is thrown, which should contain expected ArgumentException. Assert.IsInstanceOfType(e.InnerException, typeof(ArgumentException)); } }
public static async Task <StatsResponse> GetStats(string steamId) { if (string.IsNullOrEmpty(steamId)) { throw new ArgumentException("Value cannot be null or empty.", nameof(steamId)); } var httpClient = new HttpClient(); var apiKey = ConfigurationManager.AppSettings["trackerHttpHeader"].Split(':')[1].Trim(); var httpHeader = ConfigurationManager.AppSettings["trackerHttpHeader"].Split(':')[0]; httpClient.DefaultRequestHeaders.Add(httpHeader, apiKey); //Get PUBG Nickname by SteamID(64 - bit number) //GET https://pubgtracker.com/api/search?steamId={STEAM ID} dynamic pubgNicknamebySteamId = JsonConvert.DeserializeObject(await httpClient.GetStringAsync($"https://pubgtracker.com/api/search?steamId={steamId}")); var statsClient = new PUBGStatsClient(apiKey); return(await statsClient.GetPlayerStatsAsync(pubgNicknamebySteamId.Nickname.ToString())); }
public Embed GetUserInfo(string username, Mode mode) { var user = new PUBGStatsClient(Keys.PubgKey).GetPlayerStatsAsync(username).Result; string[] relevantStats = { "Kills", "Win %", "Loesses", "Rating", "Top 10s", "K/D Ratio", "Longest Kill", "Round Most Kills", "Assists" }; string statsString = default(string); user.Stats.Find(e => e.Mode == mode && e.Region == Region.NA).Stats.OrderBy <StatModel, int>(e => e.Stat.Count()).Foreach(e => { if (e.Rank.HasValue && relevantStats.Contains(e.Stat)) { statsString += $"{e.Stat} - #{e.Rank} - {e.Value} \n"; } }); return(new EmbedBuilder() .WithTitle(user.PlayerName) .WithDescription(statsString) .WithColor(new Color(255, 255, 0)) .WithThumbnailUrl(user.Avatar) .Build()); }
public async Task squadAllRegions([Remainder] string user) { var username = user; string apiKey = Settings.Default.apiKey; //create the statsClient with api key var statsClient = new PUBGStatsClient(apiKey); //wrapper to call the api var stats = await statsClient.GetPlayerStatsAsync(username); try { var SquadRank = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.Rating).Rank; var KDR = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.KDR).Value; var kills = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.Kills).Value; var wins = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.Wins).Value; var win_percentage = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.WinPercentage).Value; var roundsPlayed = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.RoundsPlayed).Value; var KPG = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.KillsPerGame).Value; var longestkill = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.LongestKill).Value; var KO = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.Knockouts).Value; var rating = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.Rating).Value; double knockoutsPerGame = Math.Round((double.Parse(KO) / double.Parse(roundsPlayed)), 3); var assists = stats.Stats.Find(x => x.Mode == Mode.Squad && x.Region == Region.AGG && x.Season == Seasons.EASeason3).Stats.Find(x => x.Stat == Stats.Assists).Value; await Context.Channel.SendMessageAsync("\n```Rank: " + SquadRank.ToString() + "\n" + "Rating: " + rating.ToString() + "\n" + "\n" + "KDR: " + KDR.ToString() + "\n" + "Kills: " + kills.ToString() + "\n" + "Kills/Game: " + KPG.ToString() + "\n" + "Assits: " + assists.ToString() + "\n" + "Knockouts: " + KO.ToString() + "\n" + "Knockouts/Game: " + knockoutsPerGame.ToString() + "\n" + "Longest Kill: " + longestkill.ToString() + " meters \n" + "\n" + "Wins: " + wins.ToString() + "\n" + "Win Percentage: " + win_percentage + "\n" + "Games Played: " + roundsPlayed + "\n" + "```"); } catch (PUBGSharpException ex) { await ReplyAsync("Could not retrieve stats for " + username + " error: " + ex.Message); throw; } catch (ArgumentNullException excep) { await ReplyAsync("Could not retrieve stats for " + username + " error: " + excep.Message); throw; } }