Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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
                });
            }
        }
Esempio n. 4
0
        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);
        }