Search in sources :

Example 51 with AudioTrack

use of com.sedmelluq.discord.lavaplayer.track.AudioTrack in project FredBoat by Frederikam.

the class AudioLoader method playlistLoaded.

@Override
public void playlistLoaded(AudioPlaylist ap) {
    Metrics.tracksLoaded.inc(ap.getTracks() == null ? 0 : ap.getTracks().size());
    try {
        if (context.isSplit()) {
            context.reply(context.i18n("loadPlaySplitListFail"));
            loadNextAsync();
            return;
        }
        List<AudioTrackContext> toAdd = new ArrayList<>();
        for (AudioTrack at : ap.getTracks()) {
            toAdd.add(new AudioTrackContext(jdaEntityProvider, at, context.getMember()));
        }
        trackProvider.addAll(toAdd);
        context.reply(context.i18nFormat("loadListSuccess", ap.getTracks().size(), ap.getName()));
        if (!gplayer.isPaused()) {
            gplayer.play();
        }
    } catch (Throwable th) {
        handleThrowable(context, th);
    }
    loadNextAsync();
}
Also used : ArrayList(java.util.ArrayList) YoutubeAudioTrack(com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack)

Example 52 with AudioTrack

use of com.sedmelluq.discord.lavaplayer.track.AudioTrack in project SkyBot by duncte123.

the class AudioUtils method loadAndPlay.

/**
 * Loads a track and plays it if the bot isn't playing
 *
 * @param mng         The {@link GuildMusicManager MusicManager} for the guild
 * @param channel     The {@link net.dv8tion.jda.core.entities.MessageChannel channel} that the bot needs to send the messages to
 * @param trackUrlRaw The url from the track to play
 * @param addPlayList If the url is a playlist
 */
public void loadAndPlay(GuildMusicManager mng, final TextChannel channel, final String trackUrlRaw, final boolean addPlayList) {
    final String trackUrl;
    // Strip <>'s that prevent discord from embedding link resources
    if (trackUrlRaw.startsWith("<") && trackUrlRaw.endsWith(">")) {
        trackUrl = trackUrlRaw.substring(1, trackUrlRaw.length() - 1);
    } else {
        trackUrl = trackUrlRaw;
    }
    playerManager.loadItemOrdered(mng, trackUrl, new AudioLoadResultHandler() {

        @Override
        public void trackLoaded(AudioTrack track) {
            String title = track.getInfo().title;
            if (track.getInfo().isStream) {
                Optional<RadioStream> stream = ((RadioCommand) AirUtils.COMMAND_MANAGER.getCommand("radio")).getRadioStreams().stream().filter(s -> s.getUrl().equals(track.getInfo().uri)).findFirst();
                if (stream.isPresent())
                    title = stream.get().getName();
            }
            String msg = "Adding to queue: " + title;
            if (mng.player.getPlayingTrack() == null) {
                msg += "\nand the Player has started playing;";
            }
            mng.scheduler.queue(track);
            MessageUtils.sendEmbed(channel, EmbedUtils.embedField(embedTitle, msg));
        }

        @Override
        public void playlistLoaded(AudioPlaylist playlist) {
            AudioTrack firstTrack = playlist.getSelectedTrack();
            List<AudioTrack> tracks = playlist.getTracks();
            if (tracks.size() == 0) {
                MessageUtils.sendEmbed(channel, EmbedUtils.embedField(embedTitle, "Error: This playlist is empty."));
                return;
            } else if (firstTrack == null) {
                firstTrack = playlist.getTracks().get(0);
            }
            String msg;
            if (addPlayList) {
                msg = "Adding **" + playlist.getTracks().size() + "** tracks to queue from playlist: " + playlist.getName();
                if (mng.player.getPlayingTrack() == null) {
                    msg += "\nand the Player has started playing;";
                }
                tracks.forEach(mng.scheduler::queue);
            } else {
                msg = "Adding to queue " + firstTrack.getInfo().title + " (first track of playlist " + playlist.getName() + ")";
                if (mng.player.getPlayingTrack() == null) {
                    msg += "\nand the Player has started playing;";
                }
                mng.scheduler.queue(firstTrack);
            }
            MessageUtils.sendEmbed(channel, EmbedUtils.embedField(embedTitle, msg));
        }

        @Override
        public void noMatches() {
            MessageUtils.sendEmbed(channel, EmbedUtils.embedField(embedTitle, "Nothing found by _" + trackUrl + "_"));
        }

        @Override
        public void loadFailed(FriendlyException exception) {
            MessageUtils.sendEmbed(channel, EmbedUtils.embedField(embedTitle, "Could not play: " + exception.getMessage() + "\nIf this happens often try another link or join our [support guild](https://discord.gg/NKM9Xtk) for more!"));
        }
    });
}
Also used : AudioLoadResultHandler(com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler) RadioCommand(ml.duncte123.skybot.commands.music.RadioCommand) Optional(java.util.Optional) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) List(java.util.List) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Example 53 with AudioTrack

use of com.sedmelluq.discord.lavaplayer.track.AudioTrack in project lavaplayer by sedmelluq.

the class YoutubeAudioSourceManager method buildPlaylist.

