Exemplo n.º 1
0
        /// <summary>
        /// Greet a user (new or returning) with a welcome message and a "thank-you" deposit of stream currency
        /// </summary>
        ///<param name="chatter"></param>
        private async Task GreetUserAsync(TwitchChatter chatter)
        {
            try
            {
                if (!_greetedUsers.Any(u => u == chatter.Username) &&
                    chatter.Username != _botConfig.Broadcaster.ToLower() &&
                    chatter.Message.Length > 1 &&
                    TwitchStreamStatus.IsLive)
                {
                    // check if user has a stream currency account
                    int funds = await _bank.CheckBalanceAsync(chatter.Username, _broadcasterInstance.DatabaseId);

                    int greetedDeposit = 500; // ToDo: Make greeted deposit config setting

                    if (funds > -1 || chatter.Badges.Contains("moderator") || chatter.Badges.Contains("vip") || chatter.Badges.Contains("bits"))
                    {
                        int currentExp = await _follower.CurrentExpAsync(chatter.Username, _broadcasterInstance.DatabaseId);

                        IEnumerable <Rank> rankList = await _follower.GetRankListAsync(_broadcasterInstance.DatabaseId);

                        Rank rank = _follower.GetCurrentRank(rankList, currentExp);

                        string rankName = "";
                        if (rank != null)
                        {
                            rankName = rank.Name;
                        }

                        funds += greetedDeposit; // deposit stream currency
                        await _bank.UpdateFundsAsync(chatter.Username, _broadcasterInstance.DatabaseId, funds);

                        _irc.SendPublicChatMessage($"Welcome back {rankName} @{chatter.DisplayName} ! "
                                                   + $"Let me reward your return with {greetedDeposit} {_botConfig.CurrencyType}");
                    }
                    else
                    {
                        await _bank.CreateAccountAsync(chatter.Username, _broadcasterInstance.DatabaseId, greetedDeposit);

                        _irc.SendPublicChatMessage($"Welcome to the channel @{chatter.DisplayName} ! Thanks for saying something! "
                                                   + $"Let me show you my appreciation with {greetedDeposit} {_botConfig.CurrencyType}");
                    }

                    _greetedUsers.Add(chatter.Username); // make sure user doesn't get greeted again as long as this bot is alive
                }
            }
            catch (Exception ex)
            {
                await _errHndlrInstance.LogError(ex, "TwitchBotApplication", "GreetUser(TwitchChatter)", false);
            }
        }
        /// <summary>
        /// Check the chatter list for any followers or subscribers
        /// </summary>
        /// <returns></returns>
        private async Task CheckChatterFollowersSubscribersAsync()
        {
            try
            {
                DateTime timeToGetOut = DateTime.Now.AddSeconds(3);

                // Wait until chatter lists are available
                while (!_twitchChatterListInstance.AreListsAvailable && DateTime.Now < timeToGetOut)
                {
                    Thread.Sleep(500);
                }

                IEnumerable <string> availableChatters = _twitchChatterListInstance.ChattersByName;
                if (availableChatters == null || availableChatters.Count() == 0)
                {
                    return;
                }

                _rankList = await _follower.GetRankListAsync(_broadcasterId);

                if (_rankList == null)
                {
                    _rankList = await _follower.CreateDefaultRanksAsync(_broadcasterId);
                }

                // Check for existing or new followers/subscribers
                for (int i = 0; i < availableChatters.Count(); i++)
                {
                    string chatter = availableChatters.ElementAt(i);

                    // skip bot and broadcaster
                    if (string.Equals(chatter, _botConfig.BotName, StringComparison.CurrentCultureIgnoreCase) ||
                        string.Equals(chatter, _botConfig.Broadcaster, StringComparison.CurrentCultureIgnoreCase))
                    {
                        continue;
                    }

                    // get chatter info
                    RootUserJSON rootUserJSON = await _twitchInfo.GetUsersByLoginNameAsync(chatter);

                    string userTwitchId = rootUserJSON.Users.FirstOrDefault()?.Id;

                    // skip chatter if Twitch ID is missing
                    if (string.IsNullOrEmpty(userTwitchId))
                    {
                        continue;
                    }

                    // check for follower and/or subscriber and add then to their respective lists
                    await CheckFollowerAsync(chatter, userTwitchId);
                    await CheckSubscriberAsync(chatter, userTwitchId);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error inside FollowerSubscriberListener.CheckChatterFollowersSubscribers(): {ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"Inner Exception: {ex.InnerException.Message}");
                }
            }
        }
Exemplo n.º 3
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);
        }