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")
@Temporal(TemporalType.TIMESTAMP)
private Date dateAdded;
@Lob
@Column(name = "exception")
private byte[] exception;
@JoinColumn(name = "guild", referencedColumnName = "id")
@ManyToOne(optional = false)
private DiscordGuild guild;
@ -126,6 +129,14 @@ public class Log implements Serializable {
this.dateAdded = dateAdded;
}
public byte[] getException() {
return exception;
}
public void setException(byte[] exception) {
this.exception = exception;
}
public DiscordGuild getGuild() {
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.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.handlers.ReactionHandler;
public abstract class AbstractEvent {
@ -48,7 +47,7 @@ public abstract class AbstractEvent {
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();

View File

@ -40,7 +40,6 @@ import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.locusworks.discord.eighttrack.database.entities.GuildPlaylist;
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.listeners.ReactionListener;
import net.locusworks.discord.eighttrack.services.RepositoryService;
@ -65,7 +64,7 @@ public class AdminPlaylistDeleteHandler extends AbstractAdminEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) 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
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.locusworks.discord.eighttrack.database.entities.GuildPlaylist;
import net.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.RepositoryService;
@Component
@ -50,7 +49,7 @@ public class AdminPlaylistListHandler extends AbstractAdminEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return;
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.locusworks.discord.eighttrack.events.admin.AbstractAdminEventHandler;
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.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -65,11 +64,11 @@ public class AdminPlaylistHandler extends AbstractMainEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return;
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;
}
try {
@ -81,7 +80,7 @@ public class AdminPlaylistHandler extends AbstractMainEventHandler {
return;
}
apeh.executeEvent(musicHandler, event, commands);
apeh.executeEvent(event, commands);
} catch (Exception 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.locusworks.discord.eighttrack.database.entities.GuildSong;
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.listeners.ReactionListener;
import net.locusworks.discord.eighttrack.services.RepositoryService;
@ -65,7 +64,7 @@ public class DeleteSongHandler extends AbstractMainEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if(!isAdmin(event)) return;
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.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class NextSongHandler extends AbstractMainEventHandler {
@Autowired
private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public NextSongHandler() {
super("-next");
logger = ApplicationLoggerFactory.getLogger(NextSongHandler.class);
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.next(event, commands);
} catch (Exception 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.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class PlaySongHandler extends AbstractMainEventHandler {
@Autowired
private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public PlaySongHandler() {
super("-play");
logger = ApplicationLoggerFactory.getLogger(PlaySongHandler.class);
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.play(event, commands);
musicHandler.isPlaying(true);
} 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.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
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.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -65,7 +64,7 @@ public class PlaylistHandler extends AbstractMainEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (commands == null || commands.isEmpty()) {
event.getChannel().sendMessage("Missing command for -playlist. Valid commands are: add, delete, list, play").queue();
return;
@ -79,7 +78,7 @@ public class PlaylistHandler extends AbstractMainEventHandler {
return;
}
apeh.executeEvent(musicHandler, event, commands);
apeh.executeEvent(event, commands);
} catch (Exception 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.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class RepeatSongHandler extends AbstractMainEventHandler {
@Autowired
private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public RepeatSongHandler() {
super("-repeat");
logger = ApplicationLoggerFactory.getLogger(RepeatSongHandler.class);
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.repeat(event);
musicHandler.isPlaying(true);
} 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.locusworks.discord.eighttrack.database.entities.GuildSong;
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.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -53,7 +52,7 @@ public class SongListHandler extends AbstractMainEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try {
listSongs(event, commands);
} 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.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class StopSongHandler extends AbstractMainEventHandler {
@Autowired
private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public StopSongHandler() {
super("-stop");
logger = ApplicationLoggerFactory.getLogger(StopSongHandler.class);
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.isPlaying(false);
musicHandler.stop(event);
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.locusworks.discord.eighttrack.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -45,14 +46,18 @@ public class UpNextSongHandler extends AbstractMainEventHandler {
@Autowired
private RepositoryService guildRepoService;
@Autowired
private GuildMusicService musicService;
public UpNextSongHandler() {
super("-upnext");
logger = ApplicationLoggerFactory.getLogger(UpNextSongHandler.class);
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
try {
GuildMusicHandler musicHandler = musicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.repeat(event);
musicHandler.isPlaying(true);
} 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.Song;
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.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
@ -75,7 +74,7 @@ public class UploadHandler extends AbstractMainEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (!isAdmin(event)) return;
for(Attachment attachment : event.getMessage().getAttachments()) {

View File

@ -58,7 +58,7 @@ public class PlaylistAddHandler extends AbstractPlaylistEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> 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;

View File

@ -66,7 +66,7 @@ public class PlaylistDeleteHandler extends AbstractPlaylistEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> 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;

View File

@ -50,7 +50,7 @@ public class PlaylistListHandler extends AbstractPlaylistEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (commands == null || commands.isEmpty()) {
List<GuildPlaylist> userPlaylist = guildRepoService.getGuildPlaylistRepo().findByGuildAndUserIdFetchSongs(event.getGuild().getIdLong(), event.getMember().getIdLong());
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.events.playlist.AbstractPlaylistEventHandler;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -46,6 +47,9 @@ public class PlaylistPlayHandler extends AbstractPlaylistEventHandler {
@Autowired
private RepositoryService guildRepoService;
@Autowired
private GuildMusicService guildMusicService;
private ApplicationLogger logger;
public PlaylistPlayHandler() {
super("play");
@ -53,7 +57,7 @@ public class PlaylistPlayHandler extends AbstractPlaylistEventHandler {
}
@Override
public void executeEvent(GuildMusicHandler musicHandler, GuildMessageReceivedEvent event, List<String> commands) {
public void executeEvent(GuildMessageReceivedEvent event, List<String> commands) {
if (commands == null || commands.isEmpty()) {
event.getChannel().sendMessage(event.getAuthor().getAsMention() + " please provide the name of the playlist to play").queue();
return;
@ -68,6 +72,8 @@ public class PlaylistPlayHandler extends AbstractPlaylistEventHandler {
return;
}
GuildMusicHandler musicHandler = guildMusicService.getMusicHandler(event.getGuild().getIdLong());
musicHandler.setCurrentPlaylist(currentPlaylist);
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.events.main.AbstractMainEventHandler;
import net.locusworks.discord.eighttrack.services.ConfigurationService;
import net.locusworks.discord.eighttrack.services.GuildMusicService;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@ -153,21 +152,13 @@ public class DiscordEventHandler extends ListenerAdapter {
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(" ")));
String command = commands.remove(0);
AbstractMainEventHandler aeh = events.get(command.toLowerCase());
if (aeh != null) {
aeh.executeEvent(gmh, event, commands);
aeh.executeEvent(event, commands);
return;
}

View File

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

View File

@ -2,7 +2,7 @@
*
* 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
* 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,
@ -27,11 +27,7 @@
*/
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.Map.Entry;
import java.util.stream.Collectors;
import org.slf4j.Logger;
@ -41,10 +37,7 @@ 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.repos.GuildRepository;
import net.locusworks.discord.eighttrack.handlers.GuildMusicHandler;
@Service
public class DatabaseCleanupService {
@ -59,58 +52,10 @@ public class DatabaseCleanupService {
@Autowired
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)
private void cleanDatabase() {
JDA client = EightTrackService.getClient();
if (client == null) {
logger.warn("Discord client is null. Unable to do cleanup");
return;

View File

@ -2,7 +2,7 @@
*
* 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
* 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,
@ -44,7 +44,7 @@ public class EightTrackService {
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackService.class);
private JDA client;
private static JDA client;
@Autowired
private ConfigurationService confService;
@ -52,17 +52,16 @@ public class EightTrackService {
@Autowired
private DiscordEventHandler eventListener;
@Autowired
private DatabaseCleanupService dcs;
public void begin() throws LoginException {
String token = confService.getDiscordToken();
logger.debug("Logging in with token %s", token);
client = new JDABuilder(AccountType.BOT).setToken(token).build();
client.addEventListener(eventListener);
dcs.setClient(client);
}
public static JDA getClient() {
return client;
}

View File

@ -2,7 +2,7 @@
*
* 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
* 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,
@ -27,17 +27,96 @@
*/
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.Entry;
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.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Service
public class GuildMusicService {
private ApplicationLogger logger;
@Autowired
private RepositoryService guildRepoService;
private static Map<Long, GuildMusicHandler> handlerMap = new ConcurrentHashMap<>();
public static Map<Long, GuildMusicHandler> getMap() {
return handlerMap;
@PostConstruct
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;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -75,23 +75,24 @@ public class RepositoryService {
if (dg == null) return;
String msg = String.format(msgFmt, args);
if (ex != null) {
msg += "\n" + printTrace(ex);
}
Log log = new Log();
log.setDateAdded(new Date());
log.setGuild(dg);
log.setIsException(ex != null);
log.setLog(msg);
if (ex != null) {
log.setException(printTrace(ex));
}
guildLogRepo.save(log);
}
private String printTrace(Throwable ex) {
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
return sw.toString();
private byte[] printTrace(Throwable ex) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ex.printStackTrace(new PrintWriter(baos));
return baos.toByteArray();
}

View File

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