Пример #1
0
        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));
        }
Пример #4
0
        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");
            }
        }
Пример #5
0
        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));
        }
Пример #6
0
        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));
        }
Пример #7
0
        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());
        }
Пример #8
0
        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);
            }
        }