using System.Diagnostics; using DiscordBotCore; using DiscordBotCore.Interfaces; using DiscordBotCore.Others; namespace MusicPlayer.Commands; public class AddMelodyYoutube: IDbCommand { public string Command => "add_melody_youtube"; public List? Aliases => new() { "madd-yt" }; public string Description => "Add melody to the database from a youtube link"; public string Usage => "add_melody_youtube [URL] "; public bool RequireAdmin => true; public async void ExecuteServer(DbCommandExecutingArguments args) { if(Variables._MusicDatabase is null) { await args.Context.Channel.SendMessageAsync("Music Database is not loaded !"); return; } if (args.Arguments is null) { await args.Context.Channel.SendMessageAsync("Invalid arguments given. Please use the following format:\nadd_melody_youtube [URL]"); return; } var url = args.Arguments[0]; if (!url.StartsWith("https://www.youtube.com/watch?v=") && !url.StartsWith("https://youtu.be/")) { await args.Context.Channel.SendMessageAsync("Invalid URL given. Please use the following format:\nadd_melody_youtube [URL]"); return; } if (args.Arguments.Length <= 1) { await args.Channel.SendMessageAsync("Please specify at least one alias for the melody !"); return; } var msg = await args.Context.Channel.SendMessageAsync("Saving melody ..."); string musicId = Guid.NewGuid().ToString(); string? title = await YoutubeDlp.GetMusicTitle(url); if(title is null) { await msg.ModifyAsync(x => x.Content = "Failed to retrieve music title from the provided URL."); return; } await YoutubeDlp.DownloadMelody(url, musicId); var joinedAliases = string.Join(" ", args.Arguments.Skip(1)); List aliases = joinedAliases.Split('|').ToList(); if (Variables._MusicDatabase.GetMusicInfoWithTitleOrAlias(title).Any()) { await msg.ModifyAsync(x => x.Content = "Melody already exists !"); return; } Variables._MusicDatabase.Add(title, new MusicInfo() { Aliases = aliases, ByteSize = 1024, Description = "Melody added from youtube link", Location = Application.GetResourceFullPath($"Music/Melodies/{musicId}.mp3"), Title = title } ); await Variables._MusicDatabase.SaveToFile(); await msg.ModifyAsync(x => x.Content = "Melody saved !"); } }