using Tesses.YouTubeDownloader; string domain = "https://tytdarchive.site.tesses.net/"; string dir="/mnt/8TBShare/Videos/TYTD/Wii"; TYTDPathDirectory directory=new TYTDPathDirectory(dir); using var removed_have = new StreamWriter("removed_have.txt"); using var removed_donthave = new StreamWriter("removed_donthave.txt"); using var available_have = new StreamWriter("available_have.txt"); using var available_donthave = new StreamWriter("available_donthave.txt"); using var unknown_have = new StreamWriter("unknown_have.txt"); using var unknown_donthave = new StreamWriter("unknown_donthave.txt"); int i =0; await foreach(var item in directory.GetVideoIdsAsync()) { i++; o: bool have=(await directory.HttpClient.GetStringAsync($"{domain}have.php?v={item}"))=="true"; try{ await directory.YoutubeClient.Videos.GetAsync(item); if(have) available_have.WriteLine($"https://www.youtube.com/watch?v={item}"); else available_donthave.WriteLine($"https://www.youtube.com/watch?v={item}"); Console.WriteLine($"[{i}]{ (await directory.GetVideoInfoAsync(item)).Title}"); } catch(YoutubeExplode.Exceptions.RequestLimitExceededException ex) { _=ex; Console.WriteLine("Rate limit exceeded, waiting 5 minutes"); Thread.Sleep(300000); goto o; } catch(YoutubeExplode.Exceptions.VideoUnavailableException ex) { _=ex; if(have) removed_have.WriteLine($"https://www.youtube.com/watch?v={item}"); else removed_donthave.WriteLine($"https://www.youtube.com/watch?v={item}"); }catch(Exception ex) { _=ex; if(have) unknown_have.WriteLine($"https://www.youtube.com/watch?v={item}"); else unknown_donthave.WriteLine($"https://www.youtube.com/watch?v={item}"); } }