Refactored how the music handler was being referenced
Some checks failed
Locusworks Team/eight-track/pipeline/head There was a failure building this commit

This commit is contained in:
Isaac Parenteau
2020-01-06 21:22:54 -06:00
parent 4c68e6bf09
commit 2f89362a8b
25 changed files with 169 additions and 120 deletions

View File

@ -76,6 +76,9 @@ public class Log implements Serializable {
@Column(name = "date_added") @Column(name = "date_added")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Date dateAdded; private Date dateAdded;
@Lob
@Column(name = "exception")
private byte[] exception;
@JoinColumn(name = "guild", referencedColumnName = "id") @JoinColumn(name = "guild", referencedColumnName = "id")
@ManyToOne(optional = false) @ManyToOne(optional = false)
private DiscordGuild guild; private DiscordGuild guild;
@ -126,6 +129,14 @@ public class Log implements Serializable {
this.dateAdded = dateAdded; this.dateAdded = dateAdded;
} }
public byte[] getException() {
return exception;
}
public void setException(byte[] exception) {
this.exception = exception;
}
public DiscordGuild getGuild() { public DiscordGuild getGuild() {
return guild; return guild;
} }

View File

@ -33,7 +33,6 @@ import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException; import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.requests.ErrorResponse; import net.dv8tion.jda.api.requests.ErrorResponse;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.handlers.ReactionHandler; import net.locusworks.discord.eighttrack.handlers.ReactionHandler;
public abstract class AbstractEvent { public abstract class AbstractEvent {
@ -48,7 +47,7 @@ public abstract class AbstractEvent {
return this.command; return this.command;
} }
public abstract void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands); public abstract void executeEvent(GuildMessageReceivedEvent event, List<String> commands);
public abstract String help(); public abstract String help();

View File

@ -40,7 +40,6 @@ import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.database.entities.GuildPlaylist; import net.locusworks.discord.eighttrack.database.entities.GuildPlaylist;
import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler; import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.handlers.ReactionHandler; import net.locusworks.discord.eighttrack.handlers.ReactionHandler;
import net.locusworks.discord.eighttrack.listeners.ReactionListener; import net.locusworks.discord.eighttrack.listeners.ReactionListener;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
@ -65,7 +64,7 @@ public class AdminPlaylistDeleteHandler extends AbstractAdminEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return; if (!isAdmin(event)) return;
if (!checkCommands(event, commands, 2, "Must provide playlist and user's tag (in that order)")) return; if (!checkCommands(event, commands, 2, "Must provide playlist and user's tag (in that order)")) return;
@ -124,7 +123,7 @@ public class AdminPlaylistDeleteHandler extends AbstractAdminEventHandler {
@Override @Override
public String help() { public String help() {
return "delete"; return "delete <playlist name> <user discord tag>";
} }
} }

View File

@ -37,7 +37,6 @@ import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.database.entities.GuildPlaylist; import net.locusworks.discord.eighttrack.database.entities.GuildPlaylist;
import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler; import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
@Component @Component
@ -50,7 +49,7 @@ public class AdminPlaylistListHandler extends AbstractAdminEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return; if (!isAdmin(event)) return;
List<GuildPlaylist> userPlaylist = guildRepoService.getGuildPlaylistRepo().findByGuildFetchSongs(event.getGuild().getIdLong()); List<GuildPlaylist> userPlaylist = guildRepoService.getGuildPlaylistRepo().findByGuildFetchSongs(event.getGuild().getIdLong());

View File