private AudioPlaylist buildPlaylist(HttpInterface httpInterface, Document document, String selectedVideoId) throws IOException {
    boolean isAccessible = !document.select("#pl-header").isEmpty();
    if (!isAccessible) {
        if (selectedVideoId != null) {
            return null;
        } else {
            throw new FriendlyException("The playlist is private.", COMMON, null);
        }
    }
    Element container = document.select("#pl-header").first().parent();
    String playlistName = container.select(".pl-header-title").first().text();
    List<AudioTrack> tracks = new ArrayList<>();
    String loadMoreUrl = extractPlaylistTracks(container, container, tracks);
    int loadCount = 0;
    int pageCount = playlistPageCount;
    // Also load the next pages, each result gives us a JSON with separate values for list html and next page loader html
    while (loadMoreUrl != null && ++loadCount < pageCount) {
        try (CloseableHttpResponse response = httpInterface.execute(new HttpGet("https://www.youtube.com" + loadMoreUrl))) {
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode != 200) {
                throw new IOException("Invalid status code for playlist response: " + statusCode);
            }
            JsonBrowser json = JsonBrowser.parse(response.getEntity().getContent());
            String html = json.get("content_html").text();
            Element videoContainer = Jsoup.parse("<table>" + html + "</table>", "");
            String moreHtml = json.get("load_more_widget_html").text();
            Element moreContainer = moreHtml != null ? Jsoup.parse(moreHtml) : null;
            loadMoreUrl = extractPlaylistTracks(videoContainer, moreContainer, tracks);
        }
    }
    return new BasicAudioPlaylist(playlistName, tracks, findSelectedTrack(tracks, selectedVideoId), false);
}
Also used : BasicAudioPlaylist(com.sedmelluq.discord.lavaplayer.track.BasicAudioPlaylist) Element(org.jsoup.nodes.Element) HttpGet(org.apache.http.client.methods.HttpGet) ArrayList(java.util.ArrayList) IOException(java.io.IOException) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException) CloseableHttpResponse(org.apache.http.client.methods.CloseableHttpResponse) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) JsonBrowser(com.sedmelluq.discord.lavaplayer.tools.JsonBrowser)

Example 54 with AudioTrack

use of com.sedmelluq.discord.lavaplayer.track.AudioTrack in project lavaplayer by sedmelluq.

the class YoutubeMixProvider method loadTracksAsynchronously.

private AudioPlaylist loadTracksAsynchronously(List<String> videoIds, String selectedVideoId) {
    ExecutorCompletionService<AudioItem> completion = new ExecutorCompletionService<>(mixLoadingExecutor);
    List<AudioTrack> tracks = new ArrayList<>();
    for (final String videoId : videoIds) {
        completion.submit(() -> sourceManager.loadTrackWithVideoId(videoId, true));
    }
    try {
        fetchTrackResultsFromExecutor(completion, tracks, videoIds.size());
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    AudioTrack selectedTrack = sourceManager.findSelectedTrack(tracks, selectedVideoId);
    if (tracks.isEmpty()) {
        throw new FriendlyException("No tracks from the mix loaded succesfully.", SUSPICIOUS, null);
    } else if (selectedTrack == null) {
        throw new FriendlyException("The selected track of the mix failed to load.", SUSPICIOUS, null);
    }
    return new BasicAudioPlaylist("YouTube mix", tracks, selectedTrack, false);
}
Also used : BasicAudioPlaylist(com.sedmelluq.discord.lavaplayer.track.BasicAudioPlaylist) ArrayList(java.util.ArrayList) ExecutorCompletionService(java.util.concurrent.ExecutorCompletionService) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) AudioItem(com.sedmelluq.discord.lavaplayer.track.AudioItem) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Example 55 with AudioTrack

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

the class RandomExtractor method process.

@Override
public void process(String input, Player player, Message message, User user) throws Exception {
    int i = 0;
    for (String s : input.split(",")) {
        try {
            AudioItem probablyATrack = player.resolve(s);
            if (probablyATrack == null)
                continue;
            Track track = new Track((AudioTrack) probablyATrack);
            track.getMeta().put("requester", user.getId());
            track.getMeta().put("guildId", player.getGuildId());
            player.queue(track);
            i++;
        } catch (FriendlyException ignored) {
        }
    }
    MessageUtils.editMessage(null, MessageUtils.getEmbed().setDescription("Added " + i + " random songs to the playlist!"), message);
}
Also used : AudioItem(com.sedmelluq.discord.lavaplayer.track.AudioItem) Track(com.arsenarsen.lavaplayerbridge.player.Track) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Aggregations

AudioTrack (com.sedmelluq.discord.lavaplayer.track.AudioTrack)85 FriendlyException (com.sedmelluq.discord.lavaplayer.tools.FriendlyException)26 ArrayList (java.util.ArrayList)23 AudioPlaylist (com.sedmelluq.discord.lavaplayer.track.AudioPlaylist)21 AudioLoadResultHandler (com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler)18 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)17 AudioTrackInfo (com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)11 List (java.util.List)10 JsonBrowser (com.sedmelluq.discord.lavaplayer.tools.JsonBrowser)9 IOException (java.io.IOException)9 BasicAudioPlaylist (com.sedmelluq.discord.lavaplayer.track.BasicAudioPlaylist)8 TimeUnit (java.util.concurrent.TimeUnit)7 GuildMessageReceivedEvent (net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent)7 YoutubeAudioSourceManager (com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager)6 Optional (java.util.Optional)6 MessageBuilder (net.dv8tion.jda.core.MessageBuilder)6 Permission (net.dv8tion.jda.core.Permission)6 AudioPlayer (com.sedmelluq.discord.lavaplayer.player.AudioPlayer)5 InternalAudioTrack (com.sedmelluq.discord.lavaplayer.track.InternalAudioTrack)5 Slf4j (lombok.extern.slf4j.Slf4j)5