Search in sources :

Example 16 with AudioPlaylist

use of com.sedmelluq.discord.lavaplayer.track.AudioPlaylist in project FlareBot by FlareBot.

the class YouTubeExtractor method process.

@Override
public void process(String input, Player player, Message message, User user) throws Exception {
    AudioItem item;
    try {
        item = GeneralUtils.resolveItem(player, input);
    } catch (IllegalArgumentException e) {
        MessageUtils.editMessage(null, MessageUtils.getEmbed(user).setDescription("Could not get that video/playlist! Make sure the URL is correct!").setColor(Color.RED), message);
        return;
    } catch (IllegalStateException e) {
        if (e.getMessage().contains("Vevo")) {
            MessageUtils.editMessage(null, MessageUtils.getEmbed(user).setDescription("We are blocked from playing this video as it is from Vevo! " + "Sorry for any inconvenience.").setColor(Color.RED), message);
            return;
        }
        MessageUtils.editMessage(null, MessageUtils.getEmbed(user).setDescription("There was a problem with that video!\n" + "If the error continues, join our support discord: " + Constants.INVITE_URL + "\n" + "Input: " + input + "\n" + "Error Message: " + e.getMessage() + "\n" + "Stacktrace: " + MessageUtils.paste(GeneralUtils.getStackTrace(e))).setColor(Color.RED), message);
        return;
    }
    List<AudioTrack> audioTracks = new ArrayList<>();
    String name;
    if (item instanceof AudioPlaylist) {
        AudioPlaylist audioPlaylist = (AudioPlaylist) item;
        audioTracks.addAll(audioPlaylist.getTracks());
        name = audioPlaylist.getName();
    } else {
        AudioTrack track = (AudioTrack) item;
        /*if (track.getInfo().length == 0 || track.getInfo().isStream) {
                EmbedBuilder builder = MessageUtils.getEmbed(user).setDescription("Cannot queue a livestream!");
                MessageUtils.editMessage(null, builder, message);
                return;
            }*/
        audioTracks.add(track);
        name = track.getInfo().title;
        if (track.getInfo().identifier.equals("dQw4w9WgXcQ") && (random.nextInt(1000) + 1) == 1000) {
            GeneralUtils.sendImage("https://flarebot.stream/img/rick_roll.jpg", "rick_roll.jpg", user);
            Constants.logEG("You can't rick roll me!", null, message.getGuild(), user);
        }
    }
    if (name != null) {
        List<Track> tracks = audioTracks.stream().map(Track::new).peek(track -> {
            track.getMeta().put("requester", user.getId());
            track.getMeta().put("guildId", player.getGuildId());
        }).collect(Collectors.toList());
        if (tracks.size() > 1) {
            // Double `if` https://giphy.com/gifs/ng1xAzwIkDgfm
            Playlist p = new Playlist(tracks);
            player.queue(p);
        } else {
            player.queue(tracks.get(0));
        }
        EmbedBuilder builder = MessageUtils.getEmbed(user);
        builder.setDescription(String.format("%s added the %s [`%s`](%s)", user.getAsMention(), audioTracks.size() == 1 ? "song" : "playlist", name.replace("`", "'"), input));
        if (audioTracks.size() > 1)
            builder.addField("Song count:", String.valueOf(audioTracks.size()), true);
        MessageUtils.editMessage(null, builder, message);
    }
}
Also used : Color(java.awt.Color) Track(com.arsenarsen.lavaplayerbridge.player.Track) Player(com.arsenarsen.lavaplayerbridge.player.Player) Random(java.util.Random) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) GeneralUtils(stream.flarebot.flarebot.util.general.GeneralUtils) Collectors(java.util.stream.Collectors) Message(net.dv8tion.jda.core.entities.Message) AudioItem(com.sedmelluq.discord.lavaplayer.track.AudioItem) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) ArrayList(java.util.ArrayList) Playlist(com.arsenarsen.lavaplayerbridge.player.Playlist) List(java.util.List) User(net.dv8tion.jda.core.entities.User) YoutubeAudioSourceManager(com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager) AudioSourceManager(com.sedmelluq.discord.lavaplayer.source.AudioSourceManager) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) Constants(stream.flarebot.flarebot.util.Constants) MessageUtils(stream.flarebot.flarebot.util.MessageUtils) ArrayList(java.util.ArrayList) AudioItem(com.sedmelluq.discord.lavaplayer.track.AudioItem) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) Playlist(com.arsenarsen.lavaplayerbridge.player.Playlist) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) Track(com.arsenarsen.lavaplayerbridge.player.Track) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist)

Example 17 with AudioPlaylist

use of com.sedmelluq.discord.lavaplayer.track.AudioPlaylist in project Ardent by adamint.

the class Music method loadAndPlay.

