public async Task <ActionResult <Track> > Favorite(long id) { var favTrack = await _dbContext.FavoriteTrack.FirstOrDefaultAsync(x => x.TrackId == id && x.UserId == UserId); if (favTrack != null) { return(Conflict("Already like this track")); } var track = await _dbContext.Track.FindAsync(id); if (track == null || (!track.IsPublic && track.UploaderId != UserId)) { return(NotFound("Track not found")); } favTrack = new FavoriteTrack() { TrackId = id, UserId = UserId.Value }; _dbContext.FavoriteTrack.Add(favTrack); await _dbContext.SaveChangesAsync(); return(CreatedAtAction(nameof(Favorite), favTrack)); }
public async Task Command(params int[] args) { if (args.Length == 0) { await SendBasicErrorEmbedAsync($"You need to specify at least one `tracknum` to remove. " + $"These can be found via the `favls` command."); return; } User user = await DatabaseQueries.GetOrCreateUserAsync(Context.User.Id); Server server = await DatabaseQueries.GetOrCreateServerAsync(Context.Guild.Id); List <FavoriteTrack> userFavoriteTracks = await DatabaseQueries.GetAllForUserAsync <FavoriteTrack>(user.UserId); if (!userFavoriteTracks.Any()) { await SendBasicErrorEmbedAsync($"{Context.User.Mention} You do not have any favorited tracks."); return; } const int LIMIT_ATTEMPTS = 3; int failedAttempts = 0; var successSb = new StringBuilder(); var errorSb = new StringBuilder(); var toRemove = new List <FavoriteTrack>(args.Length); int i = 0; foreach (int num in args) { if (failedAttempts >= LIMIT_ATTEMPTS) { errorSb.AppendLine($"{Context.User.Mention} Too many failed attempts. Aborting further execution."); break; } FavoriteTrack match = userFavoriteTracks.ElementAtOrDefault(num - 1); if (match == null) { errorSb.AppendLine($"{Context.User.Mention} Track `#{num}` does not exist in your " + $"`{server.CommandPrefix}favls` list."); failedAttempts++; continue; } successSb.AppendLine($"Successfully removed track `#{num}` from your favorites list."); toRemove.Insert(i, userFavoriteTracks[num - 1]); i++; } await DatabaseQueries.DeleteAsync(toRemove); await ConsoleLogger.LogAsync($"Deleted {args.Length} tracks from user's favorites list [ID: {user.UserId}]", LogLvl.DEBUG); var finalSb = new StringBuilder(); if (successSb.Length > 0) { finalSb.AppendLine(successSb.ToString()); } if (errorSb.Length > 0) { finalSb.AppendLine(errorSb.ToString()); } var embed = new KaguyaEmbedBuilder(errorSb.Length > 0 ? EmbedColor.VIOLET : EmbedColor.GREEN) { Title = "Remove Favorite Tracks", Description = finalSb.ToString() }; await SendEmbedAsync(embed); }
public async Task Command() { const int PAGE_TRACK_COUNT = 25; Server server = await DatabaseQueries.GetOrCreateServerAsync(Context.Guild.Id); User user = await DatabaseQueries.GetOrCreateUserAsync(Context.User.Id); List <FavoriteTrack> favoriteTracks = await DatabaseQueries.GetAllForUserAsync <FavoriteTrack>(user.UserId); if (!favoriteTracks.Any()) { await SendBasicErrorEmbedAsync($"You do not have any favorited tracks. Go out and " + $"get some with `{server.CommandPrefix}favorite`!"); return; } double pageCountWithRemainder = (double)favoriteTracks.Count / PAGE_TRACK_COUNT; if ((pageCountWithRemainder - Math.Floor(pageCountWithRemainder)) > 0) { pageCountWithRemainder = Math.Floor(pageCountWithRemainder) + 1; } int pageCount = (int)pageCountWithRemainder; var pages = new PaginatedMessage.Page[pageCount]; for (int i = 0; i < pageCount; i++) { var page = new PaginatedMessage.Page(); var descSb = new StringBuilder(); for (int j = 0; j < PAGE_TRACK_COUNT; j++) { int trackIndex = j * (i + 1); if (favoriteTracks.Count == trackIndex) { break; } FavoriteTrack track = favoriteTracks[trackIndex]; descSb.AppendLine($"`#{trackIndex + 1}.` `{track.TrackTitle}`"); } page.Description = descSb.ToString(); pages[i] = page; } var pager = new PaginatedMessage { Title = $"Favorite Tracks for {Context.User.Username}", Pages = pages, Color = KaguyaEmbedBuilder.LightBlueColor }; if (pages.Length > 1) { await PagedReplyAsync(pager, new ReactionList { First = true, Last = true, Forward = true, Backward = true, Jump = true }); } else { await PagedReplyAsync(pager, new ReactionList { Trash = true }); } }
public async Task Command() { User user = await DatabaseQueries.GetOrCreateUserAsync(Context.User.Id); Server server = await DatabaseQueries.GetOrCreateServerAsync(Context.Guild.Id); LavaNode node = ConfigProperties.LavaNode; if (!node.TryGetPlayer(Context.Guild, out LavaPlayer player) || player == null) { await SendBasicErrorEmbedAsync($"There needs to be an active music player in the " + $"server for this command to work. Start one " + $"by using `{server.CommandPrefix}play <song>`!"); return; } if (!player.IsPlaying() && !player.IsPaused()) { await SendBasicErrorEmbedAsync($"The music player must either be paused or actively playing " + $"in order to favorite a track."); return; } LavaTrack curTrack = player.Track; List <FavoriteTrack> userFavorites = await DatabaseQueries.GetAllForUserAsync <FavoriteTrack>(user.UserId); var favTrack = new FavoriteTrack { UserId = user.UserId, TrackId = curTrack.Id, TrackTitle = curTrack.Title, TrackAuthor = curTrack.Author, TrackDuration = curTrack.Duration.TotalSeconds }; if (userFavorites.Any(x => x.UserId == user.UserId && x.TrackId == curTrack.Id)) { await SendBasicErrorEmbedAsync($"{Context.User.Mention} You have already favorited this track!"); return; } if (userFavorites.Count >= 50 && !user.IsPremium || userFavorites.Count >= 500 && user.IsPremium) { await SendBasicErrorEmbedAsync("You cannot favorite anymore tracks. Use the `delfav` command to make " + "room!"); } await DatabaseQueries.InsertAsync(favTrack); var embed = new KaguyaEmbedBuilder(EmbedColor.GREEN) { Title = "Favorite Track", Description = $"{Context.User.Mention} successfully favorited `{curTrack.Title}` by " + $"`{curTrack.Author}`." }; await SendEmbedAsync(embed); }