[AB-262] adding feature mode to suggestion to be automatically reminded of a suggestion after a configurable amount of time

This commit is contained in:
Sheldan
2021-05-24 17:39:19 +02:00
parent f4c1dcb27f
commit 7d30afbd2c
19 changed files with 284 additions and 14 deletions

View File

@@ -2,7 +2,9 @@ package dev.sheldan.abstracto.suggestion.config;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.FeatureMode;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.suggestion.service.SuggestionService;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@@ -18,11 +20,21 @@ public class SuggestionFeatureConfig implements FeatureConfig {
@Override
public List<PostTargetEnum> getRequiredPostTargets() {
return Arrays.asList(SuggestionPostTarget.SUGGESTION);
return Arrays.asList(SuggestionPostTarget.SUGGESTION, SuggestionPostTarget.SUGGESTION_REMINDER);
}
@Override
public List<String> getRequiredEmotes() {
return Arrays.asList("suggestionYes", "suggestionNo");
}
@Override
public List<FeatureMode> getAvailableModes() {
return Arrays.asList(SuggestionFeatureMode.SUGGESTION_REMINDER);
}
@Override
public List<String> getRequiredSystemConfigKeys() {
return Arrays.asList(SuggestionService.SUGGESTION_REMINDER_DAYS_CONFIG_KEY);
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.suggestion.config;
import dev.sheldan.abstracto.core.config.FeatureMode;
import lombok.Getter;
@Getter
public enum SuggestionFeatureMode implements FeatureMode {
SUGGESTION_REMINDER("suggestionReminder");
private final String key;
SuggestionFeatureMode(String key) {
this.key = key;
}
}

View File

@@ -5,7 +5,7 @@ import lombok.Getter;
@Getter
public enum SuggestionPostTarget implements PostTargetEnum {
SUGGESTION("suggestions");
SUGGESTION("suggestions"), SUGGESTION_REMINDER("suggestionReminder");
private String key;

View File

@@ -66,4 +66,7 @@ public class Suggestion implements Serializable {
@Column(name = "command_message_id")
private Long commandMessageId;
@Column(name = "job_trigger_key")
private String suggestionReminderJobTriggerKey;
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.suggestion.model.template;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.ServerUser;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.time.Instant;
@Getter
@Setter
@Builder
public class SuggestionReminderModel {
private Long serverId;
private Long suggestionId;
private Instant suggestionCreationDate;
private ServerChannelMessage suggestionMessage;
private ServerChannelMessage suggestionCommandMessage;
private ServerUser serverUser;
}

View File

@@ -1,15 +1,20 @@
package dev.sheldan.abstracto.suggestion.service;
import dev.sheldan.abstracto.core.models.ServerSpecificId;
import dev.sheldan.abstracto.suggestion.model.database.Suggestion;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import java.util.concurrent.CompletableFuture;
public interface SuggestionService {
String SUGGESTION_REMINDER_DAYS_CONFIG_KEY = "suggestionReminderDays";
CompletableFuture<Void> createSuggestionMessage(Message commandMessage, String text);
CompletableFuture<Void> acceptSuggestion(Long suggestionId, Message commandMessage, String text);
CompletableFuture<Void> vetoSuggestion(Long suggestionId, Message commandMessage, String text);
CompletableFuture<Void> rejectSuggestion(Long suggestionId, Message commandMessage, String text);
CompletableFuture<Void> removeSuggestion(Long suggestionId, Member member);
void cleanUpSuggestions();
CompletableFuture<Void> remindAboutSuggestion(ServerSpecificId suggestionId);
void cancelSuggestionReminder(Suggestion suggestion);
}