Lukyrouge22

Untitled

May 3rd, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.07 KB | None | 0 0
  1. package fr.lukyrouge.deneria.commands;
  2.  
  3. import com.jagrosh.jdautilities.command.Command;
  4. import com.jagrosh.jdautilities.command.CommandEvent;
  5. import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
  6. import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
  7. import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
  8. import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
  9. import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
  10. import com.sedmelluq.discord.lavaplayer.source.bandcamp.BandcampAudioSourceManager;
  11. import com.sedmelluq.discord.lavaplayer.source.http.HttpAudioSourceManager;
  12. import com.sedmelluq.discord.lavaplayer.source.local.LocalAudioSourceManager;
  13. import com.sedmelluq.discord.lavaplayer.source.soundcloud.SoundCloudAudioSourceManager;
  14. import com.sedmelluq.discord.lavaplayer.source.twitch.TwitchStreamAudioSourceManager;
  15. import com.sedmelluq.discord.lavaplayer.source.vimeo.VimeoAudioSourceManager;
  16. import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager;
  17. import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
  18. import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
  19. import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
  20. import fr.lukyrouge.deneria.music.GuildMusicManager;
  21. import fr.lukyrouge.deneria.music.TrackScheduler;
  22. import net.dv8tion.jda.core.entities.Guild;
  23. import net.dv8tion.jda.core.entities.TextChannel;
  24. import net.dv8tion.jda.core.entities.VoiceChannel;
  25. import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
  26. import net.dv8tion.jda.core.managers.AudioManager;
  27.  
  28. import java.util.HashMap;
  29. import java.util.Map;
  30. import java.util.function.Consumer;
  31.  
  32. public class PlayCommand extends Command {
  33.  
  34. private final EventWaiter waiter;
  35. private Consumer<MessageReceivedEvent> playConsumer;
  36. public static final int DEFAULT_VOLUME = 35; //(0 - 150, where 100 is default max volume)
  37. private Guild guild;
  38. GuildMusicManager mng;
  39. AudioPlayer player;
  40. TrackScheduler scheduler;
  41. private final AudioPlayerManager playerManager;
  42. private final Map<Long, GuildMusicManager> musicManagers;
  43.  
  44. public PlayCommand(EventWaiter waiter) {
  45. this.name = "play";
  46. this.aliases = new String[]{"p"};
  47. this.help = "Play the music at url given";
  48. this.arguments = "<url>";
  49. this.waiter = waiter;
  50. this.category = new Category("Music");
  51. // this.hidden = true;
  52.  
  53. this.playerManager = new DefaultAudioPlayerManager();
  54. playerManager.registerSourceManager(new YoutubeAudioSourceManager());
  55. playerManager.registerSourceManager(new SoundCloudAudioSourceManager());
  56. playerManager.registerSourceManager(new BandcampAudioSourceManager());
  57. playerManager.registerSourceManager(new VimeoAudioSourceManager());
  58. playerManager.registerSourceManager(new TwitchStreamAudioSourceManager());
  59. playerManager.registerSourceManager(new HttpAudioSourceManager());
  60. playerManager.registerSourceManager(new LocalAudioSourceManager());
  61.  
  62. musicManagers = new HashMap<Long, GuildMusicManager>();
  63. }
  64.  
  65. @Override
  66. protected void execute(CommandEvent event) {
  67. guild = event.getGuild();
  68. mng = getMusicManager(guild);
  69. player = mng.player;
  70. scheduler = mng.scheduler;
  71. try {
  72. if (event.getArgs().isEmpty()) {
  73. if (player.isPaused()) {
  74. player.setPaused(false);
  75. event.reply("Playback as been resumed.");
  76. } else if (player.getPlayingTrack() != null)
  77. event.reply("Player is already playing !");
  78. else if (scheduler.queue.isEmpty())
  79. event.reply("The current audio queue is empty! Add something to the queue first !");
  80. } else {
  81. loadAndPlay(event.getTextChannel(), event.getArgs().split("\\s+")[0]);
  82. }
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }
  86. }
  87.  
  88. private void loadAndPlay(final TextChannel channel, final String trackUrl) {
  89. GuildMusicManager musicManager = mng;
  90.  
  91. playerManager.loadItemOrdered(musicManager, trackUrl, new AudioLoadResultHandler() {
  92. @Override
  93. public void trackLoaded(AudioTrack track) {
  94. channel.sendMessage("Adding to queue " + track.getInfo().title).queue();
  95.  
  96. play(channel.getGuild(), musicManager, track);
  97. }
  98.  
  99. @Override
  100. public void playlistLoaded(AudioPlaylist playlist) {
  101. AudioTrack firstTrack = playlist.getSelectedTrack();
  102.  
  103. if (firstTrack == null) {
  104. firstTrack = playlist.getTracks().get(0);
  105. }
  106.  
  107. channel.sendMessage("Adding to queue " + firstTrack.getInfo().title + " (first track of playlist " + playlist.getName() + ")").queue();
  108.  
  109. play(channel.getGuild(), musicManager, firstTrack);
  110. }
  111.  
  112. @Override
  113. public void noMatches() {
  114. channel.sendMessage("Nothing found by " + trackUrl).queue();
  115. }
  116.  
  117. @Override
  118. public void loadFailed(FriendlyException exception) {
  119. channel.sendMessage("Could not play: " + exception.getMessage()).queue();
  120. }
  121. });
  122. }
  123.  
  124. private void play(Guild guild, GuildMusicManager musicManager, AudioTrack track) {
  125. connectToFirstVoiceChannel(guild.getAudioManager());
  126.  
  127. musicManager.scheduler.queue(track);
  128. }
  129.  
  130. private void skipTrack(TextChannel channel) {
  131. GuildMusicManager musicManager = mng;
  132. musicManager.scheduler.nextTrack();
  133.  
  134. channel.sendMessage("Skipped to next track.").queue();
  135. }
  136.  
  137. private static void connectToFirstVoiceChannel(AudioManager audioManager) {
  138. if (!audioManager.isConnected() && !audioManager.isAttemptingToConnect()) {
  139. for (VoiceChannel voiceChannel : audioManager.getGuild().getVoiceChannels()) {
  140. audioManager.openAudioConnection(voiceChannel);
  141. break;
  142. }
  143. }
  144. }
  145.  
  146. private synchronized GuildMusicManager getMusicManager(Guild guild) {
  147. long guildId = Long.parseLong(guild.getId());
  148. GuildMusicManager musicManager = musicManagers.get(guildId);
  149.  
  150. if (musicManager == null) {
  151. musicManager = new GuildMusicManager(playerManager);
  152. musicManagers.put(guildId, musicManager);
  153. }
  154.  
  155. guild.getAudioManager().setSendingHandler(musicManager.getSendHandler());
  156.  
  157. return musicManager;
  158. }
  159.  
  160. private static String getTimestamp(long milliseconds) {
  161. int seconds = (int) (milliseconds / 1000) % 60;
  162. int minutes = (int) ((milliseconds / (1000 * 60)) % 60);
  163. int hours = (int) ((milliseconds / (1000 * 60 * 60)) % 24);
  164.  
  165. if (hours > 0)
  166. return String.format("%02d:%02d:%02d", hours, minutes, seconds);
  167. else
  168. return String.format("%02d:%02d", minutes, seconds);
  169. }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment