示例#1
0
        public async Task GetMatches(EduardoContext context, string username, PubgPlatform platform)
        {
            PubgPlayer player = await GetPlayerFromApiAsync(username, platform);

            if (player == null)
            {
                await context.Channel.SendMessageAsync($"No player found with username \"{username}\"");

                return;
            }

            List <Embed> embeds = new List <Embed>();

            foreach (string matchId in player.MatchIds.Take(_pubgData.MaxMatches))
            {
                PubgMatch match = await GetMatchFromApiAsync(matchId, platform);

                TimeSpan        matchDuration = TimeSpan.FromSeconds(match.Duration);
                PubgRoster      roster        = match.Rosters.FirstOrDefault(r => r.Participants.Any(p => p.Stats.PlayerId == player.Id));
                PubgParticipant participant   = match.Rosters.SelectMany(r => r.Participants).FirstOrDefault(p => p.Stats.PlayerId == player.Id);
                TimeSpan        timeSurvived  = TimeSpan.FromSeconds(participant?.Stats.TimeSurvived ?? 0);

                embeds.Add(new EmbedBuilder()
                           .WithTitle(match.GameMode.ToString())
                           .WithColor(Color.Orange)
                           .AddField("Started", DateTime.Parse(match.CreatedAt), true)
                           .AddField("Duration", $"{matchDuration.Minutes:D2}m {matchDuration.Seconds:D2}s", true)
                           .AddField("Player Count", match.Rosters.Count(), true)
                           .AddField("Placement", roster != null
                        ? $"#{roster.Stats.Rank}"
                        : "Unknown", true)
                           .AddConditionalField("Death Reason", participant?.Stats.DeathType.ToString() ?? "Unknown",
                                                participant != null && participant.Stats.DeathType == PubgParticipantDeathType.Alive, true)
                           .AddField("Kills", participant?.Stats.Kills.ToString() ?? "Unknown", true)
                           .AddField("Damage Dealt", participant != null
                        ? Math.Round(participant.Stats.DamageDealt, 2).ToString(CultureInfo.InvariantCulture)
                        : "Unknown", true)
                           .AddField("Headshot %", participant != null
                        ? participant.Stats.Kills > 0
                            ? (participant.Stats.HeadshotKills / participant.Stats.Kills * 100).ToString()
                            : "0%"
                        : "Unknown", true)
                           .AddField("Time Survived", participant != null
                        ? $"{timeSurvived.Minutes:D2}m {timeSurvived.Seconds:D2}s"
                        : "Unknown", true)
                           .AddField("Distance Travelled", participant != null
                        ? Math.Round(participant.Stats.RideDistance + participant.Stats.WalkDistance, 2).ToString(CultureInfo.InvariantCulture)
                        : "Unknown", true)
                           .AddField("DBNOs", participant?.Stats.DBNOs.ToString() ?? "Unknown", true)
                           .AddField("Heals Used", participant?.Stats.Heals.ToString() ?? "Unknown", true)
                           .AddField("Boosts Used", participant?.Stats.Boosts.ToString() ?? "Unknown", true)
                           .WithFooter($"Match Data for {participant?.Stats.Name ?? "Unknown"} for match {matchId}",
                                       "https://steemit-production-imageproxy-thumbnail.s3.amazonaws.com/U5dt5ZoFC4oMbrTPSSvVHVfyGSakHWV_1680x8400")
                           .Build());
            }

            await context.SendMessageOrPaginatedAsync(embeds);
        }
示例#2
0
 private static IEnumerable <PlayerResult> GetPlayerResultFromMatch(PubgMatch match)
 {
     foreach (PubgRoster roster in match.Rosters)
     {
         foreach (PubgParticipant participant in roster.Participants)
         {
             var player = new PlayerResult(participant.Stats.Name, roster.Stats.Rank, participant.Stats.Kills);
             yield return(player);
         }
     }
 }
示例#3
0
        public IEnumerable <PlayerResult> GetResult()
        {
            PubgPlatform platform = GetPubgPlatform();

            PubgMatch match = GetMatch(platform);

            if (match == null)
            {
                yield break;
            }

            foreach (PlayerResult playerResult in GetPlayerResultFromMatch(match))
            {
                yield return(playerResult);
            }
        }