public async Task CmdResetYoutubeSongRequestList(bool hasYouTubeAuth) { try { if (!hasYouTubeAuth) { _irc.SendPublicChatMessage("YouTube song requests have not been set up"); return; } // Check if user has a song request playlist, else create one string playlistName = _botConfig.YouTubeBroadcasterPlaylistName; string defaultPlaylistName = $"Twitch Song Requests"; if (string.IsNullOrEmpty(playlistName)) { playlistName = defaultPlaylistName; } Playlist broadcasterPlaylist = null; // Check for existing playlist id if (!string.IsNullOrEmpty(_botConfig.YouTubeBroadcasterPlaylistId)) { broadcasterPlaylist = await _youTubeClientInstance.GetBroadcasterPlaylistById(_botConfig.YouTubeBroadcasterPlaylistId); } if (broadcasterPlaylist?.Id != null) { await _youTubeClientInstance.DeletePlaylist(broadcasterPlaylist.Id); } broadcasterPlaylist = await _youTubeClientInstance.CreatePlaylist(playlistName, "Songs requested via Twitch viewers on https://twitch.tv/" + _botConfig.Broadcaster + " . Playlist automatically created courtesy of https://github.com/SimpleSandman/TwitchBot"); _botConfig.YouTubeBroadcasterPlaylistId = broadcasterPlaylist.Id; _appConfig.AppSettings.Settings.Remove("youTubeBroadcasterPlaylistId"); _appConfig.AppSettings.Settings.Add("youTubeBroadcasterPlaylistId", broadcasterPlaylist.Id); _botConfig.YouTubeBroadcasterPlaylistName = broadcasterPlaylist.Snippet.Title; _appConfig.AppSettings.Settings.Remove("youTubeBroadcasterPlaylistName"); _appConfig.AppSettings.Settings.Add("youTubeBroadcasterPlaylistName", broadcasterPlaylist.Snippet.Title); _appConfig.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("TwitchBotConfiguration"); SongRequestSetting songRequestSetting = await _songRequestSetting.GetSongRequestSetting(_broadcasterInstance.DatabaseId); // ToDo: Make HTTP PATCH request instead of full PUT await _songRequestSetting.UpdateSongRequestSetting( _botConfig.YouTubeBroadcasterPlaylistId, _botConfig.YouTubePersonalPlaylistId, _broadcasterInstance.DatabaseId, songRequestSetting.DjMode); _irc.SendPublicChatMessage($"YouTube playlist has been reset @{_botConfig.Broadcaster} " + "and is now at this link https://www.youtube.com/playlist?list=" + _botConfig.YouTubeBroadcasterPlaylistId); } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdBrdCstr", "CmdResetYoutubeSongRequestList(bool)", false, "!resetytsr"); } }
public async Task UpdateSongRequestSettingAsync(string requestPlaylistId, string personalPlaylistId, int broadcasterId, bool djMode) { SongRequestSetting updatedSettings = new SongRequestSetting { RequestPlaylistId = requestPlaylistId, PersonalPlaylistId = personalPlaylistId, BroadcasterId = broadcasterId, DjMode = djMode }; await ApiBotRequest.PutExecuteAsync(_twitchBotApiLink + $"songrequestsettings/update/{broadcasterId}", updatedSettings); }
public async Task <SongRequestSetting> CreateSongRequestSettingAsync(string requestPlaylistId, string personalPlaylistId, int broadcasterId) { SongRequestSetting setting = new SongRequestSetting { RequestPlaylistId = requestPlaylistId, PersonalPlaylistId = personalPlaylistId, BroadcasterId = broadcasterId, DjMode = false }; return(await ApiBotRequest.PostExecuteAsync(_twitchBotApiLink + "songrequestsettings/create", setting)); }
public async Task CmdSetPersonalYoutubePlaylistById(string message) { try { string personalPlaylistId = message.Substring(message.IndexOf(" ") + 1); if (personalPlaylistId.Length != 34) { _irc.SendPublicChatMessage("Please only insert the playlist ID that you want set " + $"when the song requests are finished/not available @{_botConfig.Broadcaster}"); return; } Playlist playlist = await _youTubeClientInstance.GetPlaylistById(personalPlaylistId); if (playlist?.Id == null) { _irc.SendPublicChatMessage($"I'm sorry @{_botConfig.Broadcaster} I cannot find your playlist " + "you requested as a backup when song requests are finished/not available"); return; } SongRequestSetting songRequestSetting = await _songRequestSetting.GetSongRequestSetting(_broadcasterInstance.DatabaseId); // Save song request info into database if (songRequestSetting?.BroadcasterId == _broadcasterInstance.DatabaseId) { // ToDo: Make HTTP PATCH request instead of full PUT await _songRequestSetting.UpdateSongRequestSetting( _botConfig.YouTubeBroadcasterPlaylistId, _botConfig.YouTubePersonalPlaylistId, _broadcasterInstance.DatabaseId, songRequestSetting.DjMode); } else { _irc.SendPublicChatMessage("Cannot find settings in database! Please contact my creator using " + $"the command \"!support\" if this problem persists @{_botConfig.Broadcaster}"); return; } _botConfig.YouTubePersonalPlaylistId = personalPlaylistId; _appConfig.AppSettings.Settings.Remove("youTubePersonalPlaylistId"); _appConfig.AppSettings.Settings.Add("youTubePersonalPlaylistId", personalPlaylistId); _appConfig.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("TwitchBotConfiguration"); _irc.SendPublicChatMessage($"Your personal playlist has been set https://www.youtube.com/playlist?list={personalPlaylistId} @{_botConfig.Broadcaster}"); } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdBrdCstr", "CmdSetPersonalYoutubePlaylistById(string)", false, "!setpersonalplaylistid"); } }
public async Task <IActionResult> Create([FromBody] SongRequestSetting songRequestSetting) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } _context.SongRequestSetting.Add(songRequestSetting); await _context.SaveChangesAsync(); return(CreatedAtAction("Get", new { broadcasterId = songRequestSetting.BroadcasterId }, songRequestSetting)); }
public async Task <IActionResult> Get([FromRoute] int broadcasterId) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } SongRequestSetting songRequestSetting = await _context.SongRequestSetting.SingleOrDefaultAsync(m => m.BroadcasterId == broadcasterId); if (songRequestSetting == null) { return(NotFound()); } return(Ok(songRequestSetting)); }
public async Task <IActionResult> Update([FromRoute] int broadcasterId, [FromBody] SongRequestSetting songRequestSetting) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (broadcasterId != songRequestSetting.BroadcasterId) { return(BadRequest()); } SongRequestSetting updatedSongRequestSetting = await _context.SongRequestSetting.FirstOrDefaultAsync(m => m.BroadcasterId == broadcasterId); if (updatedSongRequestSetting == null) { return(NotFound()); } updatedSongRequestSetting.PersonalPlaylistId = songRequestSetting.PersonalPlaylistId; updatedSongRequestSetting.RequestPlaylistId = songRequestSetting.RequestPlaylistId; updatedSongRequestSetting.DjMode = songRequestSetting.DjMode; _context.SongRequestSetting.Update(updatedSongRequestSetting); try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SongRequestSettingExists(broadcasterId)) { return(NotFound()); } else { throw; } } return(NoContent()); }
private async Task GetYouTubeAuthAsync() { try { _youTubeClientInstance.HasCredentials = await _youTubeClientInstance.GetAuthAsync(_botConfig.YouTubeClientId, _botConfig.YouTubeClientSecret); if (_youTubeClientInstance.HasCredentials) { Playlist playlist = null; string playlistName = _botConfig.YouTubeBroadcasterPlaylistName; string defaultPlaylistName = "Twitch Song Requests"; SongRequestSetting songRequestSetting = await _songRequestSetting.GetSongRequestSettingAsync(_broadcasterInstance.DatabaseId); if (string.IsNullOrEmpty(playlistName)) { playlistName = defaultPlaylistName; } // Check if YouTube song request playlist still exists if (!string.IsNullOrEmpty(_botConfig.YouTubeBroadcasterPlaylistId)) { playlist = await _youTubeClientInstance.GetBroadcasterPlaylistByIdAsync(_botConfig.YouTubeBroadcasterPlaylistId); } if (playlist?.Id == null) { playlist = await _youTubeClientInstance.GetBroadcasterPlaylistByIdAsync(songRequestSetting.RequestPlaylistId); if (playlist?.Id == null) { playlist = await _youTubeClientInstance.GetBroadcasterPlaylistByKeywordAsync(playlistName); if (playlist?.Id == null) { playlist = await _youTubeClientInstance.CreatePlaylistAsync(playlistName, "Songs requested via Twitch viewers on https://twitch.tv/" + _botConfig.Broadcaster + " . Playlist automatically created courtesy of https://github.com/SimpleSandman/TwitchBot"); } } } _botConfig.YouTubeBroadcasterPlaylistId = playlist.Id; _appConfig.AppSettings.Settings.Remove("youTubeBroadcasterPlaylistId"); _appConfig.AppSettings.Settings.Add("youTubeBroadcasterPlaylistId", playlist.Id); _botConfig.YouTubeBroadcasterPlaylistName = playlist.Snippet.Title; _appConfig.AppSettings.Settings.Remove("youTubeBroadcasterPlaylistName"); _appConfig.AppSettings.Settings.Add("youTubeBroadcasterPlaylistName", playlist.Snippet.Title); // Find personal playlist if requested playlist = null; playlistName = _botConfig.YouTubePersonalPlaylistName; // Check if personal YouTube playlist still exists if (!string.IsNullOrEmpty(_botConfig.YouTubePersonalPlaylistId)) { playlist = await _youTubeClientInstance.GetPlaylistByIdAsync(_botConfig.YouTubePersonalPlaylistId); } if (playlist?.Id == null && songRequestSetting.PersonalPlaylistId != null) { playlist = await _youTubeClientInstance.GetPlaylistByIdAsync(songRequestSetting.PersonalPlaylistId); } if (playlist?.Id != null && playlist?.Snippet != null) { _botConfig.YouTubePersonalPlaylistId = playlist.Id; _appConfig.AppSettings.Settings.Remove("youTubePersonalPlaylistId"); _appConfig.AppSettings.Settings.Add("youTubePersonalPlaylistId", playlist.Id); _botConfig.YouTubePersonalPlaylistName = playlist.Snippet.Title; _appConfig.AppSettings.Settings.Remove("youTubePersonalPlaylistName"); _appConfig.AppSettings.Settings.Add("youTubePersonalPlaylistName", playlist.Snippet.Title); } _appConfig.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("TwitchBotConfiguration"); // Save song request info into database if (songRequestSetting?.Id != 0 && (_botConfig.YouTubeBroadcasterPlaylistId != songRequestSetting.RequestPlaylistId || _botConfig.YouTubePersonalPlaylistId != (songRequestSetting.PersonalPlaylistId ?? "") || _broadcasterInstance.DatabaseId != songRequestSetting.BroadcasterId)) { await _songRequestSetting.UpdateSongRequestSettingAsync ( _botConfig.YouTubeBroadcasterPlaylistId, _botConfig.YouTubePersonalPlaylistId, _broadcasterInstance.DatabaseId, songRequestSetting.DjMode ); } else if (songRequestSetting?.Id == 0) { await _songRequestSetting.CreateSongRequestSettingAsync ( _botConfig.YouTubeBroadcasterPlaylistId, _botConfig.YouTubePersonalPlaylistId, _broadcasterInstance.DatabaseId ); } // Write to a text file to allow users to show the currently playing song as a song ticker // ToDo: Add config variables string filename = "Twitch Chat Bot Song Request.txt"; string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath, filename))) { await outputFile.WriteAsync(""); // clear old song request or create new file with empty string } } } catch (Exception ex) { _youTubeClientInstance.HasCredentials = false; // do not allow any YouTube features for this bot until error has been resolved await _errHndlrInstance.LogError(ex, "TwitchBotApplication", "GetYouTubeAuth()", false); } }