public static string FillSongRequest(string requestBody, string songRequestor = "RazBot", bool bypassVet = false) { SongData songData = YTE.GetSongData(requestBody, requestor: songRequestor); if (songData.Duration <= TimeSpan.FromMinutes(10)) { if (BotTools.Settings["vet_requests"] && !bypassVet) { DiscordBot.PostVetRequestToDJChannel(songData); return($"@{songData.Requestor}, Your request has been submitted for review! razBot"); } else { try { Music.GetPlaylist("request").AddSong(songData); var placement = Music.GetPlaylist("request").Songs.Count; if (DownloadedSong != null && placement == 1) { if (DownloadedSong.IsRequest) { placement++; } else { DownloadedSong = null; GetPlaylist(LoadedPlaylist).CycleBack(); } } var placementWord = BotTools.GetPlacementWord(placement); Music.SavePlaylists(); return($"@{songData.Requestor}, Your request is {placementWord} in the queue! razCool"); } catch (ArgumentException) { BotTools.LogLine($"{songRequestor}'s request rejected: Already in queue"); return($"Sorry @{songRequestor}, that request is already queued!"); } catch (FormatException e) { BotTools.LogToSessionLogFile(e.ToString()); BotTools.LogLine($"{songRequestor}'s request rejected: Bad url"); return($"Sorry @{songRequestor}, I can't access a YouTube video from that link! It may not be available in my region, or the url may not be properly formatted."); } } } else { return($"{songData.Requestor}'s request was rejected: The audio was over 10 minutes long! razS"); } }
public SongData(string url, string requestor) { SongData songData = YTE.GetSongData(url, requestor: requestor); Description = songData.Description; Thumbnails = songData.Thumbnails; Requestor = songData.Requestor; Duration = songData.Duration; Author = songData.Author; Title = songData.Title; URL = songData.URL; ID = songData.ID; }
public static void QueueNextSong() { if (BotTools.Settings["random_play"] == true) { Random rand = new Random(); var playlistCandidates = Playlists.Where(p => p.Value.Songs.Count > 0); Music.LoadedPlaylist = playlistCandidates.ElementAt(rand.Next(playlistCandidates.Count())).Key; BotTools.Settings["loaded_playlist"] = Music.LoadedPlaylist; BotTools.SaveSettings(); } DownloadedSong = QueuedSong; SongData nextSong = GetPlaylist("request").Songs.Count > 0 ? GetPlaylist("request").GetNext() : GetPlaylist(LoadedPlaylist).GetNext(); if (nextSong != null) { QueuedSong = YTE.GetSongData(nextSong.URL, requestor: nextSong.Requestor); } }
private async void BackgroundCycleAudioQueue(object sender, DoWorkEventArgs e) { // Priority 1: Load downloaded song try { if (Music.DownloadedSong != null && Music.LoadedSong == null) { Music.LoadedSong = Music.DownloadedSong; Music.DownloadedSong = null; //windowsMP.URL = Music.LoadedSong.URL; //BotTools.LogLine($"Loaded {Music.LoadedSong.Title}"); try { string songID = Music.LoadedSong.ID; string playlistName = Music.LoadedSong.Requestor == "RazBot" ? Music.LoadedPlaylist : "request"; string filePathNorm = $"{BotTools.BasePath}\\playlists\\{playlistName}\\{songID}_Normalized.wav"; string filePath = $"{BotTools.BasePath}\\playlists\\{playlistName}\\{songID}.mp4"; windowsMP.URL = File.Exists(filePathNorm) ? filePathNorm : filePath; } catch (NullReferenceException) { BotTools.LogLine($"Failed to play song, skipping..."); Music.QueueNextSong(); } if (windowsMP.playState != WMPLib.WMPPlayState.wmppsPlaying && !playerStopped && windowsMP.playState != WMPLib.WMPPlayState.wmppsPaused) { try { windowsMP.Ctlcontrols.play(); } catch (Exception playErr) { BotTools.LogToSessionLogFile(playErr.ToString()); } } else if (windowsMP.playState != WMPLib.WMPPlayState.wmppsPaused) { // Force stop since I can't get autoplay to stay disabled windowsMP.Ctlcontrols.stop(); } } // Priority 2: Downloaded next song else if (Music.DownloadedSong == null && !downloadingAudio) { if (BotTools.Settings["random_play"] == true) { Random rand = new Random(); var playlistCandidates = Music.Playlists.Where(p => p.Value.Songs.Count > 0); Music.LoadedPlaylist = playlistCandidates.ElementAt(rand.Next(playlistCandidates.Count())).Key; BotTools.Settings["loaded_playlist"] = Music.LoadedPlaylist; } SongData nextSong = Music.GetPlaylist("request").Songs.Count > 0 ? Music.GetPlaylist("request").GetNext() : Music.GetPlaylist(Music.LoadedPlaylist).GetNext(); if (nextSong != null) { Music.QueuedSong = YTE.GetSongData(nextSong.URL, requestor: nextSong.Requestor); downloadProgress = 0.0; downloadingAudio = true; var progress = new Progress <double>(percent => { downloadProgress = percent; }); Music.DownloadedSong = await YTE.DownloadAudio(Music.QueuedSong, progress); Music.QueuedSong = null; downloadingAudio = false; while (bgwAudioNormalizer.IsBusy) { ; } if (cbNormalize.Checked && Music.DownloadedSong != null) { bgwAudioNormalizer.RunWorkerAsync(); } } } } catch (Exception comExc) { BotTools.LogLine("Exception written to session log file"); BotTools.LogToSessionLogFile(comExc.ToString()); } }