static void loadAndPlay(Message message, User user, Command command, final TextChannel channel, String trackUrl, final VoiceChannel voiceChannel, boolean search, boolean useEmbedSelect) {
    if (trackUrl.contains("spotify.com")) {
        String[] parsed = trackUrl.split("/track/");
        if (parsed.length == 2) {
            final TrackRequest request = spotifyApi.getTrack(parsed[1]).build();
            try {
                trackUrl = request.get().getName();
            } catch (Exception e) {
                new BotException(e);
            }
        }
    }
    Guild guild = channel.getGuild();
    GuildMusicManager musicManager = getGuildAudioPlayer(channel.getGuild(), channel);
    String finalTrackUrl = trackUrl;
    GuildUtils.getShard(guild).playerManager.loadItemOrdered(musicManager, trackUrl, new AudioLoadResultHandler() {

        @Override
        public void trackLoaded(AudioTrack track) {
            if (!UserUtils.hasTierTwoPermissions(user) && !EntityGuild.get(guild).isPremium()) {
                try {
                    if (!shouldContinue(user, guild, channel, track)) {
                        return;
                    }
                } catch (Exception e) {
                    new BotException(e);
                }
            }
            try {
                command.sendTranslatedMessage("Adding {0} to the queue".replace("{0}", track.getInfo().title) + " " + getDuration(track), channel, user);
            } catch (Exception e) {
                new BotException(e);
            }
            play(user, guild, voiceChannel, musicManager, track, channel);
        }

        @Override
        public void playlistLoaded(AudioPlaylist playlist) {
            List<AudioTrack> tracks = playlist.getTracks();
            if (playlist.isSearchResult()) {
                try {
                    if (!useEmbedSelect) {
                        AudioTrack[] possible;
                        if (playlist.getTracks().size() >= 5)
                            possible = playlist.getTracks().subList(0, 5).toArray(new AudioTrack[5]);
                        else
                            possible = playlist.getTracks().toArray(new AudioTrack[playlist.getTracks().size()]);
                        ArrayList<String> names = new ArrayList<>();
                        for (AudioTrack audioTrack : possible) {
                            names.add(audioTrack.getInfo().title);
                        }
                        Message embed = command.sendEmbed(command.chooseFromList("Choose Song", guild, user, command, names.toArray(new String[5])), channel, user);
                        interactiveOperation(channel, message, selectionMessage -> {
                            try {
                                AudioTrack selected = possible[Integer.parseInt(selectionMessage.getContent()) - 1];
                                if (!UserUtils.hasTierTwoPermissions(user) && !EntityGuild.get(guild).isPremium()) {
                                    try {
                                        if (!shouldContinue(user, guild, channel, selected)) {
                                            return;
                                        }
                                    } catch (Exception e) {
                                        new BotException(e);
                                    }
                                }
                                try {
                                    embed.delete().queue();
                                    selectionMessage.delete().queue();
                                } catch (Exception ignored) {
                                }
                                play(user, guild, voiceChannel, musicManager, selected, channel);
                                command.sendTranslatedMessage("Adding {0} to the queue".replace("{0}", selected.getInfo().title) + " " + getDuration(selected), channel, user);
                            } catch (Exception e) {
                                command.sendTranslatedMessage("Invalid response", channel, user);
                            }
                        });
                    } else {
                        AudioTrack track = playlist.getTracks().get(0);
                        play(user, guild, voiceChannel, musicManager, track, channel);
                        command.sendTranslatedMessage("Adding {0} to the queue".replace("{0}", track.getInfo().title) + " " + getDuration(track), channel, user);
                    }
                } catch (Exception e) {
                    new BotException(e);
                }
            } else {
                if (!UserUtils.hasTierTwoPermissions(user) && !EntityGuild.get(guild).isPremium()) {
                    try {
                        if (!shouldContinue(user, guild, channel, 1)) {
                            return;
                        }
                    } catch (Exception e) {
                        new BotException(e);
                    }
                }
                try {
                    command.sendTranslatedMessage("Adding {0} songs to the queue".replace("{0}", String.valueOf(tracks.size())), channel, user);
                } catch (Exception e) {
                    new BotException(e);
                }
                for (AudioTrack track : tracks) {
                    play(user, guild, voiceChannel, musicManager, track, channel);
                }
            }
        }

        @Override
        public void noMatches() {
            if (!search) {
                loadAndPlay(message, user, command, channel, "ytsearch: " + finalTrackUrl, voiceChannel, true, useEmbedSelect);
            } else {
                try {
                    command.sendTranslatedMessage("I couldn't find a song with that name", channel, user);
                } catch (Exception e) {
                    new BotException(e);
                }
            }
        }

        @Override
        public void loadFailed(FriendlyException exception) {
            try {
                sendTo(channel, guild).sendMessage("I wasn't able to play that track... **Reason: **" + exception.getLocalizedMessage()).queue();
            } catch (Exception e) {
                new BotException(e);
            }
        }
    });
}
Also used : AudioLoadResultHandler(com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler) AudioPlayer(com.sedmelluq.discord.lavaplayer.player.AudioPlayer) TrackRequest(com.wrapper.spotify.methods.TrackRequest) MessageUtils(tk.ardentbot.utils.discord.MessageUtils) MusicSettingsModel(tk.ardentbot.rethink.models.MusicSettingsModel) Database.r(tk.ardentbot.rethink.Database.r) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) ArrayList(java.util.ArrayList) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) PermissionException(net.dv8tion.jda.core.exceptions.PermissionException) GuildUtils(tk.ardentbot.utils.discord.GuildUtils) SQLException(java.sql.SQLException) Permission(net.dv8tion.jda.core.Permission) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException) Region(net.dv8tion.jda.core.Region) ShardManager(tk.ardentbot.main.ShardManager) Command(tk.ardentbot.core.executor.Command) net.dv8tion.jda.core.entities(net.dv8tion.jda.core.entities) UserUtils(tk.ardentbot.utils.discord.UserUtils) Subcommand(tk.ardentbot.core.executor.Subcommand) AudioManager(net.dv8tion.jda.core.managers.AudioManager) BaseCommand(tk.ardentbot.core.executor.BaseCommand) BotException(tk.ardentbot.core.misc.logging.BotException) Shard(tk.ardentbot.main.Shard) AudioLoadResultHandler(com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) Ardent.spotifyApi(tk.ardentbot.main.Ardent.spotifyApi) Database.connection(tk.ardentbot.rethink.Database.connection) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) Pair(tk.ardentbot.utils.javaAdditions.Pair) WordUtils(org.apache.commons.lang.WordUtils) ArrayList(java.util.ArrayList) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) PermissionException(net.dv8tion.jda.core.exceptions.PermissionException) SQLException(java.sql.SQLException) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException) BotException(tk.ardentbot.core.misc.logging.BotException) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException) TrackRequest(com.wrapper.spotify.methods.TrackRequest) BotException(tk.ardentbot.core.misc.logging.BotException) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) ArrayList(java.util.ArrayList) List(java.util.List) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist)

