package com.alttd.schedulers; import com.alttd.database.queries.events.Event; import com.alttd.util.Logger; import net.dv8tion.jda.api.entities.Message; import java.time.Instant; import java.util.Optional; import java.util.TimerTask; import java.util.concurrent.TimeUnit; public class EventTimerTask extends TimerTask { @Override public void run() { checkShouldStartEvent(); } private void checkShouldStartEvent(){ Optional nextEvent = Event.getNextEvent(); if (nextEvent.isEmpty()) { return; } Event event = nextEvent.get(); if (event.getStartTime().isAfter(Instant.now())) { return; } Event.removeEvent(event); performEventAction(event); event.getRole().delete().queueAfter(1, TimeUnit.HOURS); checkShouldStartEvent(); } private void performEventAction(Event event) { Optional optionalMessage = event.getMessage(); if (optionalMessage.isEmpty()) { Logger.altitudeLogs.error("Unable to find message for event"); return; } Message message = optionalMessage.get(); message.reply(String.format("%s [%s] is starting!", event.getRole().getAsMention(), event.getTitle())).queue(); } }