private async Task CheckFollowerAsync(string chatter, string userTwitchId)
        {
            try
            {
                TwitchChatter follower = await GetTwitchFollowerInfoAsync(chatter, userTwitchId);

                if (follower == null)
                {
                    return;
                }

                /* Manage follower experience */
                int currentExp = await _follower.CurrentExpAsync(chatter, _broadcasterId);

                if (TwitchStreamStatus.IsLive)
                {
                    if (currentExp > -1)
                    {
                        await _follower.UpdateExpAsync(chatter, _broadcasterId, ++currentExp);
                    }
                    else
                    {
                        // add new user to the ranks
                        await _follower.EnlistRecruitAsync(chatter, _broadcasterId);
                    }
                }

                // check if follower has a stream currency account
                int setIncrementFunds = 10; // default to normal follower amount

                if (_follower.IsRegularFollower(currentExp, _botConfig.RegularFollowerHours))
                {
                    setIncrementFunds = 15;

                    if (!_twitchChatterListInstance.TwitchRegularFollowers.Any(c => c.Username == chatter))
                    {
                        _twitchChatterListInstance.TwitchRegularFollowers.Add(follower);
                    }
                }

                /* Manage follower streaming currency */
                if (TwitchStreamStatus.IsLive)
                {
                    int funds = await _bank.CheckBalanceAsync(chatter, _broadcasterId);

                    if (funds > -1)
                    {
                        funds += setIncrementFunds;
                        await _bank.UpdateFundsAsync(chatter, _broadcasterId, funds);
                    }
                    else // ToDo: Make currency auto-increment setting
                    {
                        await _bank.CreateAccountAsync(chatter, _broadcasterId, setIncrementFunds);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error inside FollowerSubscriberListener.CheckFollower(string, string): {ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"Inner Exception: {ex.InnerException.Message}");
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Display the follower's stream rank
        /// </summary>
        /// <param name="chatter">User that sent the message</param>
        /// <returns></returns>
        private async Task <DateTime> ViewRankAsync(TwitchChatter chatter)
        {
            try
            {
                if (chatter.Username == _botConfig.Broadcaster.ToLower())
                {
                    _irc.SendPublicChatMessage($"Here goes {_botConfig.Broadcaster.ToLower()} flexing his rank...oh wait OpieOP");
                    return(DateTime.Now);
                }

                DateTime?createdAt = _twitchChatterListInstance.TwitchFollowers.FirstOrDefault(c => c.Username == chatter.Username)?.CreatedAt ?? null;

                if (createdAt == null)
                {
                    using (HttpResponseMessage message = await _twitchInfo.CheckFollowerStatusAsync(chatter.TwitchId))
                    {
                        string body = await message.Content.ReadAsStringAsync();

                        FollowerJSON response = JsonConvert.DeserializeObject <FollowerJSON>(body);

                        if (!string.IsNullOrEmpty(response.CreatedAt))
                        {
                            createdAt = Convert.ToDateTime(response.CreatedAt);
                        }
                    }
                }

                if (createdAt != null)
                {
                    int currExp = await _follower.CurrentExpAsync(chatter.Username, _broadcasterInstance.DatabaseId);

                    // Grab the follower's associated rank
                    if (currExp > -1)
                    {
                        IEnumerable <Rank> rankList = await _follower.GetRankListAsync(_broadcasterInstance.DatabaseId);

                        Rank    currFollowerRank = _follower.GetCurrentRank(rankList, currExp);
                        decimal hoursWatched     = _follower.GetHoursWatched(currExp);

                        _irc.SendPublicChatMessage($"@{chatter.DisplayName}: \"{currFollowerRank.Name}\" "
                                                   + $"{currExp}/{currFollowerRank.ExpCap} EXP ({hoursWatched} hours watched)");
                    }
                    else
                    {
                        await _follower.EnlistRecruitAsync(chatter.Username, _broadcasterInstance.DatabaseId);

                        _irc.SendPublicChatMessage($"Welcome to the army @{chatter.DisplayName}. View your new rank using !rank");
                    }
                }
                else
                {
                    _irc.SendPublicChatMessage($"{chatter.DisplayName} is not following {_botConfig.Broadcaster.ToLower()}");
                }
            }
            catch (Exception ex)
            {
                await _errHndlrInstance.LogError(ex, "FollowerFeature", "ViewRank(TwitchChatter)", false, "!rank");
            }

            return(DateTime.Now);
        }