mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-24 13:44:33 +00:00
added current values to post post target
added support for custom setup steps for each feature added mod mail category setup step
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package dev.sheldan.abstracto.modmail.setup;
|
||||
|
||||
import dev.sheldan.abstracto.core.interactive.DelayedAction;
|
||||
import dev.sheldan.abstracto.core.interactive.DelayedActionConfig;
|
||||
import dev.sheldan.abstracto.core.service.ConfigService;
|
||||
import dev.sheldan.abstracto.modmail.service.ModMailThreadServiceBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ModMailCategoryDelayedAction implements DelayedAction {
|
||||
|
||||
|
||||
@Autowired
|
||||
private ConfigService configService;
|
||||
|
||||
@Override
|
||||
public void execute(DelayedActionConfig delayedActionConfig) {
|
||||
ModMailCategoryDelayedActionConfig concrete = (ModMailCategoryDelayedActionConfig) delayedActionConfig;
|
||||
configService.setConfigValue(ModMailThreadServiceBean.MODMAIL_CATEGORY, concrete.getServerId(), concrete.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handles(DelayedActionConfig delayedActionConfig) {
|
||||
return delayedActionConfig instanceof ModMailCategoryDelayedActionConfig;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package dev.sheldan.abstracto.modmail.setup;
|
||||
|
||||
import dev.sheldan.abstracto.core.interactive.DelayedActionConfig;
|
||||
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||
import dev.sheldan.abstracto.modmail.models.template.ModMailCategoryActionModel;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Category;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class ModMailCategoryDelayedActionConfig implements DelayedActionConfig {
|
||||
private Long serverId;
|
||||
private AConfig value;
|
||||
private Category category;
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "setup_modmail_category_action";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return ModMailCategoryActionModel
|
||||
.builder()
|
||||
.category(this.category)
|
||||
.categoryId(value.getLongValue())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package dev.sheldan.abstracto.modmail.setup;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.exception.ChannelNotFoundException;
|
||||
import dev.sheldan.abstracto.core.interactive.*;
|
||||
import dev.sheldan.abstracto.core.models.AServerChannelUserId;
|
||||
import dev.sheldan.abstracto.core.models.FeatureValidationResult;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.ConfigService;
|
||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.modmail.models.template.SetupModMailCategoryMessageModel;
|
||||
import dev.sheldan.abstracto.modmail.service.ModMailThreadServiceBean;
|
||||
import dev.sheldan.abstracto.modmail.validator.ModMailFeatureValidator;
|
||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Category;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class ModMailCategorySetupBean implements ModMailCategorySetup {
|
||||
|
||||
@Autowired
|
||||
private InteractiveUtils interactiveUtils;
|
||||
|
||||
@Autowired
|
||||
private TemplateService templateService;
|
||||
|
||||
@Autowired
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private InteractiveService interactiveService;
|
||||
|
||||
@Autowired
|
||||
private ConfigService configService;
|
||||
|
||||
@Autowired
|
||||
private ConfigManagementService configManagementService;
|
||||
|
||||
@Autowired
|
||||
private ModMailFeatureValidator modMailFeatureValidator;
|
||||
|
||||
@Autowired
|
||||
private BotService botService;
|
||||
|
||||
@Override
|
||||
public CompletableFuture<SetupStepResult> execute(AServerChannelUserId user, SetupStepParameter parameter) {
|
||||
String messageTemplateKey = "setup_modmail_category_message";
|
||||
SetupModMailCategoryMessageModel model = SetupModMailCategoryMessageModel
|
||||
.builder()
|
||||
.build();
|
||||
if(configManagementService.configExists(user.getGuildId(), ModMailThreadServiceBean.MODMAIL_CATEGORY)) {
|
||||
Guild guild = botService.getGuildByIdNullable(user.getGuildId());
|
||||
Long categoryId = configService.getLongValue(ModMailThreadServiceBean.MODMAIL_CATEGORY, user.getGuildId());
|
||||
Category category = guild.getCategoryById(categoryId);
|
||||
model.setCategory(category);
|
||||
}
|
||||
String messageText = templateService.renderTemplate(messageTemplateKey, model);
|
||||
Optional<AChannel> channel = channelManagementService.loadChannel(user.getChannelId());
|
||||
CompletableFuture<SetupStepResult> future = new CompletableFuture<>();
|
||||
AUserInAServer aUserInAServer = userInServerManagementService.loadUser(user.getGuildId(), user.getUserId());
|
||||
|
||||
if(channel.isPresent()) {
|
||||
Runnable finalAction = getTimeoutRunnable(user.getGuildId(), user.getChannelId());
|
||||
Consumer<MessageReceivedEvent> configAction = (MessageReceivedEvent event) -> {
|
||||
try {
|
||||
|
||||
SetupStepResult result;
|
||||
Message message = event.getMessage();
|
||||
if(checkForExit(message)) {
|
||||
result = SetupStepResult.fromCancelled();
|
||||
} else {
|
||||
String messageContent = event.getMessage().getContentRaw();
|
||||
Long categoryId = Long.parseLong(messageContent);
|
||||
Guild guild = botService.getGuildByIdNullable(user.getGuildId());
|
||||
FeatureValidationResult featureValidationResult = FeatureValidationResult.builder().validationResult(true).build();
|
||||
modMailFeatureValidator.validateModMailCategory(featureValidationResult, guild, categoryId);
|
||||
if(featureValidationResult.getValidationResult()) {
|
||||
AConfig fakeValue = configService.getFakeConfigForValue(ModMailThreadServiceBean.MODMAIL_CATEGORY, user.getGuildId(), messageContent);
|
||||
ModMailCategoryDelayedActionConfig build = ModMailCategoryDelayedActionConfig
|
||||
.builder()
|
||||
.serverId(user.getGuildId())
|
||||
.category(guild.getCategoryById(categoryId))
|
||||
.value(fakeValue)
|
||||
.build();
|
||||
List<DelayedActionConfig> delayedSteps = Arrays.asList(build);
|
||||
result = SetupStepResult
|
||||
.builder()
|
||||
.result(SetupStepResultType.SUCCESS)
|
||||
.delayedActionConfigList(delayedSteps)
|
||||
.build();
|
||||
} else {
|
||||
throw new AbstractoRunTimeException("Category id does not conform.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
future.complete(result);
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to handle post target step.", e);
|
||||
future.completeExceptionally(e);
|
||||
}
|
||||
};
|
||||
interactiveService.createMessageWithResponse(messageText, aUserInAServer, channel.get(), parameter.getPreviousMessageId(), configAction, finalAction);
|
||||
} else {
|
||||
future.completeExceptionally(new ChannelNotFoundException(user.getGuildId(), user.getChannelId()));
|
||||
}
|
||||
return future;
|
||||
}
|
||||
|
||||
protected Runnable getTimeoutRunnable(Long serverId, Long channelId) {
|
||||
return () -> {
|
||||
interactiveUtils.sendTimeoutMessage(serverId, channelId);
|
||||
};
|
||||
}
|
||||
|
||||
protected boolean checkForExit(Message message) {
|
||||
return message.getContentRaw().trim().equalsIgnoreCase("exit");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -35,16 +35,20 @@ public class ModMailFeatureValidatorBean implements ModMailFeatureValidator {
|
||||
boolean checkSucceeded = featureValidatorService.checkSystemConfig(ModMailThreadServiceBean.MODMAIL_CATEGORY, server, validationResult);
|
||||
if(checkSucceeded) {
|
||||
Long modMailCategory = configService.getLongValue(ModMailThreadServiceBean.MODMAIL_CATEGORY, server.getId());
|
||||
Category categoryById = guild.getCategoryById(modMailCategory);
|
||||
if(categoryById == null) {
|
||||
validationResult.setValidationResult(false);
|
||||
ModMailCategoryValidationError newError = ModMailCategoryValidationError
|
||||
.builder()
|
||||
.currentCategoryId(modMailCategory)
|
||||
.build();
|
||||
validationResult.getValidationErrors().add(newError);
|
||||
}
|
||||
validateModMailCategory(validationResult, guild, modMailCategory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void validateModMailCategory(FeatureValidationResult validationResult, Guild guild, Long modMailCategory) {
|
||||
Category categoryById = guild.getCategoryById(modMailCategory);
|
||||
if(categoryById == null) {
|
||||
validationResult.setValidationResult(false);
|
||||
ModMailCategoryValidationError newError = ModMailCategoryValidationError
|
||||
.builder()
|
||||
.currentCategoryId(modMailCategory)
|
||||
.build();
|
||||
validationResult.getValidationErrors().add(newError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<#assign category>${param.category.name}</#assign><#include "setup_modmail_category_action_display">
|
||||
@@ -0,0 +1 @@
|
||||
<#assign categoryName><#if category?has_content>${category.name}<#else><#include "setup_modmail_category_message_no_category">></#if></#assign><#include "setup_modmail_category_message_display">
|
||||
Reference in New Issue
Block a user