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">