Skip to content

Commit a6fffe7

Browse files
First pass on refactoring the QOTW-system
1 parent ba27863 commit a6fffe7

16 files changed

+194
-769
lines changed

src/main/java/net/javadiscord/javabot/systems/notification/NotificationService.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import net.dv8tion.jda.api.entities.User;
77
import net.javadiscord.javabot.data.config.BotConfig;
88
import net.javadiscord.javabot.systems.qotw.QOTWPointsService;
9-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
109
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
1110
import net.dv8tion.jda.api.requests.restaction.MessageCreateAction;
1211
import org.jetbrains.annotations.Contract;
@@ -25,7 +24,6 @@ public class NotificationService {
2524
private final QOTWPointsService qotwPointsService;
2625
private final BotConfig botConfig;
2726
private final ExecutorService asyncPool;
28-
private final QOTWSubmissionRepository qotwSubmissionRepository;
2927

3028
@Contract("_ -> new")
3129
public @NotNull GuildNotificationService withGuild(Guild guild) {
@@ -38,11 +36,11 @@ public class NotificationService {
3836
}
3937

4038
public @NotNull QOTWGuildNotificationService withQOTW(Guild guild) {
41-
return new QOTWGuildNotificationService(this, guild, asyncPool, qotwSubmissionRepository);
39+
return new QOTWGuildNotificationService(this, guild);
4240
}
4341

4442
public @NotNull QOTWNotificationService withQOTW(Guild guild, User user) {
45-
return new QOTWNotificationService(this, qotwPointsService, user, guild, botConfig.getSystems(), asyncPool, qotwSubmissionRepository);
43+
return new QOTWNotificationService(this, qotwPointsService, user, guild, botConfig.getSystems(), asyncPool);
4644
}
4745

4846
/**

src/main/java/net/javadiscord/javabot/systems/notification/QOTWGuildNotificationService.java

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,10 @@
99
import net.dv8tion.jda.api.entities.User;
1010
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
1111
import net.javadiscord.javabot.systems.qotw.submissions.SubmissionStatus;
12-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
13-
import net.javadiscord.javabot.systems.qotw.submissions.model.QOTWSubmission;
14-
import net.javadiscord.javabot.util.ExceptionLogger;
1512

1613
import org.jetbrains.annotations.NotNull;
17-
import org.springframework.dao.DataAccessException;
1814

19-
import javax.annotation.Nullable;
2015
import java.time.Instant;
21-
import java.util.Optional;
22-
import java.util.concurrent.ExecutorService;
2316

2417
/**
2518
* Handles all sorts of guild qotw notifications.
@@ -32,42 +25,28 @@ public class QOTWGuildNotificationService {
3225
*/
3326
protected final NotificationService notificationService;
3427
private final Guild guild;
35-
private final ExecutorService asyncPool;
36-
private final QOTWSubmissionRepository qotwSubmissionRepository;
3728

3829
/**
3930
* Sends the executed action, performed on a QOTW submission thread, to the {@link Guild}s log channel.
4031
*
4132
* @param reviewedBy The user which reviewed the QOTW submission thread.
33+
* @param author The submissions' author.
4234
* @param submissionThread The submission thread itself.
4335
* @param status The {@link SubmissionStatus}.
44-
* @param reasons The reasons for taking this action.
4536
*/
46-
public void sendSubmissionActionNotification(User reviewedBy, ThreadChannel submissionThread, SubmissionStatus status, @Nullable String... reasons) {
47-
asyncPool.execute(()->{
48-
try {
49-
Optional<QOTWSubmission> submissionOptional = qotwSubmissionRepository.getSubmissionByThreadId(submissionThread.getIdLong());
50-
submissionOptional.ifPresent(submission -> guild.getJDA().retrieveUserById(submission.getAuthorId()).queue(author -> {
51-
notificationService.withGuild(guild).sendToModerationLog(c -> c.sendMessageEmbeds(buildSubmissionActionEmbed(author, submissionThread, reviewedBy, status, reasons)));
52-
log.info("{} {} {}'s QOTW Submission{}", reviewedBy.getAsTag(), status.name().toLowerCase(), author.getAsTag(), reasons != null ? " for: " + String.join(", ", reasons) : ".");
53-
}));
54-
}catch (DataAccessException e) {
55-
ExceptionLogger.capture(e, QOTWGuildNotificationService.class.getSimpleName());
56-
}
57-
});
37+
public void sendSubmissionActionNotification(User reviewedBy, User author, ThreadChannel submissionThread, SubmissionStatus status) {
38+
notificationService.withGuild(guild).sendToModerationLog(c -> c.sendMessageEmbeds(buildSubmissionActionEmbed(author, submissionThread, reviewedBy, status)));
39+
log.info("{} {} {}'s QOTW Submission", reviewedBy.getAsTag(), status.name().toLowerCase(), author.getAsTag());
5840
}
5941

60-
private @NotNull MessageEmbed buildSubmissionActionEmbed(@NotNull User author, ThreadChannel thread, @NotNull User reviewedBy, @NotNull SubmissionStatus status, String... reasons) {
42+
private @NotNull MessageEmbed buildSubmissionActionEmbed(@NotNull User author, ThreadChannel thread, @NotNull User reviewedBy, @NotNull SubmissionStatus status) {
6143
EmbedBuilder builder = new EmbedBuilder()
6244
.setAuthor(reviewedBy.getAsTag(), null, reviewedBy.getEffectiveAvatarUrl())
6345
.setTitle(String.format("%s %s %s's QOTW Submission", reviewedBy.getAsTag(), status.name().toLowerCase(), author.getAsTag()))
6446
.setTimestamp(Instant.now());
65-
if (thread != null && status != SubmissionStatus.DELETED) {
47+
if (thread != null) {
6648
builder.addField("Thread", thread.getAsMention(), true);
6749
}
68-
if (reasons != null && reasons.length > 0) {
69-
builder.addField("Reason(s)", String.join(", ", reasons), true);
70-
}
7150
return builder.build();
7251
}
7352
}

src/main/java/net/javadiscord/javabot/systems/notification/QOTWNotificationService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import net.javadiscord.javabot.data.config.SystemsConfig;
99
import net.javadiscord.javabot.systems.qotw.QOTWPointsService;
1010
import net.javadiscord.javabot.systems.qotw.model.QOTWAccount;
11-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
1211
import net.javadiscord.javabot.util.Responses;
1312
import org.jetbrains.annotations.NotNull;
1413
import org.springframework.dao.DataAccessException;
@@ -28,8 +27,8 @@ public final class QOTWNotificationService extends QOTWGuildNotificationService
2827
private final QOTWAccount account;
2928
private final SystemsConfig systemsConfig;
3029

31-
QOTWNotificationService(NotificationService notificationService, QOTWPointsService pointsService,@NotNull User user, Guild guild, SystemsConfig systemsConfig, ExecutorService asyncPool, QOTWSubmissionRepository qotwSubmissionRepository) {
32-
super(notificationService, guild, asyncPool, qotwSubmissionRepository);
30+
QOTWNotificationService(NotificationService notificationService, QOTWPointsService pointsService,@NotNull User user, Guild guild, SystemsConfig systemsConfig, ExecutorService asyncPool) {
31+
super(notificationService, guild, asyncPool);
3332
this.user = user;
3433
this.guild = guild;
3534
QOTWAccount account;

src/main/java/net/javadiscord/javabot/systems/qotw/QOTWCloseSubmissionsJob.java

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
package net.javadiscord.javabot.systems.qotw;
22

3+
import lombok.RequiredArgsConstructor;
34
import net.dv8tion.jda.api.JDA;
45
import net.dv8tion.jda.api.Permission;
5-
import net.dv8tion.jda.api.entities.*;
6-
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
6+
import net.dv8tion.jda.api.entities.Guild;
7+
import net.dv8tion.jda.api.entities.Message;
8+
import net.dv8tion.jda.api.entities.MessageHistory;
79
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
810
import net.dv8tion.jda.api.interactions.components.ActionRow;
911
import net.dv8tion.jda.api.interactions.components.buttons.Button;
1012
import net.javadiscord.javabot.data.config.BotConfig;
1113
import net.javadiscord.javabot.data.config.GuildConfig;
1214
import net.javadiscord.javabot.data.config.guild.QOTWConfig;
1315
import net.javadiscord.javabot.systems.notification.NotificationService;
14-
import net.javadiscord.javabot.systems.qotw.submissions.SubmissionControlsManager;
15-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
16-
import net.javadiscord.javabot.systems.qotw.submissions.model.QOTWSubmission;
16+
import org.jetbrains.annotations.NotNull;
1717
import org.springframework.scheduling.annotation.Scheduled;
1818
import org.springframework.stereotype.Service;
1919

20-
import lombok.RequiredArgsConstructor;
21-
2220
import java.sql.SQLException;
2321
import java.util.Collections;
2422
import java.util.List;
25-
import java.util.Optional;
2623

2724
/**
2825
* Job which disables the Submission button.
@@ -31,13 +28,12 @@
3128
@RequiredArgsConstructor
3229
public class QOTWCloseSubmissionsJob {
3330
private final JDA jda;
34-
private final QOTWPointsService pointsService;
3531
private final NotificationService notificationService;
3632
private final BotConfig botConfig;
37-
private final QOTWSubmissionRepository qotwSubmissionRepository;
3833

3934
/**
40-
* disable the Submission button.
35+
* Disables the submission button.
36+
*
4137
* @throws SQLException if an SQL error occurs
4238
*/
4339
@Scheduled(cron = "0 0 21 * * 7")//Sunday 21:00
@@ -51,18 +47,21 @@ public void execute() throws SQLException {
5147
.queue();
5248
if (config.getModerationConfig().getLogChannel() == null) continue;
5349
if (qotwConfig.getSubmissionChannel() == null || qotwConfig.getQuestionChannel() == null) continue;
54-
Message message = getLatestQOTWMessage(qotwConfig.getQuestionChannel(), qotwConfig, jda);
55-
if (message == null) continue;
56-
message.editMessageComponents(ActionRow.of(Button.secondary("qotw-submission:closed", "Submissions closed").asDisabled())).queue();
57-
for (ThreadChannel thread : qotwConfig.getSubmissionChannel().getThreadChannels()) {
58-
Optional<QOTWSubmission> optionalSubmission = qotwSubmissionRepository.getSubmissionByThreadId(thread.getIdLong());
59-
if (optionalSubmission.isEmpty()) continue;
60-
new SubmissionControlsManager(botConfig.get(guild), optionalSubmission.get(), pointsService, notificationService).sendControls();
61-
}
50+
getLatestQOTWMessage(qotwConfig.getQuestionChannel(), qotwConfig, jda)
51+
.editMessageComponents(ActionRow.of(Button.secondary("qotw-submission:closed", "Submissions closed").asDisabled())).queue();
52+
notificationService.withGuild(guild)
53+
.sendToMessageLog(log ->
54+
log.sendMessageFormat("%s%nIt's review time! There are %s threads to review!",
55+
qotwConfig.getQOTWReviewRole().getAsMention(), countThreads(qotwConfig))
56+
);
6257
}
6358
}
6459

65-
private Message getLatestQOTWMessage(MessageChannel channel, QOTWConfig config, JDA jda) {
60+
private long countThreads(@NotNull QOTWConfig qotwConfig) {
61+
return qotwConfig.getSubmissionChannel().getThreadChannels().size();
62+
}
63+
64+
private Message getLatestQOTWMessage(@NotNull MessageChannel channel, QOTWConfig config, JDA jda) {
6665
MessageHistory history = channel.getHistory();
6766
Message message = null;
6867
while (message == null) {

src/main/java/net/javadiscord/javabot/systems/qotw/QOTWUserReminderJob.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import net.javadiscord.javabot.data.h2db.DbHelper;
99
import net.javadiscord.javabot.systems.qotw.dao.QuestionQueueRepository;
1010
import net.javadiscord.javabot.systems.qotw.submissions.SubmissionManager;
11-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
12-
import net.javadiscord.javabot.systems.qotw.submissions.model.QOTWSubmission;
1311
import net.javadiscord.javabot.systems.user_preferences.UserPreferenceService;
1412
import net.javadiscord.javabot.systems.user_preferences.model.Preference;
1513
import net.javadiscord.javabot.systems.user_preferences.model.UserPreference;

src/main/java/net/javadiscord/javabot/systems/qotw/commands/QOTWAdminCommand.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import net.javadiscord.javabot.systems.qotw.commands.questions_queue.AddQuestionSubcommand;
99
import net.javadiscord.javabot.systems.qotw.commands.questions_queue.ListQuestionsSubcommand;
1010
import net.javadiscord.javabot.systems.qotw.commands.questions_queue.RemoveQuestionSubcommand;
11-
import net.javadiscord.javabot.systems.qotw.submissions.subcommands.MarkBestAnswerSubcommand;
11+
import net.javadiscord.javabot.systems.qotw.submissions.subcommands.QOTWReviewSubcommand;
1212
import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand;
1313

1414
/**
@@ -24,17 +24,18 @@ public class QOTWAdminCommand extends SlashCommand {
2424
* @param removeQuestionSubcommand /qotw-admin questions-queue remove
2525
* @param incrementPointsSubcommand /qotw-admin account increment
2626
* @param setPointsSubcommand /qotw-admin account set
27-
* @param markBestAnswerSubcommand /qotw-admin submissions mark-best
27+
* @param reviewSubcommand /qotw-admin submissions review
2828
*/
29-
public QOTWAdminCommand(ListQuestionsSubcommand listQuestionsSubcommand, AddQuestionSubcommand addQuestionSubcommand, RemoveQuestionSubcommand removeQuestionSubcommand, IncrementPointsSubcommand incrementPointsSubcommand, SetPointsSubcommand setPointsSubcommand, MarkBestAnswerSubcommand markBestAnswerSubcommand) {
29+
public QOTWAdminCommand(ListQuestionsSubcommand listQuestionsSubcommand, AddQuestionSubcommand addQuestionSubcommand, RemoveQuestionSubcommand removeQuestionSubcommand, IncrementPointsSubcommand incrementPointsSubcommand, SetPointsSubcommand setPointsSubcommand, QOTWReviewSubcommand reviewSubcommand) {
3030
setCommandData(Commands.slash("qotw-admin", "Administrative tools for managing the Question of the Week.")
3131
.setDefaultPermissions(DefaultMemberPermissions.DISABLED)
3232
.setGuildOnly(true)
3333
);
34+
addSubcommands(reviewSubcommand);
3435
addSubcommandGroups(
3536
SubcommandGroup.of(new SubcommandGroupData("questions-queue", "Commands for interacting with the set of QOTW questions that are in queue."), listQuestionsSubcommand, addQuestionSubcommand, removeQuestionSubcommand),
3637
SubcommandGroup.of(new SubcommandGroupData("account", "Commands for interaction with Users Question of the Week points."), incrementPointsSubcommand, setPointsSubcommand),
37-
SubcommandGroup.of(new SubcommandGroupData("submissions", "Commands for managing QOTW Submissions."), markBestAnswerSubcommand)
38+
SubcommandGroup.of(new SubcommandGroupData("submissions", "Commands for managing QOTW Submissions."), reviewSubcommand)
3839
);
3940
}
4041
}

src/main/java/net/javadiscord/javabot/systems/qotw/commands/view/QOTWListAnswersSubcommand.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
import net.dv8tion.jda.api.interactions.commands.OptionType;
99
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
1010
import net.javadiscord.javabot.data.config.BotConfig;
11-
import net.javadiscord.javabot.systems.qotw.submissions.SubmissionStatus;
12-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
13-
import net.javadiscord.javabot.systems.qotw.submissions.model.QOTWSubmission;
14-
import net.javadiscord.javabot.systems.qotw.submissions.subcommands.MarkBestAnswerSubcommand;
1511
import net.javadiscord.javabot.util.ExceptionLogger;
1612
import net.javadiscord.javabot.util.Responses;
1713
import org.jetbrains.annotations.NotNull;
@@ -28,18 +24,15 @@ public class QOTWListAnswersSubcommand extends SlashCommand.Subcommand {
2824

2925
private final BotConfig botConfig;
3026
private final ExecutorService asyncPool;
31-
private final QOTWSubmissionRepository qotwSubmissionRepository;
3227

3328
/**
3429
* The constructor of this class, which sets the corresponding {@link SubcommandData}.
3530
* @param botConfig The injected {@link BotConfig}
3631
* @param asyncPool The main thread pool for asynchronous operations
37-
* @param qotwSubmissionRepository Dao object that represents the QOTW_SUBMISSIONS SQL Table.
3832
*/
39-
public QOTWListAnswersSubcommand(BotConfig botConfig, ExecutorService asyncPool, QOTWSubmissionRepository qotwSubmissionRepository) {
33+
public QOTWListAnswersSubcommand(BotConfig botConfig, ExecutorService asyncPool) {
4034
this.botConfig = botConfig;
4135
this.asyncPool = asyncPool;
42-
this.qotwSubmissionRepository = qotwSubmissionRepository;
4336
setCommandData(new SubcommandData("list-answers", "Lists answers to (previous) questions of the week")
4437
.addOption(OptionType.INTEGER, "question", "The question number", true)
4538
);

src/main/java/net/javadiscord/javabot/systems/qotw/commands/view/QOTWViewAnswerSubcommand.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
import net.dv8tion.jda.api.interactions.commands.OptionType;
1818
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
1919
import net.javadiscord.javabot.data.config.BotConfig;
20-
import net.javadiscord.javabot.systems.qotw.submissions.dao.QOTWSubmissionRepository;
21-
import net.javadiscord.javabot.systems.qotw.submissions.model.QOTWSubmission;
2220
import net.javadiscord.javabot.util.ExceptionLogger;
2321
import net.javadiscord.javabot.util.MessageActionUtils;
2422
import net.javadiscord.javabot.util.Responses;

0 commit comments

Comments
 (0)