Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 1 addition & 57 deletions src/main/java/net/hypixel/nerdbot/tickets/TicketBot.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
import net.dv8tion.jda.api.entities.Activity;
import net.hypixel.nerdbot.discord.AbstractDiscordBot;
import net.hypixel.nerdbot.discord.api.feature.BotFeature;
import net.hypixel.nerdbot.discord.api.feature.SchedulableFeature;
import net.hypixel.nerdbot.discord.config.DiscordBotConfig;
import net.hypixel.nerdbot.discord.config.FeatureConfig;
import net.hypixel.nerdbot.discord.config.NerdBotConfig;
import net.hypixel.nerdbot.marmalade.exception.RepositoryException;
import net.hypixel.nerdbot.marmalade.storage.database.Database;
import org.slf4j.Logger;
Expand All @@ -22,7 +19,6 @@

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
Expand Down Expand Up @@ -82,56 +78,7 @@ public static TicketBotConfig config() {

@Override
protected @NotNull Collection<? extends BotFeature> createFeatures() {
TicketBotConfig config = getConfig();
List<BotFeature> features = new ArrayList<>();

if (config.getFeatures() != null) {
log.info("Loading features from config ({} entries)", config.getFeatures().size());

config.getFeatures().stream()
.filter(FeatureConfig::isEnabled)
.forEach(featureConfig -> {
try {
if (!isAllowed(featureConfig.getClassName())) {
log.warn("Feature class {} not permitted by class allowlist", featureConfig.getClassName());
return;
}

Class<?> clazz = Class.forName(featureConfig.getClassName());
if (!BotFeature.class.isAssignableFrom(clazz)) {
log.warn("Feature class {} does not implement BotFeature", featureConfig.getClassName());
return;
}

BotFeature feature = (BotFeature) clazz.getDeclaredConstructor().newInstance();
feature.setScheduleOverrides(featureConfig.getInitialDelayMs(), featureConfig.getPeriodMs());
features.add(feature);
log.info("Added feature from config: {}", featureConfig.getClassName());

if (feature instanceof SchedulableFeature schedulable) {
// SchedulableFeature expects NerdBotConfig, so we pass null-safe defaults
long defaultInitial = 60_000; // 1 minute default
long defaultPeriod = 300_000; // 5 minutes default

try {
// Try to use the interface methods with a NerdBotConfig-compatible config
defaultInitial = schedulable.defaultInitialDelayMs(null);
defaultPeriod = schedulable.defaultPeriodMs(null);
} catch (Exception e) {
log.debug("Using default scheduling for {}", featureConfig.getClassName());
}

feature.scheduleAtFixedRate(schedulable.buildTask(), defaultInitial, defaultPeriod);
}
} catch (Exception e) {
log.warn("Failed to instantiate feature {}", featureConfig.getClassName(), e);
}
});
} else {
log.info("No feature config present");
}

return features;
return createConfiguredFeatures();
}

@Override
Expand Down Expand Up @@ -171,7 +118,4 @@ protected void onShutdown() {
TicketMetrics.stopMetricsServer();
}

private static boolean isAllowed(String className) {
return className != null && className.startsWith("net.hypixel.nerdbot.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
import lombok.Setter;
import lombok.ToString;
import net.hypixel.nerdbot.discord.config.DiscordBotConfig;
import net.hypixel.nerdbot.discord.config.FeatureConfig;
import net.hypixel.nerdbot.tickets.config.TicketConfig;

import java.util.List;

/**
* Configuration specific to the standalone Ticket Bot.
Expand All @@ -23,9 +21,4 @@ public class TicketBotConfig extends DiscordBotConfig {
*/
private TicketConfig ticketConfig = new TicketConfig();

/**
* Feature configuration. If present and not empty,
* the bot will instantiate and start the listed features in order.
*/
private List<FeatureConfig> features;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.hypixel.nerdbot.tickets.service.TicketService;
import net.hypixel.nerdbot.discord.api.feature.BotFeature;
import net.hypixel.nerdbot.discord.api.feature.SchedulableFeature;
import net.hypixel.nerdbot.discord.config.NerdBotConfig;
import net.hypixel.nerdbot.discord.config.DiscordBotConfig;

import java.util.concurrent.TimeUnit;

Expand All @@ -16,12 +16,12 @@
public class TicketAutoCloseFeature extends BotFeature implements SchedulableFeature {

@Override
public long defaultInitialDelayMs(NerdBotConfig config) {
public long defaultInitialDelayMs(DiscordBotConfig config) {
return TimeUnit.MINUTES.toMillis(1);
}

@Override
public long defaultPeriodMs(NerdBotConfig config) {
public long defaultPeriodMs(DiscordBotConfig config) {
return TimeUnit.HOURS.toMillis(1);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.hypixel.nerdbot.tickets.service.TicketService;
import net.hypixel.nerdbot.discord.api.feature.BotFeature;
import net.hypixel.nerdbot.discord.api.feature.SchedulableFeature;
import net.hypixel.nerdbot.discord.config.NerdBotConfig;
import net.hypixel.nerdbot.discord.config.DiscordBotConfig;

import java.util.concurrent.TimeUnit;

Expand All @@ -17,12 +17,12 @@
public class TicketCleanupFeature extends BotFeature implements SchedulableFeature {

@Override
public long defaultInitialDelayMs(NerdBotConfig config) {
public long defaultInitialDelayMs(DiscordBotConfig config) {
return TimeUnit.MINUTES.toMillis(5);
}

@Override
public long defaultPeriodMs(NerdBotConfig config) {
public long defaultPeriodMs(DiscordBotConfig config) {
return TimeUnit.DAYS.toMillis(1);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import net.hypixel.nerdbot.tickets.service.TicketService;
import net.hypixel.nerdbot.discord.api.feature.BotFeature;
import net.hypixel.nerdbot.discord.api.feature.SchedulableFeature;
import net.hypixel.nerdbot.discord.config.NerdBotConfig;
import net.hypixel.nerdbot.discord.config.DiscordBotConfig;
import net.hypixel.nerdbot.tickets.config.TicketConfig;
import net.hypixel.nerdbot.discord.util.DiscordBotEnvironment;

Expand All @@ -20,12 +20,12 @@
public class TicketReminderFeature extends BotFeature implements SchedulableFeature {

@Override
public long defaultInitialDelayMs(NerdBotConfig config) {
public long defaultInitialDelayMs(DiscordBotConfig config) {
return TimeUnit.MINUTES.toMillis(2);
}

@Override
public long defaultPeriodMs(NerdBotConfig config) {
public long defaultPeriodMs(DiscordBotConfig config) {
TicketConfig ticketConfig = TicketBot.config().getTicketConfig();
int intervalMinutes = ticketConfig.getReminderCheckIntervalMinutes();

Expand Down
Loading