Example 18 with AudioPlaylist

use of com.sedmelluq.discord.lavaplayer.track.AudioPlaylist in project legendarybot by greatman.

the class MusicManager method loadAndPlay.

/**
 * Load a song
 * @param channel The channel to send the alert in.
 * @param trackUrl The song URL
 * @param voiceChannel the voice channel to play the music in.
 */
public void loadAndPlay(final TextChannel channel, final String trackUrl, VoiceChannel voiceChannel) {
    GuildMusicManager musicManager = getGuildAudioPlayer(channel.getGuild());
    playerManager.loadItemOrdered(musicManager, trackUrl, new AudioLoadResultHandler() {

        @Override
        public void trackLoaded(AudioTrack track) {
            channel.sendMessage("Adding to queue " + track.getInfo().title).queue();
            play(channel.getGuild(), musicManager, track, voiceChannel);
        }

        @Override
        public void playlistLoaded(AudioPlaylist playlist) {
            AudioTrack firstTrack = playlist.getSelectedTrack();
            if (firstTrack == null) {
                firstTrack = playlist.getTracks().get(0);
            }
            channel.sendMessage("Adding to queue " + firstTrack.getInfo().title + " (first track of playlist " + playlist.getName() + ")").queue();
            play(channel.getGuild(), musicManager, firstTrack, voiceChannel);
        }

        @Override
        public void noMatches() {
            channel.sendMessage("Nothing found by " + trackUrl).queue();
        }

        @Override
        public void loadFailed(FriendlyException exception) {
            channel.sendMessage("Could not play: " + exception.getMessage()).queue();
        }
    });
}
Also used : AudioLoadResultHandler(com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Aggregations

AudioPlaylist (com.sedmelluq.discord.lavaplayer.track.AudioPlaylist)18 AudioTrack (com.sedmelluq.discord.lavaplayer.track.AudioTrack)17 AudioLoadResultHandler (com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler)14 FriendlyException (com.sedmelluq.discord.lavaplayer.tools.FriendlyException)14 List (java.util.List)8 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)7 YoutubeAudioSourceManager (com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager)5 AudioTrackInfo (com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)5 Optional (java.util.Optional)4 TimeUnit (java.util.concurrent.TimeUnit)4 Permission (net.dv8tion.jda.core.Permission)4 Color (java.awt.Color)3 ArrayList (java.util.ArrayList)3 Slf4j (lombok.extern.slf4j.Slf4j)3 MessageBuilder (net.dv8tion.jda.core.MessageBuilder)3 GuildMessageReceivedEvent (net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent)3 AudioPlayer (com.sedmelluq.discord.lavaplayer.player.AudioPlayer)2 AudioPlayerManager (com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager)2 DefaultAudioPlayerManager (com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager)2 AudioSourceManager (com.sedmelluq.discord.lavaplayer.source.AudioSourceManager)2