Пример #1
0
        private User GetUser(IPatreonData data, out UserPatreon patreon)
        {
            patreon = GetOrCreateUserPatreon(data);
            var user = patreon.UserId == null?TryGetUser(data) : gameData.GetUser(patreon.UserId.GetValueOrDefault());

            var now = DateTime.UtcNow;

            if (patreon.UserId == null)
            {
                if (!string.IsNullOrEmpty(data.TwitchUserId))
                {
                    patreon.TwitchUserId = data.TwitchUserId;
                    patreon.Updated      = now;
                }

                if (user != null)
                {
                    patreon.TwitchUserId = user.UserId;
                    patreon.UserId       = user.Id;
                    patreon.Updated      = now;
                }
            }

            if (string.IsNullOrEmpty(patreon.FirstName))
            {
                patreon.FirstName = data.FullName?.Split(' ')?.FirstOrDefault();
                patreon.Updated   = now;
            }

            return(user);
        }
Пример #2
0
        private UserPatreon GetOrCreateUserPatreon(IPatreonData data)
        {
            var patreon = gameData.GetPatreonUser(data.PatreonId);

            if (patreon != null)
            {
                return(patreon);
            }

            var now       = DateTime.UtcNow;
            var firstName = data.FullName?.Split(' ')?.FirstOrDefault();

            var pledgeAmount = GetPledgeAmount(data);
            var title        = GetTierTitle(data);

            patreon = new UserPatreon()
            {
                Id           = Guid.NewGuid(),
                Email        = data.Email,
                FullName     = data.FullName,
                PatreonId    = data.PatreonId,
                PledgeAmount = pledgeAmount,
                PledgeTitle  = title,
                Tier         = data.Tier,
                TwitchUserId = data.TwitchUserId,
                FirstName    = firstName,
                //TwitchUserId = data.TwitchUserId ?? user?.UserId,
                //UserId = user?.Id,
                Updated = now,
                Created = now,
            };
            gameData.Add(patreon);
            return(patreon);
        }
Пример #3
0
        private static string GetTierTitle(IPatreonData data)
        {
            var title = data.RewardTitle;

            if (!string.IsNullOrEmpty(title) && title.Contains(','))
            {
                title = title.Split(',')[0];
            }

            return(title);
        }
Пример #4
0
        public void RemovePledge(IPatreonData data)
        {
            var user = GetUser(data, out var patreon);

            return; // don't remove anything, but we should flag it to expire?

            //if (user != null &&
            //    (data.Status == null || data.Status.IndexOf("active", StringComparison.OrdinalIgnoreCase) < 0))
            //    user.PatreonTier = null;

            //user.PatreonExpires = ...
        }
Пример #5
0
        private static long GetPledgeAmount(IPatreonData data)
        {
            long pledgeAmount = 0;

            if (!string.IsNullOrEmpty(data.PledgeAmountCents))
            {
                var value = data.PledgeAmountCents;
                if (data.PledgeAmountCents.Contains(','))
                {
                    value = data.PledgeAmountCents.Split(',')[0];
                }

                long.TryParse(value, out pledgeAmount);
            }

            return(pledgeAmount);
        }
Пример #6
0
        private User TryGetUser(IPatreonData data)
        {
            var firstName      = data.FullName?.Split(' ')?.FirstOrDefault();
            var twitchUserName = "";

            if (!string.IsNullOrEmpty(data.TwitchUrl))
            {
                twitchUserName = data.TwitchUrl.Split('/').LastOrDefault()?.ToLower();
            }
            var emailLower = data.Email.ToLower();
            var emailuser  = emailLower.Split('@').FirstOrDefault();

            return(gameData.FindUser(u =>
            {
                if (u == null)
                {
                    return false;
                }

                var email = u.Email?.ToLower() ?? string.Empty;

                if (!string.IsNullOrEmpty(twitchUserName) && u.UserName.ToLower() == twitchUserName)
                {
                    return true;
                }

                if (!string.IsNullOrEmpty(data.TwitchUserId) && u.UserId == data.TwitchUserId)
                {
                    return true;
                }

                if (!string.IsNullOrEmpty(u.UserName) && (u.UserName.ToLower() == firstName?.ToLower() || u.UserName.ToLower() == emailuser))
                {
                    return true;
                }

                if (email == emailLower || email.StartsWith(emailuser + "@"))
                {
                    return true;
                }

                return false;
            }));
        }
Пример #7
0
        public void UpdatePledge(IPatreonData data)
        {
            var user = GetUser(data, out var patreon);
            var currentPledgeAmount = patreon.PledgeAmount.GetValueOrDefault();

            var newPledgeAmount = GetPledgeAmount(data);

            if (data.Tier >= patreon.Tier || newPledgeAmount >= currentPledgeAmount)
            {
                patreon.PledgeAmount = newPledgeAmount;
                patreon.PledgeTitle  = GetTierTitle(data);
                patreon.Tier         = data.Tier;
            }

            if (user != null && patreon.Tier > user.PatreonTier)
            {
                user.PatreonTier = patreon.Tier;
            }

            patreon.Updated = DateTime.UtcNow;
        }
Пример #8
0
 public void AddPledge(IPatreonData data)
 {
     UpdatePledge(data);
 }