diff --git a/licenses/LICENSE.netbeans b/licenses/LICENSE.netbeans new file mode 100644 index 0000000..c766fc2 --- /dev/null +++ b/licenses/LICENSE.netbeans @@ -0,0 +1,31 @@ +/** + * This is a place-holder license header that is inserted by NetBeans when source files are created. If you're + * reading this message and seeing TBDs below, you need to run this maven command to update them: + * + * mvn license:format + * + * Project: TBD, File: TBD + * + * Copyright TBD Locusworks LLC. + * All rights reserved. Federal copyright law prohibits unauthorized reproduction by + * any means and imposes fines up to $25,000 for violation. No part of this material + * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, + * modified, duplicated, adapted or translated into another program language in any + * form or by any means, electronic, mechanical, photocopying, recording, or + * otherwise, without the prior written permission from Locusworks. Locusworks + * affirms that Eight-Track(R) software and data is subject to United States + * Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive + * Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + * + * IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY + * LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF + * THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND + * ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS + * IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ \ No newline at end of file diff --git a/licenses/LICENSE.template b/licenses/LICENSE.template new file mode 100644 index 0000000..55f2e67 --- /dev/null +++ b/licenses/LICENSE.template @@ -0,0 +1,25 @@ + +Project: ${project.name}, File: ${file.name} + +Copyright ${license.git.copyrightLastYear} Locusworks LLC. +All rights reserved. Federal copyright law prohibits unauthorized reproduction by +any means and imposes fines up to $25,000 for violation. No part of this material +may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, +modified, duplicated, adapted or translated into another program language in any +form or by any means, electronic, mechanical, photocopying, recording, or +otherwise, without the prior written permission from Locusworks. Locusworks +affirms that Eight-Track(R) software and data is subject to United States +Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive +Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + +IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, +INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT +OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY +LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF +THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND +ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS +IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, +ENHANCEMENTS, OR MODIFICATIONS. diff --git a/pom.xml b/pom.xml index 9597d7d..4831a91 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,23 @@ eight-track 0.0.1-SNAPSHOT Eight Track + 2019 + + + Locusworks + https://www.locusworks.net + + + + git@gitea.locusworks.net:Locusworks/eight-track.git + 2.11.2 1.7.26 http://nexus.locusworks.net 5.2.2 + 3.0 @@ -84,6 +95,29 @@ + + com.mycila + license-maven-plugin + ${license-maven-plugin.version} + + false +
${basedir}/licenses/LICENSE.template
+ true + true + + **/*.java + +
+ + + + com.mycila + license-maven-plugin-git + ${license-maven-plugin.version} + + +
diff --git a/src/main/java/net/locusworks/discord/eighttrack/adaptors/MusicListenerAdaptor.java b/src/main/java/net/locusworks/discord/eighttrack/adaptors/MusicListenerAdaptor.java index 0049dc4..a5ca8f4 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/adaptors/MusicListenerAdaptor.java +++ b/src/main/java/net/locusworks/discord/eighttrack/adaptors/MusicListenerAdaptor.java @@ -1,177 +1,97 @@ +/** + * + * Project: Eight Track, File: MusicListenerAdaptor.java + * + * Copyright 2019 Locusworks LLC. + * All rights reserved. Federal copyright law prohibits unauthorized reproduction by + * any means and imposes fines up to $25,000 for violation. No part of this material + * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, + * modified, duplicated, adapted or translated into another program language in any + * form or by any means, electronic, mechanical, photocopying, recording, or + * otherwise, without the prior written permission from Locusworks. Locusworks + * affirms that Eight-Track(R) software and data is subject to United States + * Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive + * Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + * + * IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY + * LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF + * THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND + * ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS + * IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ package net.locusworks.discord.eighttrack.adaptors; import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; -import java.time.OffsetDateTime; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; -import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; -import com.sedmelluq.discord.lavaplayer.track.AudioTrack; - -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.Permission; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.entities.VoiceChannel; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.dv8tion.jda.api.managers.AudioManager; -import net.locusworks.discord.eighttrack.handlers.EightTrackAudioSendHandler; -import net.locusworks.discord.eighttrack.main.Entry; -import net.locusworks.discord.eighttrack.scheduler.TrackScheduler; +import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLoggerFactory; public class MusicListenerAdaptor extends ListenerAdapter { private Path musicDir; - private TrackScheduler ts; - private DefaultAudioPlayerManager apm; private ApplicationLogger logger; - private AudioPlayer player; - private AtomicBoolean playing; + + private Map playerMap; public MusicListenerAdaptor(Path musicDir) throws IOException { - this.logger = ApplicationLoggerFactory.getLogger(Entry.class); - this.playing = new AtomicBoolean(false); + this.logger = ApplicationLoggerFactory.getLogger(MusicListenerAdaptor.class); + this.playerMap = new ConcurrentHashMap<>(); this.musicDir = musicDir; - - this.apm = new DefaultAudioPlayerManager(); - - AudioSourceManagers.registerLocalSource(apm); - this.player = apm.createPlayer(); - - this.ts = new TrackScheduler(); - player.addListener(ts); - indexFiles(); } @Override public void onGuildMessageReceived(GuildMessageReceivedEvent event) { if (event.getAuthor().isBot()) return; + try { + onGuildMessageReceivedHelper(event); + } catch (Throwable t) { + logger.error(t); + } + } + private void onGuildMessageReceivedHelper(GuildMessageReceivedEvent event) throws IOException { + + if (!playerMap.containsKey(event.getGuild().getIdLong())) { + playerMap.put(event.getGuild().getIdLong(), new GuildMusicHandler(musicDir)); + } + GuildMusicHandler gmh = playerMap.get(event.getGuild().getIdLong()); + String command = event.getMessage().getContentRaw().trim().toLowerCase(); switch (command) { case "-play": - playing.set(true); - play(event); + gmh.isPlaying(true); + gmh.play(event); return; case "-stop": - playing.set(false); - stop(event); + gmh.isPlaying(false); + gmh.stop(event); return; case "-next": - next(event); + gmh.next(event); return; case "-repeat": - playing.set(true); - repeat(event); + gmh.isPlaying(true); + gmh.repeat(event); return; case "-whatsnext": - whatsNext(event); + gmh.whatsNext(event); break; case "-index": - index(event); + gmh.index(event); break; default: return; } } - - private void indexFiles() throws IOException { - List songs = Files.walk(musicDir) - .filter(p-> p.getFileName().toString().endsWith(".mp3")) - .collect(Collectors.toList()); - - logger.info("Adding %d songs from directory %s", songs.size(), musicDir); - - for (Path song : songs) { - logger.debug("Loading song: %s", song); - try { - apm.loadItem(song.toAbsolutePath().toString(), ts); - } catch (IllegalStateException ex) { - logger.warn("Unable to load song :%s -> %s", song.toAbsolutePath().toString(), ex.getMessage()); - } - } - } - - private void index(GuildMessageReceivedEvent event) { - event.getChannel().sendMessage(String.format("<@%s>, Please wait as i reindex the music files", event.getAuthor().getId())).queue(); - try { - indexFiles(); - } catch (IOException e) { - event.getChannel().sendMessage(String.format("<@%s>, Unable to reindex the music files: %s", event.getAuthor().getId(), e.getMessage())).queue(); - return; - } - - event.getChannel().sendMessage(String.format("<@%s>, Reindexing complete", event.getAuthor().getId())).queue(); - } - - private void whatsNext(GuildMessageReceivedEvent event) { - AudioTrack track = ts.peek(); - MessageEmbed embed = new EmbedBuilder() - .setAuthor(event.getMember().getEffectiveName(), null, event.getAuthor().getAvatarUrl()) - .setTitle("Next Up:") - .setDescription(String.format("**%s** by __%s__", track.getInfo().title, track.getInfo().author)) - .setTimestamp(OffsetDateTime.now()) - .build(); - event.getChannel().sendMessage(embed).queue(); - } - - private void repeat(GuildMessageReceivedEvent event) { - next(event); - ts.setFinishedCallback((ater) -> { - if (!playing.get()) return; - next(event); - }); - } - - private void next(GuildMessageReceivedEvent event) { - stop(event); - play(event); - } - - private void stop(GuildMessageReceivedEvent event) { - player.stopTrack(); - } - - private void play(GuildMessageReceivedEvent event) { - VoiceChannel vc = event.getMember().getVoiceState().getChannel(); - if (vc == null) { - event.getChannel().sendMessage(String.format("<@%s> you are not in a voice channel to play music", event.getMember().getId())).queue(); - return; - } - - if (!event.getGuild().getSelfMember().hasPermission(vc, Permission.VOICE_CONNECT, Permission.VOICE_SPEAK)) { - event.getChannel().sendMessage(String.format("<@%s>, I cannot play my music in channel %s as I dont have permission to", - event.getMember().getId(), vc.getName())).queue(); - return; - } - - AudioManager manager = event.getGuild().getAudioManager(); - manager.openAudioConnection(vc); - - manager.setSendingHandler(new EightTrackAudioSendHandler(player)); - - if (ts.hasTracks()) { - AudioTrack track = ts.getNextTrack(); - - MessageEmbed embed = new EmbedBuilder() - .setAuthor(event.getMember().getEffectiveName(), null, event.getAuthor().getAvatarUrl()) - .setTitle("Now Playing:") - .setDescription(String.format("**%s** by __%s__", track.getInfo().title, track.getInfo().author)) - .setTimestamp(OffsetDateTime.now()) - .build(); - - event.getChannel().sendMessage(embed).queue(); - player.playTrack(track); - ts.trackLoaded(track); - } - } - - } diff --git a/src/main/java/net/locusworks/discord/eighttrack/handlers/EightTrackAudioSendHandler.java b/src/main/java/net/locusworks/discord/eighttrack/handlers/EightTrackAudioSendHandler.java index 2e30698..e05df0b 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/handlers/EightTrackAudioSendHandler.java +++ b/src/main/java/net/locusworks/discord/eighttrack/handlers/EightTrackAudioSendHandler.java @@ -1,3 +1,30 @@ +/** + * + * Project: Eight Track, File: EightTrackAudioSendHandler.java + * + * Copyright 2019 Locusworks LLC. + * All rights reserved. Federal copyright law prohibits unauthorized reproduction by + * any means and imposes fines up to $25,000 for violation. No part of this material + * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, + * modified, duplicated, adapted or translated into another program language in any + * form or by any means, electronic, mechanical, photocopying, recording, or + * otherwise, without the prior written permission from Locusworks. Locusworks + * affirms that Eight-Track(R) software and data is subject to United States + * Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive + * Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + * + * IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY + * LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF + * THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND + * ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS + * IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ package net.locusworks.discord.eighttrack.handlers; import java.nio.ByteBuffer; diff --git a/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java b/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java new file mode 100644 index 0000000..4da92be --- /dev/null +++ b/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java @@ -0,0 +1,173 @@ +/** + * + * Project: Eight Track, File: GuildMusicHandler.java + * + * Copyright 2019 Locusworks LLC. + * All rights reserved. Federal copyright law prohibits unauthorized reproduction by + * any means and imposes fines up to $25,000 for violation. No part of this material + * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, + * modified, duplicated, adapted or translated into another program language in any + * form or by any means, electronic, mechanical, photocopying, recording, or + * otherwise, without the prior written permission from Locusworks. Locusworks + * affirms that Eight-Track(R) software and data is subject to United States + * Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive + * Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + * + * IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY + * LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF + * THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND + * ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS + * IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ +package net.locusworks.discord.eighttrack.handlers; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.OffsetDateTime; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; +import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; +import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; +import com.sedmelluq.discord.lavaplayer.track.AudioTrack; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.VoiceChannel; +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.managers.AudioManager; +import net.locusworks.discord.eighttrack.scheduler.TrackScheduler; +import net.locusworks.logger.ApplicationLogger; +import net.locusworks.logger.ApplicationLoggerFactory; + +public class GuildMusicHandler { + + private Path musicDir; + private TrackScheduler ts; + private DefaultAudioPlayerManager apm; + private ApplicationLogger logger; + private AudioPlayer player; + private AtomicBoolean playing; + + public GuildMusicHandler(Path musicDir) throws IOException { + this.logger = ApplicationLoggerFactory.getLogger(GuildMusicHandler.class); + this.playing = new AtomicBoolean(false); + this.musicDir = musicDir; + + this.apm = new DefaultAudioPlayerManager(); + + AudioSourceManagers.registerLocalSource(apm); + this.player = apm.createPlayer(); + + this.ts = new TrackScheduler(); + player.addListener(ts); + indexFiles(); + } + + public void isPlaying(boolean playing) { + this.playing.set(playing); + } + + public void indexFiles() throws IOException { + List songs = Files.walk(musicDir) + .filter(p-> p.getFileName().toString().endsWith(".mp3")) + .collect(Collectors.toList()); + + logger.info("Adding %d songs from directory %s", songs.size(), musicDir); + + for (Path song : songs) { + logger.debug("Loading song: %s", song); + try { + apm.loadItem(song.toAbsolutePath().toString(), ts); + } catch (IllegalStateException ex) { + logger.warn("Unable to load song :%s -> %s", song.toAbsolutePath().toString(), ex.getMessage()); + } + } + } + + public void index(GuildMessageReceivedEvent event) { + event.getChannel().sendMessage(String.format("<@%s>, Please wait as i reindex the music files", event.getAuthor().getId())).queue(); + try { + indexFiles(); + } catch (IOException e) { + event.getChannel().sendMessage(String.format("<@%s>, Unable to reindex the music files: %s", event.getAuthor().getId(), e.getMessage())).queue(); + return; + } + + event.getChannel().sendMessage(String.format("<@%s>, Reindexing complete", event.getAuthor().getId())).queue(); + } + + public void whatsNext(GuildMessageReceivedEvent event) { + AudioTrack track = ts.peek(); + MessageEmbed embed = new EmbedBuilder() + .setAuthor(event.getMember().getEffectiveName(), null, event.getAuthor().getAvatarUrl()) + .setTitle("Next Up:") + .setDescription(String.format("**%s** by __%s__", track.getInfo().title, track.getInfo().author)) + .setTimestamp(OffsetDateTime.now()) + .build(); + event.getChannel().sendMessage(embed).queue(); + } + + public void repeat(GuildMessageReceivedEvent event) { + next(event); + ts.setFinishedCallback((ater) -> { + if (!playing.get()) return; + next(event); + }); + } + + public void next(GuildMessageReceivedEvent event) { + playing.set(false); + stop(event); + play(event); + playing.set(true); + } + + public void stop(GuildMessageReceivedEvent event) { + player.stopTrack(); + } + + public void play(GuildMessageReceivedEvent event) { + VoiceChannel vc = event.getMember().getVoiceState().getChannel(); + if (vc == null) { + event.getChannel().sendMessage(String.format("<@%s> you are not in a voice channel to play music", event.getMember().getId())).queue(); + return; + } + + if (!event.getGuild().getSelfMember().hasPermission(vc, Permission.VOICE_CONNECT, Permission.VOICE_SPEAK)) { + event.getChannel().sendMessage(String.format("<@%s>, I cannot play my music in channel %s as I dont have permission to", + event.getMember().getId(), vc.getName())).queue(); + return; + } + + AudioManager manager = event.getGuild().getAudioManager(); + manager.openAudioConnection(vc); + + manager.setSendingHandler(new EightTrackAudioSendHandler(player)); + + if (ts.hasTracks()) { + AudioTrack track = ts.getNextTrack(); + + MessageEmbed embed = new EmbedBuilder() + .setAuthor(event.getMember().getEffectiveName(), null, event.getAuthor().getAvatarUrl()) + .setTitle("Now Playing:") + .setDescription(String.format("**%s** by __%s__", track.getInfo().title, track.getInfo().author)) + .setTimestamp(OffsetDateTime.now()) + .build(); + + event.getChannel().sendMessage(embed).queue(); + player.playTrack(track); + ts.trackLoaded(track); + } + } +} diff --git a/src/main/java/net/locusworks/discord/eighttrack/main/Entry.java b/src/main/java/net/locusworks/discord/eighttrack/main/Entry.java index a942315..259ef27 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/main/Entry.java +++ b/src/main/java/net/locusworks/discord/eighttrack/main/Entry.java @@ -1,3 +1,30 @@ +/** + * + * Project: Eight Track, File: Entry.java + * + * Copyright 2019 Locusworks LLC. + * All rights reserved. Federal copyright law prohibits unauthorized reproduction by + * any means and imposes fines up to $25,000 for violation. No part of this material + * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, + * modified, duplicated, adapted or translated into another program language in any + * form or by any means, electronic, mechanical, photocopying, recording, or + * otherwise, without the prior written permission from Locusworks. Locusworks + * affirms that Eight-Track(R) software and data is subject to United States + * Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive + * Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + * + * IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY + * LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF + * THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND + * ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS + * IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ package net.locusworks.discord.eighttrack.main; import java.io.IOException; diff --git a/src/main/java/net/locusworks/discord/eighttrack/scheduler/TrackScheduler.java b/src/main/java/net/locusworks/discord/eighttrack/scheduler/TrackScheduler.java index e7a2814..715a047 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/scheduler/TrackScheduler.java +++ b/src/main/java/net/locusworks/discord/eighttrack/scheduler/TrackScheduler.java @@ -1,3 +1,30 @@ +/** + * + * Project: Eight Track, File: TrackScheduler.java + * + * Copyright 2019 Locusworks LLC. + * All rights reserved. Federal copyright law prohibits unauthorized reproduction by + * any means and imposes fines up to $25,000 for violation. No part of this material + * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied, + * modified, duplicated, adapted or translated into another program language in any + * form or by any means, electronic, mechanical, photocopying, recording, or + * otherwise, without the prior written permission from Locusworks. Locusworks + * affirms that Eight-Track(R) software and data is subject to United States + * Government Purpose Rights. Contact Locusworks, 1313 Lawnview Drive + * Forney TX 75126, (802) 488-0438, for commercial licensing opportunities. + * + * IN NO EVENT SHALL LOCUSWORKS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF LOCUSWORKS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NO RESPONSIBILITY IS ASSUMED BY + * LOCUSWORKS FOR ITS USE, OR FOR ANY INFRINGEMENTS OF PATENTS OR OTHER RIGHTS OF + * THIRD PARTIES RESULTING FROM ITS USE. LOCUSWORKS SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND + * ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS + * IS". LOCUSWORKS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ package net.locusworks.discord.eighttrack.scheduler; import java.util.Queue; diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 078aa7e..2ae8612 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -12,7 +12,7 @@ + filePattern="eighttrack-%d{yyyy-MM-dd}.log.gz">