Updated files to work properly with applogger. Reworking how commands are called?
All checks were successful
Locusworks Team/eight-track/pipeline/head This commit looks good
All checks were successful
Locusworks Team/eight-track/pipeline/head This commit looks good
This commit is contained in:
22
pom.xml
22
pom.xml
@ -18,17 +18,17 @@
|
||||
</scm>
|
||||
|
||||
<properties>
|
||||
<flyway.version>6.4.2</flyway.version>
|
||||
<flyway.version>6.4.3</flyway.version>
|
||||
<mysql.version>8.0.20</mysql.version>
|
||||
<hibernate.version>5.4.16.Final</hibernate.version>
|
||||
<hibernate.version>5.4.17.Final</hibernate.version>
|
||||
<spring.version>5.2.6.RELEASE</spring.version>
|
||||
<spring.boot.version>2.3.0.RELEASE</spring.boot.version>
|
||||
<spring.data.version>2.3.0.RELEASE</spring.data.version>
|
||||
<jackson.version>2.10.1</jackson.version>
|
||||
<log4j.version>2.12.1</log4j.version>
|
||||
<slf4j.version>1.7.28</slf4j.version>
|
||||
<maven.enforcer.version>3.0.0-M2</maven.enforcer.version>
|
||||
<dep.check.version>5.2.2</dep.check.version>
|
||||
<jackson.version>2.11.0</jackson.version>
|
||||
<log4j.version>2.13.3</log4j.version>
|
||||
<slf4j.version>1.7.30</slf4j.version>
|
||||
<maven.enforcer.version>3.0.0-M3</maven.enforcer.version>
|
||||
<dep.check.version>5.3.2</dep.check.version>
|
||||
<license-maven-plugin.version>3.0</license-maven-plugin.version>
|
||||
<nexus.repo>https://nexus.locusworks.net</nexus.repo>
|
||||
</properties>
|
||||
@ -154,7 +154,7 @@
|
||||
<dependency>
|
||||
<groupId>net.dv8tion</groupId>
|
||||
<artifactId>JDA</artifactId>
|
||||
<version>4.1.0_88</version>
|
||||
<version>4.1.1_155</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
@ -174,7 +174,7 @@
|
||||
<dependency>
|
||||
<groupId>com.sedmelluq</groupId>
|
||||
<artifactId>lavaplayer</artifactId>
|
||||
<version>1.3.32</version>
|
||||
<version>1.3.49</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
|
||||
@ -302,13 +302,13 @@
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.bind</groupId>
|
||||
<artifactId>jaxb-core</artifactId>
|
||||
<version>2.3.0.1</version>
|
||||
<version>3.0.0-M3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.bind</groupId>
|
||||
<artifactId>jaxb-impl</artifactId>
|
||||
<version>2.4.0-b180830.0438</version>
|
||||
<version>3.0.0-M3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
@ -0,0 +1,12 @@
|
||||
package net.locusworks.discord.eighttrack.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface DiscordEventListener {
|
||||
|
||||
}
|
@ -34,6 +34,9 @@ import javax.sql.DataSource;
|
||||
|
||||
import org.flywaydb.core.Flyway;
|
||||
import org.flywaydb.core.api.configuration.FluentConfiguration;
|
||||
import org.flywaydb.core.api.logging.Log;
|
||||
import org.flywaydb.core.api.logging.LogCreator;
|
||||
import org.flywaydb.core.api.logging.LogFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@ -48,6 +51,8 @@ import org.springframework.orm.jpa.vendor.Database;
|
||||
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
import net.locusworks.logger.ApplicationLogger;
|
||||
import net.locusworks.logger.ApplicationLoggerFactory;
|
||||
|
||||
@Configuration(value="net.locusworks.discord.eighttrack.database.config.EightTrackBeanConfiguration")
|
||||
@EnableTransactionManagement
|
||||
@ -140,6 +145,7 @@ public class EightTrackBeanConfiguration {
|
||||
|
||||
@Bean(name="flyway", initMethod="migrate")
|
||||
public Flyway flyway() {
|
||||
LogFactory.setLogCreator(new FlywayLogCreator());
|
||||
FluentConfiguration fc = Flyway.configure();
|
||||
fc.schemas("eighttrack");
|
||||
fc.table("_flyway_migration");
|
||||
@ -149,5 +155,53 @@ public class EightTrackBeanConfiguration {
|
||||
|
||||
return fc.load();
|
||||
}
|
||||
|
||||
private class FlywayLogCreator implements LogCreator {
|
||||
|
||||
@Override
|
||||
public Log createLogger(Class<?> clazz) {
|
||||
return new FlywayLog(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
private class FlywayLog implements Log {
|
||||
|
||||
private ApplicationLogger logger;
|
||||
|
||||
public FlywayLog(Class<?> clazz) {
|
||||
logger = ApplicationLoggerFactory.getLogger(clazz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebugEnabled() {
|
||||
return logger.isDebugEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String message) {
|
||||
logger.debug(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String message) {
|
||||
logger.warn(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message) {
|
||||
logger.error(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message, Exception e) {
|
||||
logger.error(message, e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -36,14 +36,14 @@ import java.util.stream.Collectors;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.stereotype.Component;
|
||||
import net.locusworks.discord.eighttrack.services.ConfigurationService;
|
||||
import net.locusworks.logger.ApplicationLogger;
|
||||
import net.locusworks.logger.ApplicationLoggerFactory;
|
||||
|
||||
@Primary
|
||||
@Component
|
||||
@ -62,7 +62,7 @@ public class EightTrackDataSource {
|
||||
mysqlProperties.put("serverTimezone", TimeZone.getDefault().getDisplayName(false, TimeZone.SHORT));
|
||||
}
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(EightTrackDataSource.class);
|
||||
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackDataSource.class);
|
||||
|
||||
@Autowired
|
||||
private ConfigurationService confService;
|
||||
@ -103,7 +103,7 @@ public class EightTrackDataSource {
|
||||
|
||||
url = String.format("%s?%s", url, StringUtils.join(params, "&"));
|
||||
|
||||
logger.debug("Database connection string: %s", url);
|
||||
logger.debug(String.format("Database connection string: %s", url));
|
||||
|
||||
return DataSourceBuilder
|
||||
.create()
|
||||
|
@ -106,33 +106,6 @@ public class DiscordEventHandler extends ListenerAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuildJoin(GuildJoinEvent event) {
|
||||
try {
|
||||
long guildId = event.getGuild().getIdLong();
|
||||
DiscordGuild discordGuild = guildSongRepoService.getGuildRepo().findByGuildId(guildId);
|
||||
if (discordGuild != null) {
|
||||
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
|
||||
return;
|
||||
}
|
||||
|
||||
logger.debug("Joining Server: " + event.getGuild().getName());
|
||||
|
||||
discordGuild = new DiscordGuild();
|
||||
discordGuild.setGuildId(guildId);
|
||||
discordGuild.setGuildName(event.getGuild().getName());
|
||||
discordGuild.setDateJoined(new Date());
|
||||
|
||||
guildSongRepoService.getGuildRepo().save(discordGuild);
|
||||
|
||||
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
|
||||
|
||||
} catch (Exception ex) {
|
||||
logger.error("Unable to persist server information to database: " + ex.getMessage(), ex);
|
||||
guildSongRepoService.logEntry(event.getGuild().getIdLong(), ex, "Unable to persist guild server info to database: %s", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
|
||||
if (event.getAuthor().isBot()) return;
|
||||
|
@ -0,0 +1,50 @@
|
||||
package net.locusworks.discord.eighttrack.listeners;
|
||||
|
||||
import java.util.Date;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import net.locusworks.discord.eighttrack.annotations.DiscordEventListener;
|
||||
import net.locusworks.discord.eighttrack.database.entities.DiscordGuild;
|
||||
import net.locusworks.discord.eighttrack.services.RepositoryService;
|
||||
import net.locusworks.logger.ApplicationLogger;
|
||||
import net.locusworks.logger.ApplicationLoggerFactory;
|
||||
|
||||
@Service
|
||||
@DiscordEventListener
|
||||
public class DiscordGuildJoinEventListener extends ListenerAdapter {
|
||||
|
||||
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(DiscordGuildJoinEventListener.class);
|
||||
|
||||
@Autowired
|
||||
private RepositoryService guildSongRepoService;
|
||||
|
||||
@Override
|
||||
public void onGuildJoin(GuildJoinEvent event) {
|
||||
try {
|
||||
long guildId = event.getGuild().getIdLong();
|
||||
DiscordGuild discordGuild = guildSongRepoService.getGuildRepo().findByGuildId(guildId);
|
||||
if (discordGuild != null) {
|
||||
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
|
||||
return;
|
||||
}
|
||||
|
||||
logger.debug("Joining Server: " + event.getGuild().getName());
|
||||
|
||||
discordGuild = new DiscordGuild();
|
||||
discordGuild.setGuildId(guildId);
|
||||
discordGuild.setGuildName(event.getGuild().getName());
|
||||
discordGuild.setDateJoined(new Date());
|
||||
|
||||
guildSongRepoService.getGuildRepo().save(discordGuild);
|
||||
|
||||
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
|
||||
|
||||
} catch (Exception ex) {
|
||||
logger.error("Unable to persist server information to database: " + ex.getMessage(), ex);
|
||||
guildSongRepoService.logEntry(event.getGuild().getIdLong(), ex, "Unable to persist guild server info to database: %s", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -30,14 +30,14 @@ package net.locusworks.discord.eighttrack.services;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
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.locusworks.discord.eighttrack.database.repos.GuildRepository;
|
||||
import net.locusworks.logger.ApplicationLogger;
|
||||
import net.locusworks.logger.ApplicationLoggerFactory;
|
||||
|
||||
@Service
|
||||
public class DatabaseCleanupService {
|
||||
@ -47,7 +47,7 @@ public class DatabaseCleanupService {
|
||||
private static final long HOUR = 60 * MINUTE;
|
||||
private static final long DAY = 24 * HOUR;
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(DatabaseCleanupService.class);
|
||||
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(DatabaseCleanupService.class);
|
||||
|
||||
@Autowired
|
||||
private GuildRepository guildRepo;
|
||||
|
@ -27,42 +27,62 @@
|
||||
*/
|
||||
package net.locusworks.discord.eighttrack.services;
|
||||
|
||||
import java.util.List;
|
||||
import javax.security.auth.login.LoginException;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.type.filter.AnnotationTypeFilter;
|
||||
import org.springframework.core.type.filter.TypeFilter;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import net.dv8tion.jda.api.AccountType;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.JDABuilder;
|
||||
import net.locusworks.discord.eighttrack.handlers.DiscordEventHandler;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import net.locusworks.discord.eighttrack.annotations.DiscordEventListener;
|
||||
import net.locusworks.discord.eighttrack.utils.BeanFinder;
|
||||
import net.locusworks.logger.ApplicationLogger;
|
||||
import net.locusworks.logger.ApplicationLoggerFactory;
|
||||
|
||||
@Service
|
||||
public class EightTrackService {
|
||||
|
||||
|
||||
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackService.class);
|
||||
|
||||
|
||||
private static JDA client;
|
||||
|
||||
|
||||
@Autowired
|
||||
private ConfigurationService confService;
|
||||
|
||||
@Autowired
|
||||
private DiscordEventHandler eventListener;
|
||||
|
||||
|
||||
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);
|
||||
try {
|
||||
|
||||
final TypeFilter serviceFilter = new AnnotationTypeFilter(Service.class);
|
||||
final TypeFilter eventListenerFilter = new AnnotationTypeFilter(DiscordEventListener.class);
|
||||
|
||||
List<ListenerAdapter> eventListeners = BeanFinder.autowireBeans(ListenerAdapter.class, "net.locusworks.discord.eighttrack", serviceFilter, eventListenerFilter);
|
||||
if (eventListeners == null ||eventListeners.size() < 1) {
|
||||
throw new LoginException("No event listeners found. Exiting");
|
||||
}
|
||||
|
||||
String token = confService.getDiscordToken();
|
||||
JDABuilder builder = JDABuilder.createDefault(token);
|
||||
logger.debug("Logging in with token %s", token);
|
||||
|
||||
logger.info(String.format("Loading %d listeners", eventListeners.size()));
|
||||
for (ListenerAdapter la : eventListeners) {
|
||||
logger.debug("Loading eventListener: %s", la.getClass().getName());
|
||||
builder.addEventListeners(la);
|
||||
}
|
||||
|
||||
client = builder.build();
|
||||
|
||||
} catch (BeansException e) {
|
||||
throw new LoginException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static JDA getClient() {
|
||||
return client;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
package net.locusworks.discord.eighttrack.utils;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ApplicationContextHolder implements ApplicationContextAware {
|
||||
|
||||
private static ApplicationContext context;
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
|
||||
if (context == null) {
|
||||
context = ctx;
|
||||
}
|
||||
}
|
||||
|
||||
public static ApplicationContext getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package net.locusworks.discord.eighttrack.utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanInitializationException;
|
||||
import org.springframework.beans.factory.annotation.Autowire;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
|
||||
import org.springframework.core.type.classreading.MetadataReader;
|
||||
import org.springframework.core.type.classreading.MetadataReaderFactory;
|
||||
import org.springframework.core.type.filter.TypeFilter;
|
||||
|
||||
public class BeanFinder {
|
||||
|
||||
|
||||
public static List<BeanDefinition> getBeans(String basePackage, TypeFilter... filters) {
|
||||
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
|
||||
scanner.addIncludeFilter(new TypeFilter() {
|
||||
|
||||
@Override
|
||||
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
|
||||
boolean found = true;
|
||||
|
||||
for (TypeFilter filter : filters) {
|
||||
found &= filter.match(metadataReader, metadataReaderFactory);
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
});
|
||||
|
||||
return scanner.findCandidateComponents(basePackage).stream().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> List<T> autowireBeans(Class<T> clazz, String basePackage, TypeFilter... filters) throws BeansException {
|
||||
try {
|
||||
List<T> list = new ArrayList<>();
|
||||
for (BeanDefinition bd : getBeans(basePackage, filters)) {
|
||||
Object obj = ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().createBean(Class.forName(bd.getBeanClassName()), Autowire.BY_TYPE.value(), true);
|
||||
if (clazz.isInstance(obj)) {
|
||||
list.add((T) obj);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
} catch (Exception ex) {
|
||||
throw new BeanInitializationException(ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -6,5 +6,5 @@ dbHost=localhost
|
||||
dbPort=3306
|
||||
logLevel=INFO
|
||||
musicDir=E:/Music
|
||||
discordToken=NjI5MTQ0OTk1ODA2MzE0NTA5.XZVlRQ.7hiB0u4Zp5pxPrPfvdOdyr4TCh4
|
||||
discordToken=NjMzMDA2ODIzNzk1OTgyMzQ0.XtLtpA.sramb2b8w4itTFPQ92HqZgyeBJU
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
<Configuration status="WARN" shutdownHook="disable"
|
||||
packages="net.locusworks.discord.eighttrack">
|
||||
<Properties>
|
||||
<Property name="logFormat">%d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5p] [%c{1}] %m%n</Property>
|
||||
<Property name="logFormat">%d{dd-MMM-yyyy HH:mm:ss.SSS} %m%n</Property>
|
||||
</Properties>
|
||||
<Appenders>
|
||||
<Console name="ConsoleAppender" target="SYSTEM_OUT">
|
||||
@ -20,9 +20,10 @@
|
||||
</RollingFile>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<Root level="TRACE">
|
||||
<AppenderRef ref="ConsoleAppender" level="INFO" />
|
||||
<AppenderRef ref="eighttrack" level="INFO" />
|
||||
</Root>
|
||||
<Root level="ALL"/>
|
||||
<Logger name="net.locusworks.logger" level="ALL">
|
||||
<AppenderRef ref="eighttrack"/>
|
||||
<AppenderRef ref="ConsoleAppender"/>
|
||||
</Logger>
|
||||
</Loggers>
|
||||
</Configuration>
|
||||
|
Reference in New Issue
Block a user