Skip to content

Commit 1573e1a

Browse files
Added QOTW Reminder
1 parent 54b3278 commit 1573e1a

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package net.javadiscord.javabot.systems.qotw;
2+
3+
import net.dv8tion.jda.api.JDA;
4+
import net.dv8tion.jda.api.entities.Guild;
5+
import net.dv8tion.jda.api.entities.TextChannel;
6+
import net.javadiscord.javabot.Bot;
7+
import net.javadiscord.javabot.data.config.guild.QOTWConfig;
8+
import net.javadiscord.javabot.systems.qotw.submissions.SubmissionManager;
9+
import net.javadiscord.javabot.systems.qotw.submissions.model.QOTWSubmission;
10+
import net.javadiscord.javabot.systems.user_preferences.UserPreferenceManager;
11+
import net.javadiscord.javabot.systems.user_preferences.model.Preference;
12+
import net.javadiscord.javabot.systems.user_preferences.model.UserPreference;
13+
import net.javadiscord.javabot.tasks.jobs.DiscordApiJob;
14+
import org.jetbrains.annotations.NotNull;
15+
import org.quartz.JobExecutionContext;
16+
import org.quartz.JobExecutionException;
17+
18+
import java.util.List;
19+
20+
/**
21+
* Checks that there's a question in the QOTW queue ready for posting soon.
22+
*/
23+
public class QOTWUserReminderJob extends DiscordApiJob {
24+
@Override
25+
protected void execute(JobExecutionContext context, @NotNull JDA jda) throws JobExecutionException {
26+
for (Guild guild : jda.getGuilds()) {
27+
QOTWConfig config = Bot.getConfig().get(guild).getQotwConfig();
28+
List<QOTWSubmission> submissions = new SubmissionManager(config).getActiveSubmissionThreads();
29+
for (QOTWSubmission submission : submissions) {
30+
UserPreferenceManager manager = new UserPreferenceManager(Bot.getDataSource());
31+
UserPreference preference = manager.getOrCreate(submission.getAuthorId(), Preference.QOTW_REMINDER);
32+
if (preference.isEnabled()) {
33+
TextChannel channel = config.getSubmissionChannel();
34+
channel.getThreadChannels().stream().filter(t -> t.getIdLong() == submission.getThreadId()).forEach(t -> {
35+
if (t.getMessageCount() <= 1) {
36+
t.sendMessageFormat("**Question of the Week Reminder**\nHey <@%s>! You still have some time left to submit your answer!", submission.getAuthorId())
37+
.queue();
38+
}
39+
});
40+
}
41+
}
42+
}
43+
}
44+
}

src/main/java/net/javadiscord/javabot/systems/qotw/submissions/SubmissionManager.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.sql.Connection;
2626
import java.sql.SQLException;
2727
import java.time.Instant;
28+
import java.util.List;
2829
import java.util.Optional;
2930

3031
/**
@@ -129,6 +130,21 @@ public boolean hasActiveSubmissionThreads(long authorId) {
129130
}
130131
}
131132

133+
/**
134+
* Gets all active submission threads.
135+
*
136+
* @return An immutable {@link List} of {@link QOTWSubmission}s.
137+
*/
138+
public List<QOTWSubmission> getActiveSubmissionThreads() {
139+
try (Connection con = Bot.getDataSource().getConnection()) {
140+
QOTWSubmissionRepository repo = new QOTWSubmissionRepository(con);
141+
return repo.getSubmissionByQuestionNumber(repo.getCurrentQuestionNumber());
142+
} catch (SQLException e) {
143+
ExceptionLogger.capture(e, getClass().getSimpleName());
144+
return List.of();
145+
}
146+
}
147+
132148
private @NotNull MessageEmbed buildSubmissionThreadEmbed(@NotNull User createdBy, @NotNull QOTWQuestion question, @NotNull QOTWConfig config) {
133149
return new EmbedBuilder()
134150
.setColor(Responses.Type.DEFAULT.getColor())

src/main/java/net/javadiscord/javabot/tasks/ScheduledTasks.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.javadiscord.javabot.systems.qotw.QOTWCloseSubmissionsJob;
66
import net.javadiscord.javabot.systems.qotw.QOTWJob;
77
import net.javadiscord.javabot.systems.qotw.QOTWReminderJob;
8+
import net.javadiscord.javabot.systems.qotw.QOTWUserReminderJob;
89
import net.javadiscord.javabot.tasks.jobs.DiscordApiJob;
910
import net.javadiscord.javabot.util.ExceptionLogger;
1011
import org.quartz.*;
@@ -54,6 +55,9 @@ private static void scheduleAllTasks(Scheduler scheduler, JDA jda) throws Schedu
5455
// Schedule posting a new QOTW every Monday at 9am.
5556
scheduleApiJob(scheduler, jda, QOTWJob.class, CronScheduleBuilder.weeklyOnDayAndHourAndMinute(DateBuilder.MONDAY, 9, 0));
5657

58+
// Schedule QOTW Reminder (if no answer was yet submitted)
59+
scheduleApiJob(scheduler, jda, QOTWUserReminderJob.class, CronScheduleBuilder.weeklyOnDayAndHourAndMinute(DateBuilder.FRIDAY, 16, 0));
60+
5761
// Schedule closing submissions every Sunday at 9pm.
5862
scheduleApiJob(scheduler, jda, QOTWCloseSubmissionsJob.class, CronScheduleBuilder.weeklyOnDayAndHourAndMinute(DateBuilder.SUNDAY, 21, 0));
5963

0 commit comments

Comments
 (0)