@ -36,7 +36,6 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler; import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -65,11 +64,11 @@ public class AdminPlaylistHandler extends AbstractMainEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return; if (!isAdmin(event)) return;
if (commands == null || commands.isEmpty()) { if (commands == null || commands.isEmpty()) {
event.getChannel().sendMessage("Missing command for -playlist. Valid commands are: add, delete, list, play").queue(); event.getChannel().sendMessage("Missing command for +playlist. Valid commands are: list, delete").queue();
return; return;
} }
try { try {
@ -81,7 +80,7 @@ public class AdminPlaylistHandler extends AbstractMainEventHandler {
return; return;
} }
apeh.executeEvent(musicHandler, event, commands); apeh.executeEvent(event, commands);
} catch (Exception ex) { } catch (Exception ex) {
logger.error("Unable to display playlist: " + ex.getMessage(), ex); logger.error("Unable to display playlist: " + ex.getMessage(), ex);

View File

@ -40,7 +40,6 @@ import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.database.entities.GuildSong; import net.locusworks.discord.eighttrack.database.entities.GuildSong;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.handlers.ReactionHandler; import net.locusworks.discord.eighttrack.handlers.ReactionHandler;
import net.locusworks.discord.eighttrack.listeners.ReactionListener; import net.locusworks.discord.eighttrack.listeners.ReactionListener;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
@ -65,7 +64,7 @@ public class DeleteSongHandler extends AbstractMainEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if(!isAdmin(event)) return; if(!isAdmin(event)) return;
if (commands == null || commands.isEmpty()) { if (commands == null || commands.isEmpty()) {

View File

@ -33,6 +33,7 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class NextSongHandler extends AbstractMainEventHandler {
@Autowired @Autowired
private RepositoryService guildRepoService; private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public NextSongHandler() { public NextSongHandler() {
super("-next"); super("-next");
logger = ApplicationLoggerFactory.getLogger(NextSongHandler.class); logger = ApplicationLoggerFactory.getLogger(NextSongHandler.class);
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try { try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.next(event, commands); musicHandler.next(event, commands);
} catch (Exception ex) { } catch (Exception ex) {
logger.error("Unable to play next song: " + ex.getMessage(), ex); logger.error("Unable to play next song: " + ex.getMessage(), ex);

View File

@ -33,6 +33,7 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class PlaySongHandler extends AbstractMainEventHandler {
@Autowired @Autowired
private RepositoryService guildRepoService; private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public PlaySongHandler() { public PlaySongHandler() {
super("-play"); super("-play");
logger = ApplicationLoggerFactory.getLogger(PlaySongHandler.class); logger = ApplicationLoggerFactory.getLogger(PlaySongHandler.class);
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try { try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.play(event, commands); musicHandler.play(event, commands);
musicHandler.isPlaying(true); musicHandler.isPlaying(true);
} catch (Exception ex) { } catch (Exception ex) {

View File

@ -36,7 +36,6 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.events.playlist.AbstractPlaylistEventHandler; import net.locusworks.discord.eighttrack.events.playlist.AbstractPlaylistEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -65,7 +64,7 @@ public class PlaylistHandler extends AbstractMainEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (commands == null || commands.isEmpty()) { if (commands == null || commands.isEmpty()) {
event.getChannel().sendMessage("Missing command for -playlist. Valid commands are: add, delete, list, play").queue(); event.getChannel().sendMessage("Missing command for -playlist. Valid commands are: add, delete, list, play").queue();
return; return;
@ -79,7 +78,7 @@ public class PlaylistHandler extends AbstractMainEventHandler {
return; return;
} }
apeh.executeEvent(musicHandler, event, commands); apeh.executeEvent(event, commands);
} catch (Exception ex) { } catch (Exception ex) {
logger.error("Unable to display playlist: " + ex.getMessage(), ex); logger.error("Unable to display playlist: " + ex.getMessage(), ex);

View File

@ -33,6 +33,7 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class RepeatSongHandler extends AbstractMainEventHandler {
@Autowired @Autowired
private RepositoryService guildRepoService; private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public RepeatSongHandler() { public RepeatSongHandler() {
super("-repeat"); super("-repeat");
logger = ApplicationLoggerFactory.getLogger(RepeatSongHandler.class); logger = ApplicationLoggerFactory.getLogger(RepeatSongHandler.class);
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try { try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.repeat(event); musicHandler.repeat(event);
musicHandler.isPlaying(true); musicHandler.isPlaying(true);
} catch (Exception ex) { } catch (Exception ex) {

View File

@ -34,7 +34,6 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.database.entities.GuildSong; import net.locusworks.discord.eighttrack.database.entities.GuildSong;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -53,7 +52,7 @@ public class SongListHandler extends AbstractMainEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try { try {
listSongs(event, commands); listSongs(event, commands);
} catch (Exception ex) { } catch (Exception ex) {

View File

@ -33,6 +33,7 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class StopSongHandler extends AbstractMainEventHandler {
@Autowired @Autowired
private RepositoryService guildRepoService; private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public StopSongHandler() { public StopSongHandler() {
super("-stop"); super("-stop");
logger = ApplicationLoggerFactory.getLogger(StopSongHandler.class); logger = ApplicationLoggerFactory.getLogger(StopSongHandler.class);
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try { try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.isPlaying(false); musicHandler.isPlaying(false);
musicHandler.stop(event); musicHandler.stop(event);
event.getGuild().getAudioManager().closeAudioConnection(); event.getGuild().getAudioManager().closeAudioConnection();

View File

@ -33,6 +33,7 @@ import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class UpNextSongHandler extends AbstractMainEventHandler {
@Autowired @Autowired
private RepositoryService guildRepoService; private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public UpNextSongHandler() { public UpNextSongHandler() {
super("-upnext"); super("-upnext");
logger = ApplicationLoggerFactory.getLogger(UpNextSongHandler.class); logger = ApplicationLoggerFactory.getLogger(UpNextSongHandler.class);
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try { try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.repeat(event); musicHandler.repeat(event);
musicHandler.isPlaying(true); musicHandler.isPlaying(true);
} catch (Exception ex) { } catch (Exception ex) {

View File

@ -49,7 +49,6 @@ import net.locusworks.discord.eighttrack.database.entities.DiscordGuild;
import net.locusworks.discord.eighttrack.database.entities.GuildSong; import net.locusworks.discord.eighttrack.database.entities.GuildSong;
import net.locusworks.discord.eighttrack.database.entities.Song; import net.locusworks.discord.eighttrack.database.entities.Song;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.ConfigurationService; import net.locusworks.discord.eighttrack.services.ConfigurationService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
@ -75,7 +74,7 @@ public class UploadHandler extends AbstractMainEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return; if (!isAdmin(event)) return;
for(Attachment attachment : event.getMessage().getAttachments()) { for(Attachment attachment : event.getMessage().getAttachments()) {

View File

@ -58,7 +58,7 @@ public class PlaylistAddHandler extends AbstractPlaylistEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if(!checkCommands(event, commands, if(!checkCommands(event, commands,
event.getAuthor().getAsMention() + " you have to provide the playlist to create a new playlist (no spaces in name) and optionally a list of uuids for songs to add")) return; event.getAuthor().getAsMention() + " you have to provide the playlist to create a new playlist (no spaces in name) and optionally a list of uuids for songs to add")) return;

View File

@ -66,7 +66,7 @@ public class PlaylistDeleteHandler extends AbstractPlaylistEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if(!checkCommands(event, commands, if(!checkCommands(event, commands,
event.getAuthor().getAsMention() + " you have to provide the playlist name and optionally a list of uuids for songs to remove")) return; event.getAuthor().getAsMention() + " you have to provide the playlist name and optionally a list of uuids for songs to remove")) return;

View File

@ -50,7 +50,7 @@ public class PlaylistListHandler extends AbstractPlaylistEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (commands == null || commands.isEmpty()) { if (commands == null || commands.isEmpty()) {
List<GuildPlaylist> userPlaylist = guildRepoService.getGuildPlaylistRepo().findByGuildAndUserIdFetchSongs(event.getGuild().getIdLong(), event.getMember().getIdLong()); List<GuildPlaylist> userPlaylist = guildRepoService.getGuildPlaylistRepo().findByGuildAndUserIdFetchSongs(event.getGuild().getIdLong(), event.getMember().getIdLong());
if (userPlaylist.isEmpty()) { if (userPlaylist.isEmpty()) {

View File

@ -36,6 +36,7 @@ import net.locusworks.discord.eighttrack.database.entities.GuildPlaylistSong;
import net.locusworks.discord.eighttrack.database.entities.Song; import net.locusworks.discord.eighttrack.database.entities.Song;
import net.locusworks.discord.eighttrack.events.playlist.AbstractPlaylistEventHandler; import net.locusworks.discord.eighttrack.events.playlist.AbstractPlaylistEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -46,6 +47,9 @@ public class PlaylistPlayHandler extends AbstractPlaylistEventHandler {
@Autowired @Autowired
private RepositoryService guildRepoService; private RepositoryService guildRepoService;
@Autowired
private GuildMusicService guildMusicService;
private ApplicationLogger logger; private ApplicationLogger logger;
public PlaylistPlayHandler() { public PlaylistPlayHandler() {
super("play"); super("play");
@ -53,7 +57,7 @@ public class PlaylistPlayHandler extends AbstractPlaylistEventHandler {
} }
@Override @Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) { public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (commands == null || commands.isEmpty()) { if (commands == null || commands.isEmpty()) {
event.getChannel().sendMessage(event.getAuthor().getAsMention() + " please provide the name of the playlist to play").queue(); event.getChannel().sendMessage(event.getAuthor().getAsMention() + " please provide the name of the playlist to play").queue();
return; return;
@ -68,6 +72,8 @@ public class PlaylistPlayHandler extends AbstractPlaylistEventHandler {
return; return;
} }
GuildMusicHandler musicHandler = guildMusicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.setCurrentPlaylist(currentPlaylist); musicHandler.setCurrentPlaylist(currentPlaylist);
musicHandler.getTrackManager().clearTracks(); musicHandler.getTrackManager().clearTracks();

View File

@ -53,7 +53,6 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.locusworks.discord.eighttrack.database.entities.DiscordGuild; import net.locusworks.discord.eighttrack.database.entities.DiscordGuild;
import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler; import net.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.services.ConfigurationService; import net.locusworks.discord.eighttrack.services.ConfigurationService;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService; import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
@ -153,21 +152,13 @@ public class DiscordEventHandler extends ListenerAdapter {
private void onGuildMessageReceivedHelper(GuildMessageReceivedEvent event) throws Exception { private void onGuildMessageReceivedHelper(GuildMessageReceivedEvent event) throws Exception {
if (!GuildMusicService.getMap().containsKey(event.getGuild().getIdLong())) {
GuildMusicService.getMap().put(event.getGuild().getIdLong(),
new GuildMusicHandler(event.getGuild().getIdLong(), guildSongRepoService));
}
GuildMusicHandler gmh = GuildMusicService.getMap().get(event.getGuild().getIdLong());
gmh.accept((id) -> GuildMusicService.getMap().remove(id));
List<String> commands = new ArrayList<String>(Arrays.asList(event.getMessage().getContentRaw().trim().toLowerCase().split(" "))); List<String> commands = new ArrayList<String>(Arrays.asList(event.getMessage().getContentRaw().trim().toLowerCase().split(" ")));
String command = commands.remove(0); String command = commands.remove(0);
AbstractMainEventHandler aeh = events.get(command.toLowerCase()); AbstractMainEventHandler aeh = events.get(command.toLowerCase());
if (aeh != null) { if (aeh != null) {
aeh.executeEvent(gmh, event, commands); aeh.executeEvent(event, commands);
return; return;
} }

View File

@ -27,7 +27,6 @@
*/ */
package net.locusworks.discord.eighttrack.handlers; package net.locusworks.discord.eighttrack.handlers;
import java.io.IOException;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
@ -68,7 +67,7 @@ public class GuildMusicHandler {
private TrackManager trackManager; private TrackManager trackManager;
public GuildMusicHandler(long guildId, RepositoryService guildSongRepoService) throws IOException { public GuildMusicHandler(long guildId, RepositoryService guildSongRepoService) {
this.logger = ApplicationLoggerFactory.getLogger(GuildMusicHandler.class); this.logger = ApplicationLoggerFactory.getLogger(GuildMusicHandler.class);
this.playing = new AtomicBoolean(false); this.playing = new AtomicBoolean(false);
this.lastPlayed = OffsetDateTime.now(); this.lastPlayed = OffsetDateTime.now();

View File

@ -2,7 +2,7 @@
* *
* Project: Eight Track, File: DatabaseCleanupService.java * Project: Eight Track, File: DatabaseCleanupService.java
* *
* Copyright 2019-2019 Locusworks LLC. * Copyright 2019-2020 Locusworks LLC.
* All rights reserved. Federal copyright law prohibits unauthorized reproduction by * 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 * 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, * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied,
@ -27,11 +27,7 @@
*/ */
package net.locusworks.discord.eighttrack.services; package net.locusworks.discord.eighttrack.services;
import java.time.Duration;
import java.time.OffsetDateTime;
import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.Map.Entry;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -41,10 +37,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.VoiceChannel;
import net.locusworks.discord.eighttrack.database.repos.GuildRepository; import net.locusworks.discord.eighttrack.database.repos.GuildRepository;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
@Service @Service
public class DatabaseCleanupService { public class DatabaseCleanupService {
@ -59,58 +52,10 @@ public class DatabaseCleanupService {
@Autowired @Autowired
private GuildRepository guildRepo; private GuildRepository guildRepo;
private JDA client;
public void setClient(JDA client) {
this.client = client;
}
/**
* Close out connections that are no long being played. clean up resources
*/
@Scheduled(fixedRate = 5 * MINUTE)
private void checkPlayers() {
if (client == null) {
logger.warn("Discord client is null. Unable to do cleanup");
return;
}
logger.debug("Checking players to see if anyone is listening");
OffsetDateTime now = OffsetDateTime.now();
for(Iterator<Entry<Long, GuildMusicHandler>> iterator = GuildMusicService.getMap().entrySet().iterator(); iterator.hasNext();) {
Entry<Long, GuildMusicHandler> entry = iterator.next();
GuildMusicHandler gmh = entry.getValue();
long guildId = entry.getKey();
Guild guild = client.getGuildById(guildId);
if (guild == null) {
iterator.remove();
continue;
}
OffsetDateTime lastPlayed = gmh.getLastPlayed();
Duration duration = Duration.between(lastPlayed, now);
if (duration.toMillis() > 5 * MINUTE) {
guild.getAudioManager().closeAudioConnection();
iterator.remove();
}
Long voiceChannelId = gmh.getCurrentVoiceChannelId();
if (voiceChannelId == null) {
guild.getAudioManager().closeAudioConnection();
iterator.remove();
} else {
VoiceChannel vc = guild.getVoiceChannelById(voiceChannelId);
if (vc != null && vc.getMembers().size() == 1) {
guild.getAudioManager().closeAudioConnection();
iterator.remove();
}
}
}
}
@Scheduled(fixedRate = DAY) @Scheduled(fixedRate = DAY)
private void cleanDatabase() { private void cleanDatabase() {
JDA client = EightTrackService.getClient();
if (client == null) { if (client == null) {
logger.warn("Discord client is null. Unable to do cleanup"); logger.warn("Discord client is null. Unable to do cleanup");
return; return;

View File

@ -2,7 +2,7 @@
* *
* Project: Eight Track, File: EightTrackService.java * Project: Eight Track, File: EightTrackService.java
* *
* Copyright 2019-2019 Locusworks LLC. * Copyright 2019-2020 Locusworks LLC.
* All rights reserved. Federal copyright law prohibits unauthorized reproduction by * 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 * 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, * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied,
@ -44,7 +44,7 @@ public class EightTrackService {
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackService.class); private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackService.class);
private JDA client; private static JDA client;
@Autowired @Autowired
private ConfigurationService confService; private ConfigurationService confService;
@ -52,17 +52,16 @@ public class EightTrackService {
@Autowired @Autowired
private DiscordEventHandler eventListener; private DiscordEventHandler eventListener;
@Autowired
private DatabaseCleanupService dcs;
public void begin() throws LoginException { public void begin() throws LoginException {
String token = confService.getDiscordToken(); String token = confService.getDiscordToken();
logger.debug("Logging in with token %s", token); logger.debug("Logging in with token %s", token);
client = new JDABuilder(AccountType.BOT).setToken(token).build(); client = new JDABuilder(AccountType.BOT).setToken(token).build();
client.addEventListener(eventListener); client.addEventListener(eventListener);
}
dcs.setClient(client); public static JDA getClient() {
return client;
} }

View File

@ -2,7 +2,7 @@
* *
* Project: Eight Track, File: GuildMusicService.java * Project: Eight Track, File: GuildMusicService.java
* *
* Copyright 2019-2019 Locusworks LLC. * Copyright 2019-2020 Locusworks LLC.
* All rights reserved. Federal copyright law prohibits unauthorized reproduction by * 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 * 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, * may be reproduced, transmitted, transcribed, stored in a retrieval system, copied,
@ -27,17 +27,96 @@
*/ */
package net.locusworks.discord.eighttrack.services; package net.locusworks.discord.eighttrack.services;
import java.time.Duration;
import java.time.OffsetDateTime;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.VoiceChannel;
import net.locusworks.discord.eighttrack.database.entities.DiscordGuild;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler; import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Service
public class GuildMusicService { public class GuildMusicService {
private ApplicationLogger logger;
@Autowired
private RepositoryService guildRepoService;
private static Map<Long, GuildMusicHandler> handlerMap = new ConcurrentHashMap<>(); private static Map<Long, GuildMusicHandler> handlerMap = new ConcurrentHashMap<>();
public static Map<Long, GuildMusicHandler> getMap() { @PostConstruct
return handlerMap; private void init() {
logger = ApplicationLoggerFactory.getLogger(GuildMusicService.class);
for (DiscordGuild dg : guildRepoService.getGuildRepo().findAll()) {
GuildMusicHandler gmh = new GuildMusicHandler(dg.getGuildId(), guildRepoService);
gmh.accept((id) -> handlerMap.remove(id));
handlerMap.put(dg.getGuildId(), gmh);
}
} }
/**
* Close out connections that are no long being played. clean up resources
*/
@Scheduled(fixedRate = 5 * 60 * 1000)
private void checkPlayers() {
JDA client = EightTrackService.getClient();
if (client == null) {
logger.warn("Discord client is null. Unable to do cleanup");
return;
}
logger.debug("Checking players to see if anyone is listening");
OffsetDateTime now = OffsetDateTime.now();
for(Iterator<Entry<Long, GuildMusicHandler>> iterator = handlerMap.entrySet().iterator(); iterator.hasNext();) {
Entry<Long, GuildMusicHandler> entry = iterator.next();
GuildMusicHandler gmh = entry.getValue();
long guildId = entry.getKey();
Guild guild = client.getGuildById(guildId);
if (guild == null) {
iterator.remove();
continue;
}
OffsetDateTime lastPlayed = gmh.getLastPlayed();
Duration duration = Duration.between(lastPlayed, now);
if (duration.toMillis() > 5 * 60 * 1000) {
guild.getAudioManager().closeAudioConnection();
iterator.remove();
}
Long voiceChannelId = gmh.getCurrentVoiceChannelId();
if (voiceChannelId == null) {
guild.getAudioManager().closeAudioConnection();
iterator.remove();
} else {
VoiceChannel vc = guild.getVoiceChannelById(voiceChannelId);
if (vc != null && vc.getMembers().size() == 1) {
guild.getAudioManager().closeAudioConnection();
iterator.remove();
}
}
}
}
public GuildMusicHandler getMusicHandler(Long guildId) {
if (!handlerMap.containsKey(guildId)) {
GuildMusicHandler gmh = new GuildMusicHandler(guildId, guildRepoService);
gmh.accept((id) -> handlerMap.remove(id));
handlerMap.put(guildId, gmh);
}
return handlerMap.get(guildId);
}
} }

View File

@ -27,8 +27,8 @@
*/ */
package net.locusworks.discord.eighttrack.services; package net.locusworks.discord.eighttrack.services;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date; import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -75,23 +75,24 @@ public class RepositoryService {
if (dg == null) return; if (dg == null) return;
String msg = String.format(msgFmt, args); String msg = String.format(msgFmt, args);
if (ex != null) {
msg += "\n" + printTrace(ex);
}
Log log = new Log(); Log log = new Log();
log.setDateAdded(new Date()); log.setDateAdded(new Date());
log.setGuild(dg); log.setGuild(dg);
log.setIsException(ex != null); log.setIsException(ex != null);
log.setLog(msg); log.setLog(msg);
if (ex != null) {
log.setException(printTrace(ex));
}
guildLogRepo.save(log); guildLogRepo.save(log);
} }
private String printTrace(Throwable ex) { private byte[] printTrace(Throwable ex) {
StringWriter sw = new StringWriter(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
ex.printStackTrace(new PrintWriter(sw)); ex.printStackTrace(new PrintWriter(baos));
return sw.toString(); return baos.toByteArray();
} }

View File

@ -0,0 +1 @@
ALTER TABLE eighttrack.log ADD exception longblob;