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; }
/// <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); }