public async Task CmdRefreshBossFight() { try { // Check if any fighters are queued or fighting if (_bossFightSettingsInstance.Fighters.Count > 0) { _irc.SendPublicChatMessage($"A boss fight is either queued or in progress @{_botConfig.Broadcaster}"); return; } // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelById(); string gameTitle = json.Game; // Grab game id in order to find party member TwitchGameCategory game = await _gameDirectory.GetGameId(gameTitle); // During refresh, make sure no fighters can join _bossFightSettingsInstance.RefreshBossFight = true; await _bossFightSettingsInstance.LoadSettings(_broadcasterInstance.DatabaseId, game?.Id, _botConfig.TwitchBotApiLink); _bossFightSettingsInstance.RefreshBossFight = false; _irc.SendPublicChatMessage($"Boss fight settings refreshed @{_botConfig.Broadcaster}"); } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdBrdCstr", "CmdRefreshBossFight()", false, "!refreshbossfight"); } }
public async Task CmdSetGameIgn(string message) { try { string gameIgn = message.Substring(message.IndexOf(" ") + 1); // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelById(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameId(gameTitle); InGameUsername ign = await _ign.GetInGameUsername(_broadcasterInstance.DatabaseId, game); if (ign == null || (ign != null && ign.GameId == null)) { await _ign.CreateInGameUsername(game.Id, _broadcasterInstance.DatabaseId, gameIgn); _irc.SendPublicChatMessage($"Yay! You've set your IGN for {gameTitle} to \"{gameIgn}\""); } else { ign.Message = gameIgn; await _ign.UpdateInGameUsername(ign.Id, _broadcasterInstance.DatabaseId, ign); _irc.SendPublicChatMessage($"Yay! You've updated your IGN for {gameTitle} to \"{gameIgn}\""); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdBrdCstr", "CmdSetGameIgn(string)", false, "!setgameign"); } }
private async Task <bool> IsMultiplayerGameAsync(string username) { // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; // Grab game id in order to find party member TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); if (string.IsNullOrEmpty(gameTitle)) { _irc.SendPublicChatMessage("I cannot see the name of the game. It's currently set to either NULL or EMPTY. " + "Please have the chat verify that the game has been set for this stream. " + $"If the error persists, please have @{_botConfig.Broadcaster.ToLower()} retype the game in their Twitch Live Dashboard. " + "If this error shows up again and your chat can see the game set for the stream, please contact my master with !support in this chat"); return(false); } else if (game == null || game.Id == 0) { _irc.SendPublicChatMessage($"I cannot find the game, \"{gameTitle.TrimEnd()}\", in the database. " + $"Have my master resolve this issue by typing !support in this chat @{username}"); return(false); } if (!game.Multiplayer) { _irc.SendPublicChatMessage("This game is set to single-player only. " + $"Contact my master with !support in this chat if this isn't correct @{username}"); return(false); } return(true); }
/// <summary> /// Removes first party memeber in queue of party up requests /// </summary> public async Task CmdPopPartyUpRequest() { try { // get current game info ChannelJSON json = await _twitchInfo.GetBroadcasterChannelById(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameId(gameTitle); if (string.IsNullOrEmpty(gameTitle)) { _irc.SendPublicChatMessage("I cannot see the name of the game. It's currently set to either NULL or EMPTY. " + "Please have the chat verify that the game has been set for this stream. " + $"If the error persists, please have @{_botConfig.Broadcaster.ToLower()} retype the game in their Twitch Live Dashboard. " + "If this error shows up again and your chat can see the game set for the stream, please contact my master with !support in this chat"); } else if (game?.Id > 0) { _irc.SendPublicChatMessage(await _partyUp.PopRequestedPartyMember(game.Id, _broadcasterId)); } else { _irc.SendPublicChatMessage("This game is not part of the \"Party Up\" system"); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdMod", "CmdPopPartyUpRequest()", false, "!poppartyuprequest"); } }
/// <summary> /// Check what party members are available (if game is part of the party up system) /// </summary> private async Task <DateTime> PartyUpListAsync() { try { // get current game info ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); if (string.IsNullOrEmpty(gameTitle)) { _irc.SendPublicChatMessage("I cannot see the name of the game. It's currently set to either NULL or EMPTY. " + "Please have the chat verify that the game has been set for this stream. " + $"If the error persists, please have @{_botConfig.Broadcaster.ToLower()} retype the game in their Twitch Live Dashboard. " + "If this error shows up again and your chat can see the game set for the stream, please contact my master with !support in this chat"); return(DateTime.Now); } else if (game == null || game.Id == 0) { _irc.SendPublicChatMessage("This game is currently not a part of the \"Party Up\" system"); } else { _irc.SendPublicChatMessage(await _partyUp.GetPartyListAsync(game.Id, _broadcasterInstance.DatabaseId)); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "PartyUpFeature", "PartyUpList()", false, "!partyuplist"); } return(DateTime.Now); }
public async Task CmdDeleteIgn() { try { // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelById(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameId(gameTitle); InGameUsername ign = await _ign.GetInGameUsername(_broadcasterInstance.DatabaseId, game); if (ign != null && ign.GameId != null) { await _ign.DeleteInGameUsername(ign.Id, _broadcasterInstance.DatabaseId); _irc.SendPublicChatMessage($"Successfully deleted IGN set for the category \"{game.Title}\""); } else { _irc.SendPublicChatMessage($"Wasn't able to find an IGN to delete for the category \"{game.Title}\""); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdBrdCstr", "CmdDeleteIgn()", false, "!deleteign"); } }
private async void Run() { await LoadReminderContextAsync(); // initial load DateTime midnightNextDay = DateTime.Today.AddDays(1); while (true) { ChannelJSON channelJSON = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = channelJSON.Game; TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); if (game == null || game.Id == 0) { _gameId = null; } else { _gameId = game.Id; } // remove pending reminders _delayedMessagesInstance.DelayedMessages.RemoveAll(r => r.ReminderId > 0); foreach (RemindUser reminder in _reminders.OrderBy(m => m.RemindEveryMin)) { if (IsEveryMinReminder(reminder)) { continue; } else if (IsCountdownEvent(reminder)) { continue; } else { AddDayOfReminder(reminder); } } if (_refreshReminders) { _irc.SendPublicChatMessage("Reminders refreshed!"); } // reset refresh midnightNextDay = DateTime.Today.AddDays(1); _refreshReminders = false; // wait until midnight to check reminders // unless a manual refresh was called while (DateTime.Now < midnightNextDay && !_refreshReminders) { Thread.Sleep(1000); // 1 second } } }
public async Task <IActionResult> Get([FromRoute] string title) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } TwitchGameCategory gameList = await _context.TwitchGameCategory.FirstOrDefaultAsync(m => m.Title == title); if (gameList == null) { return(NotFound()); } return(Ok(gameList)); }
private async Task <DateTime> SetGameIgnAsync(TwitchChatter chatter) { try { string message = chatter.Message; string gameIgn = message.Substring(message.IndexOf(" ") + 1); // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); InGameUsername ign = await _ign.GetInGameUsernameAsync(_broadcasterInstance.DatabaseId, game); if (game == null) { _irc.SendPublicChatMessage("The game isn't in the database. " + $"Please set this as part of the general game IDs or IGNs using !setgenericign or !setgenericid @{chatter.DisplayName}"); return(DateTime.Now); } if (ign == null || (ign != null && ign.GameId == null)) { await _ign.CreateInGameUsernameAsync(game.Id, _broadcasterInstance.DatabaseId, gameIgn); _irc.SendPublicChatMessage($"Yay! You've set your IGN for {gameTitle} to \"{gameIgn}\" @{chatter.DisplayName}"); } else { ign.Message = gameIgn; await _ign.UpdateInGameUsernameAsync(ign.Id, _broadcasterInstance.DatabaseId, ign); _irc.SendPublicChatMessage($"Yay! You've updated your IGN for {gameTitle} to \"{gameIgn}\" @{chatter.DisplayName}"); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "InGameNameFeature", "SetGameIgn(TwitchChatter)", false, "!setgameign", chatter.Message); } return(DateTime.Now); }
private async Task <DateTime> DeleteIgnAsync(TwitchChatter chatter) { try { // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); InGameUsername ign = await _ign.GetInGameUsernameAsync(_broadcasterInstance.DatabaseId, game); if (game == null) { _irc.SendPublicChatMessage($"The game isn't in the database @{chatter.DisplayName}"); return(DateTime.Now); } if (ign != null && ign.GameId != null) { await _ign.DeleteInGameUsernameAsync(ign.Id, _broadcasterInstance.DatabaseId); _irc.SendPublicChatMessage($"Successfully deleted IGN set for the category, \"{game.Title}\" @{chatter.DisplayName}"); } else { _irc.SendPublicChatMessage($"Wasn't able to find an IGN to delete for the category, \"{game.Title}\" @{chatter.DisplayName}"); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "InGameNameFeature", "DeleteIgn(TwitchChatter)", false, "!deleteign", chatter.Message); } return(DateTime.Now); }
private async Task <DateTime> InGameUsernameAsync(TwitchChatter chatter) { try { // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); InGameUsername ign = null; if (chatter.Message.StartsWith("!all")) { ign = await _ign.GetInGameUsernameAsync(_broadcasterInstance.DatabaseId); // return generic IGN } else { ign = await _ign.GetInGameUsernameAsync(_broadcasterInstance.DatabaseId, game); // return specified IGN (if available) } if (ign != null && !string.IsNullOrEmpty(ign.Message)) { _irc.SendPublicChatMessage($"{ign.Message} @{chatter.DisplayName}"); } else { _irc.SendPublicChatMessage($"I cannot find your in-game username @{chatter.DisplayName}"); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "InGameNameFeature", "InGameUsername(TwitchChatter)", false, "!ign"); } return(DateTime.Now); }
/// <summary> /// Removes first party memeber in queue of party up requests /// </summary> public async Task CmdPopPartyUpRequest() { try { // get current game info ChannelJSON json = await _twitchInfo.GetBroadcasterChannelById(); string gameTitle = json.Game; TwitchGameCategory game = await _gameDirectory.GetGameId(gameTitle); if (game?.Id > 0) { _irc.SendPublicChatMessage(await _partyUp.PopRequestedPartyMember(game.Id, _broadcasterId)); } else { _irc.SendPublicChatMessage("This game is not part of the \"Party Up\" system"); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdMod", "CmdPopPartyUpRequest()", false, "!poppartyuprequest"); } }
public async Task RunAsync() { try { // ToDo: Check version number of application } catch (Exception ex) { Console.WriteLine($"Error Message: {ex.Message}"); Console.WriteLine(); Console.WriteLine("Cannot connect to database to verify the correct version of myself"); Console.WriteLine("Local troubleshooting needed by author of this bot"); Console.WriteLine(); Console.WriteLine("Shutting down now..."); Thread.Sleep(5000); Environment.Exit(1); } try { // Configure error handler singleton class ErrorHandler.Configure(_broadcasterInstance.DatabaseId, _irc, _botConfig); // Get broadcaster ID so the user can only see their data from the db await SetBroadcasterIdsAsync(); if (_broadcasterInstance.DatabaseId == 0 || string.IsNullOrEmpty(_broadcasterInstance.TwitchId)) { Console.WriteLine("Cannot find a broadcaster ID for you. " + "Please contact the author with a detailed description of the issue"); Console.WriteLine(); Console.WriteLine("Shutting down now..."); Thread.Sleep(5000); Environment.Exit(1); } // Configure error handler singleton class ErrorHandler.Configure(_broadcasterInstance.DatabaseId, _irc, _botConfig); /* Connect to local Spotify client */ _spotify = new SpotifyWebClient(_botConfig); await _spotify.ConnectAsync(); /* Load command classes */ _commandSystem = new CommandSystem(_irc, _botConfig, _appConfig, _bank, _songRequestBlacklist, _libVLCSharpPlayer, _songRequestSetting, _spotify, _twitchInfo, _follower, _gameDirectory, _ign, _manualSongRequest, _quote, _partyUp); /* Whisper broadcaster bot settings */ Console.WriteLine(); Console.WriteLine("---> Extra Bot Settings <---"); Console.WriteLine($"Currency type: {_botConfig.CurrencyType}"); Console.WriteLine($"Enable Auto Tweets: {_botConfig.EnableTweets}"); Console.WriteLine($"Enable Auto Display Songs: {_botConfig.EnableDisplaySong}"); Console.WriteLine($"Stream latency: {_botConfig.StreamLatency} second(s)"); Console.WriteLine($"Regular follower hours: {_botConfig.RegularFollowerHours}"); Console.WriteLine(); /* Configure YouTube song request from user's YT account (request permission if needed) */ await GetYouTubeAuthAsync(); /* Start listening for delayed messages */ DelayMessage delayMsg = new DelayMessage(_irc); delayMsg.Start(); /* Grab list of chatters from channel */ _twitchChatterListener.Start(); /* Get the status of the Twitch stream */ _twitchStreamStatus = new TwitchStreamStatus(_irc, _twitchInfo, _botConfig.Broadcaster); await _twitchStreamStatus.LoadChannelInfoAsync(); _twitchStreamStatus.Start(); /* Pull list of followers and check experience points for stream leveling */ _followerSubscriberListener.Start(_irc, _broadcasterInstance.DatabaseId); /* Load/create settings and start the queue for the heist */ await _bankHeistInstance.LoadSettings(_broadcasterInstance.DatabaseId, _botConfig.TwitchBotApiLink); _bankHeist.Start(_irc, _broadcasterInstance.DatabaseId); if (string.IsNullOrEmpty(TwitchStreamStatus.CurrentCategory)) { _irc.SendPublicChatMessage("WARNING: I cannot see the name of the game. It's currently set to either NULL or EMPTY. " + "Please have the chat verify that the game has been set for this stream. " + $"If the error persists, please have @{_botConfig.Broadcaster.ToLower()} retype the game in their Twitch Live Dashboard. " + "If this error shows up again and your chat can see the game set for the stream, please contact my master with !support in this chat"); } // Grab game id in order to find party member TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(TwitchStreamStatus.CurrentCategory); /* Load/create settings and start the queue for the boss fight */ await _bossFightInstance.LoadSettings(_broadcasterInstance.DatabaseId, game?.Id, _botConfig.TwitchBotApiLink); _bossFight.Start(_irc, _broadcasterInstance.DatabaseId); /* Ping to twitch server to prevent auto-disconnect */ PingSender ping = new PingSender(_irc); ping.Start(); /* Send reminders of certain events */ ChatReminder chatReminder = new ChatReminder(_irc, _broadcasterInstance.DatabaseId, _botConfig.TwitchBotApiLink, _twitchInfo, _gameDirectory); chatReminder.Start(); /* Load in Twitch users that have bot moderation privileges (separate from channel moderators) */ await _botModeratorInstance.LoadExistingModerators(_botConfig.TwitchBotApiLink, _broadcasterInstance.DatabaseId); /* Load in custom commands */ await _customCommandInstance.LoadCustomCommands(_botConfig.TwitchBotApiLink, _broadcasterInstance.DatabaseId); /* Authenticate to Twitter if possible */ GetTwitterAuth(); Console.WriteLine("===== Time to get to work! ====="); Console.WriteLine(); /* Finished setup, time to start */ await GetChatBoxAsync(); } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "TwitchBotApplication", "RunAsync()", true); } }
/// <summary> /// Load a custom command made by the broadcaster /// </summary> /// <param name="chatter"></param> private async void FindCustomCommand(TwitchChatter chatter) { try { /* Display the sound commands to the chatter in alphabetical order */ if (chatter.Message == "!sound") { string orderedCommands = ""; foreach (string soundCommand in _customCommandInstance.GetSoundCommands().Select(c => c.Name)) { orderedCommands += $"{soundCommand}, "; } string message = $"These are the available sound commands: {orderedCommands.ReplaceLastOccurrence(", ", "")}"; if (string.IsNullOrEmpty(orderedCommands)) { message = $"There are no sound commands at this time @{chatter.Username}"; } _irc.SendPublicChatMessage(message); return; } /* Else use the custom command from the database */ // Get current game name ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; // Grab game id in order to find party member TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); CustomCommand customCommand = _customCommandInstance.FindCustomCommand(chatter.Message.ToLower(), game?.Id); if (customCommand == null || _cooldownUsersInstance.IsCommandOnCooldown(customCommand.Name, chatter, _irc, customCommand.IsGlobalCooldown)) { return; } int balance = await _bank.CheckBalanceAsync(chatter.Username, _broadcasterInstance.DatabaseId); if (balance == -1) { _irc.SendPublicChatMessage($"You are not currently banking with us at the moment. " + $"Please talk to a moderator about acquiring {_botConfig.CurrencyType} @{chatter.DisplayName}"); return; } else if (balance < customCommand.CurrencyCost) { _irc.SendPublicChatMessage($"I'm sorry! {customCommand.Name} costs {customCommand.CurrencyCost} " + $"{_botConfig.CurrencyType} @{chatter.DisplayName}"); return; } // Send either a sound command or a normal text command if (customCommand.IsSound) { using (SoundPlayer player = new SoundPlayer(customCommand.Message)) { player.Play(); } } else if (!customCommand.IsSound) { _irc.SendPublicChatMessage(customCommand.Message); } // Check and add cooldown if necessary if (customCommand.CooldownSec > 0) { _cooldownUsersInstance.AddCooldown(chatter, DateTime.Now.AddSeconds(customCommand.CooldownSec), customCommand.Name); } // Make the chatter pay the price if necessary if (customCommand.CurrencyCost > 0) { balance -= customCommand.CurrencyCost; await _bank.UpdateFundsAsync(chatter.Username, _broadcasterInstance.DatabaseId, balance); _irc.SendPublicChatMessage($"@{chatter.DisplayName} spent {customCommand.CurrencyCost} " + $"{_botConfig.CurrencyType} for {customCommand.Name} and now has {balance} {_botConfig.CurrencyType}"); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "TwitchBotApplication", "FindCustomCommand(TwitchChatter)", false, "N/A", chatter.Message); } }
public async Task <InGameUsername> GetInGameUsernameAsync(int broadcasterId, TwitchGameCategory game = null) { int?gameId = game?.Id ?? null; return(await _ignDb.GetInGameUsernameAsync(gameId, broadcasterId)); }
/// <summary> /// Request party member if game and character exists in party up system /// </summary> /// <param name="chatter">User that sent the message</param> private async Task <DateTime> PartyUpAsync(TwitchChatter chatter) { try { int inputIndex = chatter.Message.IndexOf(" ") + 1; // check if user entered something if (chatter.Message.Length < inputIndex) { _irc.SendPublicChatMessage($"Please enter a party member @{chatter.DisplayName}"); return(DateTime.Now); } // get current game info ChannelJSON json = await _twitchInfo.GetBroadcasterChannelByIdAsync(); string gameTitle = json.Game; string partyMemberName = chatter.Message.Substring(inputIndex); TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); // attempt to add requested party member into the queue if (string.IsNullOrEmpty(gameTitle)) { _irc.SendPublicChatMessage("I cannot see the name of the game. It's currently set to either NULL or EMPTY. " + "Please have the chat verify that the game has been set for this stream. " + $"If the error persists, please have @{_botConfig.Broadcaster.ToLower()} retype the game in their Twitch Live Dashboard. " + "If this error shows up again and your chat can see the game set for the stream, please contact my master with !support in this chat"); return(DateTime.Now); } else if (game == null || game.Id == 0) { _irc.SendPublicChatMessage("This game is not part of the \"Party Up\" system"); return(DateTime.Now); } PartyUp partyMember = await _partyUp.GetPartyMemberAsync(partyMemberName, game.Id, _broadcasterInstance.DatabaseId); if (partyMember == null) { _irc.SendPublicChatMessage($"I couldn't find the requested party member \"{partyMemberName}\" @{chatter.DisplayName}. " + "Please check with the broadcaster for possible spelling errors"); return(DateTime.Now); } if (await _partyUp.HasUserAlreadyRequestedAsync(chatter.DisplayName, game.Id, _broadcasterInstance.DatabaseId)) { _irc.SendPublicChatMessage($"You have already requested a party member. " + $"Please wait until your request has been completed @{chatter.DisplayName}"); return(DateTime.Now); } await _partyUp.AddRequestedPartyMemberAsync(chatter.DisplayName, partyMember.Id); _irc.SendPublicChatMessage($"@{chatter.DisplayName}: {partyMemberName} has been added to the party queue"); } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "PartyUpFeature", "PartyUp(TwitchChatter)", false, "!partyup", chatter.Message); } return(DateTime.Now); }
/// <summary> /// Updates the game being played on the Twitch channel /// </summary> /// <param name="chatter"></param> private async Task <DateTime> UpdateGameAsync(TwitchChatter chatter) { try { // Get game from command parameter string gameTitle = chatter.Message.Substring(chatter.Message.IndexOf(" ") + 1); // Send HTTP method PUT to base URI in order to change the game RestClient client = new RestClient("https://api.twitch.tv/kraken/channels/" + _broadcasterInstance.TwitchId); RestRequest request = new RestRequest(Method.PUT); request.AddHeader("Cache-Control", "no-cache"); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "OAuth " + _botConfig.TwitchAccessToken); request.AddHeader("Accept", "application/vnd.twitchtv.v5+json"); request.AddHeader("Client-ID", _botConfig.TwitchClientId); request.AddParameter("application/json", "{\"channel\":{\"game\":\"" + gameTitle + "\"}}", ParameterType.RequestBody); IRestResponse response = null; try { response = await client.ExecuteAsync <Task>(request); string statResponse = response.StatusCode.ToString(); if (statResponse.Contains("OK")) { _irc.SendPublicChatMessage($"Twitch channel game status updated to \"{gameTitle}\""); await ChatReminder.RefreshRemindersAsync(); await _customCommandInstance.LoadCustomCommands(_botConfig.TwitchBotApiLink, _broadcasterInstance.DatabaseId); _irc.SendPublicChatMessage($"Your commands have been refreshed @{chatter.DisplayName}"); // Grab game id in order to find party member TwitchGameCategory game = await _gameDirectory.GetGameIdAsync(gameTitle); // During refresh, make sure no fighters can join _bossFightSettingsInstance.RefreshBossFight = true; await _bossFightSettingsInstance.LoadSettings(_broadcasterInstance.DatabaseId, game?.Id, _botConfig.TwitchBotApiLink); _bossFightSettingsInstance.RefreshBossFight = false; } else { Console.WriteLine(response.Content); } } catch (WebException ex) { if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.BadRequest) { Console.WriteLine("Error 400 detected!!"); } response = (IRestResponse)ex.Response; Console.WriteLine("Error: " + response); } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "TwitchChannelFeature", "UpdateGame(TwitchChatter)", false, "!updategame"); } return(DateTime.Now); }