Exemple #1
0
        public IEnumerable <Embed> BuildDetailedAthleteEmbeds(LeaderboardParticipant participant,
                                                              DetailedAthlete athlete)
        {
            var results = new List <Embed>();

            var embedBuilder = new EmbedBuilder()
                               .WithCurrentTimestamp();

            if (participant == null)
            {
                results.Add(embedBuilder
                            .WithTitle("Participant Not Found")
                            .Build());
                return(results);
            }

            embedBuilder.WithTitle($"Leaderboard participant's profile");
            var embedFieldsAdded = 0;

            embedBuilder
            .AddField(efb => efb.WithName("Discord Id")
                      .WithValue(participant.DiscordUserId)
                      .WithIsInline(true));
            embedFieldsAdded++;
            foreach (var propertyInfo in athlete.GetType().GetProperties())
            {
                if (string.IsNullOrEmpty(propertyInfo.Name) || StravaPropertyBlacklist.Contains(propertyInfo.Name))
                {
                    continue;
                }

                var value = propertyInfo.GetValue(athlete)?.ToString();
                if (string.IsNullOrEmpty(value))
                {
                    continue;
                }

                embedBuilder
                .AddField(efb => efb.WithName(propertyInfo.Name ?? "N/A")
                          .WithValue(value)
                          .WithIsInline(true));
                embedFieldsAdded++;
            }

            if (embedFieldsAdded >= 25)
            {
                results.Add(embedBuilder.Build());
                embedBuilder = new EmbedBuilder().WithCurrentTimestamp()
                               .WithTitle($"Detailed Info - {participant.DiscordUserId} - CONTINUED");
            }

            if (embedBuilder.Fields.Count > 0)
            {
                results.Add(embedBuilder.Build());
            }

            return(results);
        }
Exemple #2
0
        public Embed BuildAthleteInfoEmbed(LeaderboardParticipant participant, DetailedAthlete athlete)
        {
            var embedBuilder = new EmbedBuilder()
                               .WithCurrentTimestamp()
                               .AddField("Discord User Id", participant.DiscordUserId, true)
                               .AddField("Strava First Name", athlete?.Firstname ?? "Unknown", true)
                               .AddField("Strava Athlete Id", participant.StravaId, true)
                               .AddField("Strava Body Weight",
                                         (athlete.Weight ?? 0) == 0
                        ? "Not Specified"
                        : athlete.Weight.ToString(), true)
                               .AddField("Strava FTP", athlete?.Ftp?.ToString() ?? "Not Specified", true);

            return(embedBuilder.Build());
        }
        public static async Task GetAuthenticatedAthleteAsync()
        {
            //Получаем токен
            TokenModel token;

            token = Token.RenewToken();
            Configuration.ApiKey.Add("access_token", token.Access_token);
            Configuration.ApiKey.Add("refresh_token", token.Refresh_token);
            Console.WriteLine(token.Access_token);

            //Подключаемся к БД
            string         connString    = "mongodb://192.168.1.200:27017";
            MongoClient    client        = new(connString);
            IMongoDatabase mongoDatabase = client.GetDatabase("strava");

            //Получаем данные и сохраняем в БД
            var apiInstance = new AthletesApi();

            try
            {
                // Get Authenticated Athlete
                DetailedAthlete result     = apiInstance.GetLoggedInAthlete();
                var             collection = mongoDatabase.GetCollection <AuthenticatedAthlete>("user");

                AuthenticatedAthlete athlete = new()
                {
                    Id             = (int)result.Id,
                    Resource_state = (int)result.ResourceState,
                    Firstname      = result.Firstname,
                    Lastname       = result.Lastname,
                    City           = result.City,
                    State          = result.State,
                    Country        = result.Country,
                    Profile        = result.Profile,
                    Created_at     = (DateTime)result.CreatedAt
                };
                await collection.InsertOneAsync(athlete);

                Console.WriteLine(result);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }