Esempio n. 1
0
 public TwitchBotApplication(Configuration appConfig, TwitchInfoService twitchInfo, SongRequestBlacklistService songRequestBlacklist,
                             FollowerService follower, BankService bank, FollowerSubscriberListener followerListener, ManualSongRequestService manualSongRequest, PartyUpService partyUp,
                             GameDirectoryService gameDirectory, QuoteService quote, BankHeist bankHeist, TwitchChatterListener twitchChatterListener, IrcClient irc,
                             BossFight bossFight, SongRequestSettingService songRequestSetting, InGameUsernameService ign, LibVLCSharpPlayer libVLCSharpPlayer)
 {
     _appConfig    = appConfig;
     _botConfig    = appConfig.GetSection("TwitchBotConfig") as TwitchBotConfigurationSection;
     _greetedUsers = new List <string>();
     _twitchInfo   = twitchInfo;
     _follower     = follower;
     _followerSubscriberListener = followerListener;
     _bank = bank;
     _songRequestBlacklist = songRequestBlacklist;
     _manualSongRequest    = manualSongRequest;
     _gameDirectory        = gameDirectory;
     _quote                 = quote;
     _bankHeist             = bankHeist;
     _twitchChatterListener = twitchChatterListener;
     _bossFight             = bossFight;
     _songRequestSetting    = songRequestSetting;
     _ign = ign;
     _libVLCSharpPlayer = libVLCSharpPlayer;
     _irc     = irc;
     _partyUp = partyUp;
 }
Esempio n. 2
0
        /// <summary>
        /// Engage in the bank heist minigame
        /// </summary>
        /// <param name="chatter">User that sent the message</param>
        public async Task <DateTime> BankHeist(TwitchChatter chatter)
        {
            try
            {
                BankHeist bankHeist = new BankHeist();
                int       funds     = await _bank.CheckBalanceAsync(chatter.Username, _broadcasterInstance.DatabaseId);

                int  gambleIndex = chatter.Message.IndexOf(" ");
                bool isValid     = true;
                int  gamble      = 0;

                if (gambleIndex != -1)
                {
                    string parseGamble = chatter.Message.Substring(gambleIndex);
                    isValid = int.TryParse(parseGamble, out gamble);
                }

                if (_heistSettingsInstance.IsHeistOnCooldown())
                {
                    TimeSpan cooldown = _heistSettingsInstance.CooldownTimePeriod.Subtract(DateTime.Now);

                    if (cooldown.Minutes >= 1)
                    {
                        _irc.SendPublicChatMessage(_heistSettingsInstance.CooldownEntry
                                                   .Replace("@timeleft@", cooldown.Minutes.ToString()));
                    }
                    else
                    {
                        _irc.SendPublicChatMessage(_heistSettingsInstance.CooldownEntry
                                                   .Replace("@timeleft@", cooldown.Seconds.ToString())
                                                   .Replace("minutes", "seconds"));
                    }

                    return(DateTime.Now);
                }

                if (bankHeist.HasRobberAlreadyEntered(chatter.Username))
                {
                    _irc.SendPublicChatMessage($"You are already in this heist @{chatter.DisplayName}");
                    return(DateTime.Now);
                }

                // check if funds and gambling amount are valid
                if (!isValid)
                {
                    _irc.SendPublicChatMessage($"Please gamble with a positive amount of {_botConfig.CurrencyType} @{chatter.DisplayName}");
                    return(DateTime.Now);
                }
                else if (funds > 0 && gamble == 0 && (chatter.Message.ToLower() == "!bankheist" || chatter.Message.ToLower() == "!heist"))
                {
                    // make sure the user can gamble something if an amount wasn't specified
                    if (funds > _heistSettingsInstance.MaxGamble)
                    {
                        gamble = _heistSettingsInstance.MaxGamble;
                    }
                    else
                    {
                        gamble = funds;
                    }
                }
                else if (gamble < 1)
                {
                    _irc.SendPublicChatMessage($"You cannot gamble less than one {_botConfig.CurrencyType} @{chatter.DisplayName}");
                    return(DateTime.Now);
                }
                else if (funds < 1)
                {
                    _irc.SendPublicChatMessage($"You need at least one {_botConfig.CurrencyType} to join the heist @{chatter.DisplayName}");
                    return(DateTime.Now);
                }
                else if (funds < gamble)
                {
                    _irc.SendPublicChatMessage($"You do not have enough to gamble {gamble} {_botConfig.CurrencyType} @{chatter.DisplayName}");
                    return(DateTime.Now);
                }
                else if (gamble > _heistSettingsInstance.MaxGamble)
                {
                    _irc.SendPublicChatMessage($"{_heistSettingsInstance.MaxGamble} {_botConfig.CurrencyType} is the most you can put in. " +
                                               $"Please try again with less {_botConfig.CurrencyType} @{chatter.DisplayName}");
                    return(DateTime.Now);
                }

                if (!bankHeist.IsEntryPeriodOver())
                {
                    // make heist announcement if first robber and start recruiting members
                    if (_heistSettingsInstance.Robbers.Count == 0)
                    {
                        _heistSettingsInstance.EntryPeriod = DateTime.Now.AddSeconds(_heistSettingsInstance.EntryPeriodSeconds);
                        _irc.SendPublicChatMessage(_heistSettingsInstance.EntryMessage.Replace("user@", chatter.Username));
                    }

                    // join bank heist
                    BankRobber robber = new BankRobber {
                        Username = chatter.Username, Gamble = gamble
                    };
                    bankHeist.Produce(robber);
                    await _bank.UpdateFundsAsync(chatter.Username, _broadcasterInstance.DatabaseId, funds - gamble);

                    // display new heist level
                    if (!string.IsNullOrEmpty(bankHeist.NextLevelMessage()))
                    {
                        _irc.SendPublicChatMessage(bankHeist.NextLevelMessage());
                    }

                    // display if more than one robber joins
                    if (_heistSettingsInstance.Robbers.Count > 1)
                    {
                        _irc.SendPublicChatMessage($"@{chatter.DisplayName} has joined the heist");
                    }
                }
            }
            catch (Exception ex)
            {
                await _errHndlrInstance.LogError(ex, "MinigameFeature", "BankHeist(TwitchChatter)", false, "!bankheist", chatter.Message);
            }

            return(DateTime.Now);
        }