Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package fr.lukyrouge.deneria.commands;
- import com.jagrosh.jdautilities.command.Command;
- import com.jagrosh.jdautilities.command.CommandEvent;
- import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
- import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
- import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
- import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
- import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
- import com.sedmelluq.discord.lavaplayer.source.bandcamp.BandcampAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.source.http.HttpAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.source.local.LocalAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.source.soundcloud.SoundCloudAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.source.twitch.TwitchStreamAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.source.vimeo.VimeoAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager;
- import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
- import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
- import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
- import fr.lukyrouge.deneria.music.GuildMusicManager;
- import fr.lukyrouge.deneria.music.TrackScheduler;
- import net.dv8tion.jda.core.entities.Guild;
- import net.dv8tion.jda.core.entities.TextChannel;
- import net.dv8tion.jda.core.entities.VoiceChannel;
- import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
- import net.dv8tion.jda.core.managers.AudioManager;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.function.Consumer;
- public class PlayCommand extends Command {
- private final EventWaiter waiter;
- private Consumer<MessageReceivedEvent> playConsumer;
- public static final int DEFAULT_VOLUME = 35; //(0 - 150, where 100 is default max volume)
- private Guild guild;
- GuildMusicManager mng;
- AudioPlayer player;
- TrackScheduler scheduler;
- private final AudioPlayerManager playerManager;
- private final Map<Long, GuildMusicManager> musicManagers;
- public PlayCommand(EventWaiter waiter) {
- this.name = "play";
- this.aliases = new String[]{"p"};
- this.help = "Play the music at url given";
- this.arguments = "<url>";
- this.waiter = waiter;
- this.category = new Category("Music");
- // this.hidden = true;
- this.playerManager = new DefaultAudioPlayerManager();
- playerManager.registerSourceManager(new YoutubeAudioSourceManager());
- playerManager.registerSourceManager(new SoundCloudAudioSourceManager());
- playerManager.registerSourceManager(new BandcampAudioSourceManager());
- playerManager.registerSourceManager(new VimeoAudioSourceManager());
- playerManager.registerSourceManager(new TwitchStreamAudioSourceManager());
- playerManager.registerSourceManager(new HttpAudioSourceManager());
- playerManager.registerSourceManager(new LocalAudioSourceManager());
- musicManagers = new HashMap<Long, GuildMusicManager>();
- }
- @Override
- protected void execute(CommandEvent event) {
- guild = event.getGuild();
- mng = getMusicManager(guild);
- player = mng.player;
- scheduler = mng.scheduler;
- try {
- if (event.getArgs().isEmpty()) {
- if (player.isPaused()) {
- player.setPaused(false);
- event.reply("Playback as been resumed.");
- } else if (player.getPlayingTrack() != null)
- event.reply("Player is already playing !");
- else if (scheduler.queue.isEmpty())
- event.reply("The current audio queue is empty! Add something to the queue first !");
- } else {
- loadAndPlay(event.getTextChannel(), event.getArgs().split("\\s+")[0]);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void loadAndPlay(final TextChannel channel, final String trackUrl) {
- GuildMusicManager musicManager = mng;
- 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);
- }
- @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);
- }
- @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();
- }
- });
- }
- private void play(Guild guild, GuildMusicManager musicManager, AudioTrack track) {
- connectToFirstVoiceChannel(guild.getAudioManager());
- musicManager.scheduler.queue(track);
- }
- private void skipTrack(TextChannel channel) {
- GuildMusicManager musicManager = mng;
- musicManager.scheduler.nextTrack();
- channel.sendMessage("Skipped to next track.").queue();
- }
- private static void connectToFirstVoiceChannel(AudioManager audioManager) {
- if (!audioManager.isConnected() && !audioManager.isAttemptingToConnect()) {
- for (VoiceChannel voiceChannel : audioManager.getGuild().getVoiceChannels()) {
- audioManager.openAudioConnection(voiceChannel);
- break;
- }
- }
- }
- private synchronized GuildMusicManager getMusicManager(Guild guild) {
- long guildId = Long.parseLong(guild.getId());
- GuildMusicManager musicManager = musicManagers.get(guildId);
- if (musicManager == null) {
- musicManager = new GuildMusicManager(playerManager);
- musicManagers.put(guildId, musicManager);
- }
- guild.getAudioManager().setSendingHandler(musicManager.getSendHandler());
- return musicManager;
- }
- private static String getTimestamp(long milliseconds) {
- int seconds = (int) (milliseconds / 1000) % 60;
- int minutes = (int) ((milliseconds / (1000 * 60)) % 60);
- int hours = (int) ((milliseconds / (1000 * 60 * 60)) % 24);
- if (hours > 0)
- return String.format("%02d:%02d:%02d", hours, minutes, seconds);
- else
- return String.format("%02d:%02d", minutes, seconds);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment