mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-15 20:16:34 +00:00
[AB-xxx] adding check in case the modmail thread has been closed, this is needed because in thread mode one could potentially still execute commands
removing some message command implementations refactoring the way modmail threads are loaded
This commit is contained in:
@@ -8,12 +8,12 @@ import dev.sheldan.abstracto.core.command.config.Parameter;
|
|||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
|
||||||
import dev.sheldan.abstracto.core.service.MemberService;
|
import dev.sheldan.abstracto.core.service.MemberService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
|
||||||
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.modmail.exception.ModMailThreadClosedException;
|
||||||
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
||||||
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -42,18 +42,17 @@ public class AnonReply extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MemberService memberService;
|
private MemberService memberService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelManagementService channelManagementService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
// text is optional, for example if only an attachment is sent
|
// text is optional, for example if only an attachment is sent
|
||||||
String text = parameters.size() == 1 ? (String) parameters.get(0) : "";
|
String text = parameters.size() == 1 ? (String) parameters.get(0) : "";
|
||||||
AChannel channel = channelManagementService.loadChannel(commandContext.getChannel());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong());
|
||||||
ModMailThread thread = modMailThreadManagementService.getByChannel(channel);
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
Long threadId = thread.getId();
|
throw new ModMailThreadClosedException();
|
||||||
return memberService.getMemberInServerAsync(thread.getUser()).thenCompose(member ->
|
}
|
||||||
|
Long threadId = modMailThread.getId();
|
||||||
|
return memberService.getMemberInServerAsync(modMailThread.getUser()).thenCompose(member ->
|
||||||
modMailThreadService.loadExecutingMemberAndRelay(threadId, text, commandContext.getMessage(), true, member)
|
modMailThreadService.loadExecutingMemberAndRelay(threadId, text, commandContext.getMessage(), true, member)
|
||||||
).thenApply(aVoid -> CommandResult.fromSuccess());
|
).thenApply(aVoid -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
|||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
|
||||||
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailSlashCommandNames;
|
import dev.sheldan.abstracto.modmail.config.ModMailSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.modmail.exception.ModMailThreadClosedException;
|
||||||
import dev.sheldan.abstracto.modmail.model.ClosingContext;
|
import dev.sheldan.abstracto.modmail.model.ClosingContext;
|
||||||
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
||||||
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
||||||
@@ -59,9 +59,6 @@ public class Close extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TemplateService templateService;
|
private TemplateService templateService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelManagementService channelManagementService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private InteractionService interactionService;
|
private InteractionService interactionService;
|
||||||
|
|
||||||
@@ -76,8 +73,10 @@ public class Close extends AbstractConditionableCommand {
|
|||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
// the default value of the note is configurable via template
|
// the default value of the note is configurable via template
|
||||||
String note = parameters.size() == 1 ? (String) parameters.get(0) : templateService.renderTemplate(MODMAIL_CLOSE_DEFAULT_NOTE_TEMPLATE_KEY, new Object());
|
String note = parameters.size() == 1 ? (String) parameters.get(0) : templateService.renderTemplate(MODMAIL_CLOSE_DEFAULT_NOTE_TEMPLATE_KEY, new Object());
|
||||||
AChannel channel = channelManagementService.loadChannel(commandContext.getChannel());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong());
|
||||||
ModMailThread thread = modMailThreadManagementService.getByChannel(channel);
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
|
throw new ModMailThreadClosedException();
|
||||||
|
}
|
||||||
ClosingContext context = ClosingContext
|
ClosingContext context = ClosingContext
|
||||||
.builder()
|
.builder()
|
||||||
.closingMember(commandContext.getAuthor())
|
.closingMember(commandContext.getAuthor())
|
||||||
@@ -86,7 +85,7 @@ public class Close extends AbstractConditionableCommand {
|
|||||||
.log(true)
|
.log(true)
|
||||||
.note(note)
|
.note(note)
|
||||||
.build();
|
.build();
|
||||||
return modMailThreadService.closeModMailThread(thread, context, commandContext.getUndoActions())
|
return modMailThreadService.closeModMailThread(modMailThread, context, commandContext.getUndoActions())
|
||||||
.thenApply(aVoid -> CommandResult.fromIgnored());
|
.thenApply(aVoid -> CommandResult.fromIgnored());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,9 +124,11 @@ public class Close extends AbstractConditionableCommand {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public CompletableFuture<Void> closeThread(ClosingContext closingContext) {
|
public CompletableFuture<Void> closeThread(ClosingContext closingContext) {
|
||||||
AChannel channel = channelManagementService.loadChannel(closingContext.getChannel());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(closingContext.getChannel().getIdLong());
|
||||||
ModMailThread thread = modMailThreadManagementService.getByChannel(channel);
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
return modMailThreadService.closeModMailThread(thread, closingContext, new ArrayList<>());
|
throw new ModMailThreadClosedException();
|
||||||
|
}
|
||||||
|
return modMailThreadService.closeModMailThread(modMailThread, closingContext, new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ import dev.sheldan.abstracto.core.command.config.Parameter;
|
|||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
|
||||||
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.modmail.exception.ModMailThreadClosedException;
|
||||||
import dev.sheldan.abstracto.modmail.model.ClosingContext;
|
import dev.sheldan.abstracto.modmail.model.ClosingContext;
|
||||||
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
||||||
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
||||||
@@ -43,16 +43,15 @@ public class CloseSilently extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TemplateService templateService;
|
private TemplateService templateService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelManagementService channelManagementService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
// default note text is configurable via template, because the note is optional
|
// default note text is configurable via template, because the note is optional
|
||||||
String note = parameters.size() == 1 ? (String) parameters.get(0) : templateService.renderTemplate("modmail_close_default_note", new Object());
|
String note = parameters.size() == 1 ? (String) parameters.get(0) : templateService.renderTemplate("modmail_close_default_note", new Object());
|
||||||
AChannel channel = channelManagementService.loadChannel(commandContext.getChannel());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong());
|
||||||
ModMailThread thread = modMailThreadManagementService.getByChannel(channel);
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
|
throw new ModMailThreadClosedException();
|
||||||
|
}
|
||||||
ClosingContext context = ClosingContext
|
ClosingContext context = ClosingContext
|
||||||
.builder()
|
.builder()
|
||||||
.closingMember(commandContext.getAuthor())
|
.closingMember(commandContext.getAuthor())
|
||||||
@@ -60,7 +59,7 @@ public class CloseSilently extends AbstractConditionableCommand {
|
|||||||
.log(true)
|
.log(true)
|
||||||
.note(note)
|
.note(note)
|
||||||
.build();
|
.build();
|
||||||
return modMailThreadService.closeModMailThread(thread, context, commandContext.getUndoActions())
|
return modMailThreadService.closeModMailThread(modMailThread, context, commandContext.getUndoActions())
|
||||||
.thenApply(aVoid -> CommandResult.fromIgnored());
|
.thenApply(aVoid -> CommandResult.fromIgnored());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ import dev.sheldan.abstracto.core.command.config.Parameter;
|
|||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
|
||||||
import dev.sheldan.abstracto.core.service.MemberService;
|
import dev.sheldan.abstracto.core.service.MemberService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
|
||||||
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.modmail.exception.ModMailThreadClosedException;
|
||||||
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
||||||
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -41,17 +41,16 @@ public class Reply extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MemberService memberService;
|
private MemberService memberService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelManagementService channelManagementService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
String text = parameters.size() == 1 ? (String) parameters.get(0) : "";
|
String text = parameters.size() == 1 ? (String) parameters.get(0) : "";
|
||||||
AChannel channel = channelManagementService.loadChannel(commandContext.getChannel());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong());
|
||||||
ModMailThread thread = modMailThreadManagementService.getByChannel(channel);
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
Long threadId = thread.getId();
|
throw new ModMailThreadClosedException();
|
||||||
return memberService.getMemberInServerAsync(thread.getUser()).thenCompose(member ->
|
}
|
||||||
|
Long threadId = modMailThread.getId();
|
||||||
|
return memberService.getMemberInServerAsync(modMailThread.getUser()).thenCompose(member ->
|
||||||
modMailThreadService.loadExecutingMemberAndRelay(threadId, text, commandContext.getMessage(), false, member)
|
modMailThreadService.loadExecutingMemberAndRelay(threadId, text, commandContext.getMessage(), false, member)
|
||||||
).thenApply(aVoid -> CommandResult.fromSuccess());
|
).thenApply(aVoid -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import dev.sheldan.abstracto.core.command.condition.CommandCondition;
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
@@ -13,7 +12,9 @@ import dev.sheldan.abstracto.core.service.management.UserInServerManagementServi
|
|||||||
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailSlashCommandNames;
|
import dev.sheldan.abstracto.modmail.config.ModMailSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.modmail.exception.ModMailThreadClosedException;
|
||||||
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
||||||
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.service.ModMailSubscriptionService;
|
import dev.sheldan.abstracto.modmail.service.ModMailSubscriptionService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
@@ -49,16 +50,12 @@ public class Subscribe extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private InteractionService interactionService;
|
private InteractionService interactionService;
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong());
|
|
||||||
modMailSubscriptionService.subscribeToThread(userInServerManagementService.loadOrCreateUser(commandContext.getAuthor()), modMailThread);
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(event.getChannel().getIdLong());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(event.getChannel().getIdLong());
|
||||||
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
|
throw new ModMailThreadClosedException();
|
||||||
|
}
|
||||||
modMailSubscriptionService.subscribeToThread(userInServerManagementService.loadOrCreateUser(event.getMember()), modMailThread);
|
modMailSubscriptionService.subscribeToThread(userInServerManagementService.loadOrCreateUser(event.getMember()), modMailThread);
|
||||||
return interactionService.replyEmbed(SUBSCRIBE_RESPONSE, event)
|
return interactionService.replyEmbed(SUBSCRIBE_RESPONSE, event)
|
||||||
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
@@ -83,6 +80,7 @@ public class Subscribe extends AbstractConditionableCommand {
|
|||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.module(ModMailModuleDefinition.MODMAIL)
|
.module(ModMailModuleDefinition.MODMAIL)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import dev.sheldan.abstracto.core.command.condition.CommandCondition;
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
@@ -14,7 +13,9 @@ import dev.sheldan.abstracto.core.service.management.UserInServerManagementServi
|
|||||||
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
import dev.sheldan.abstracto.modmail.condition.ModMailContextCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailSlashCommandNames;
|
import dev.sheldan.abstracto.modmail.config.ModMailSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.modmail.exception.ModMailThreadClosedException;
|
||||||
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThread;
|
||||||
|
import dev.sheldan.abstracto.modmail.model.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.service.ModMailSubscriptionService;
|
import dev.sheldan.abstracto.modmail.service.ModMailSubscriptionService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
@@ -50,17 +51,12 @@ public class UnSubscribe extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private InteractionService interactionService;
|
private InteractionService interactionService;
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong());
|
|
||||||
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(commandContext.getAuthor());
|
|
||||||
modMailSubscriptionService.unsubscribeFromThread(aUserInAServer, modMailThread);
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(event.getChannel().getIdLong());
|
ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(event.getChannel().getIdLong());
|
||||||
|
if(ModMailThreadState.CLOSED.equals(modMailThread.getState()) || ModMailThreadState.CLOSING.equals(modMailThread.getState())) {
|
||||||
|
throw new ModMailThreadClosedException();
|
||||||
|
}
|
||||||
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(event.getMember());
|
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(event.getMember());
|
||||||
modMailSubscriptionService.unsubscribeFromThread(aUserInAServer, modMailThread);
|
modMailSubscriptionService.unsubscribeFromThread(aUserInAServer, modMailThread);
|
||||||
return interactionService.replyEmbed(UN_SUBSCRIBE_RESPONSE, event)
|
return interactionService.replyEmbed(UN_SUBSCRIBE_RESPONSE, event)
|
||||||
@@ -86,6 +82,7 @@ public class UnSubscribe extends AbstractConditionableCommand {
|
|||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.module(ModMailModuleDefinition.MODMAIL)
|
.module(ModMailModuleDefinition.MODMAIL)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
package dev.sheldan.abstracto.modmail.exception;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
|
import dev.sheldan.abstracto.core.templating.Templatable;
|
||||||
|
|
||||||
|
public class ModMailThreadClosedException extends AbstractoRunTimeException implements Templatable {
|
||||||
|
|
||||||
|
public ModMailThreadClosedException() {
|
||||||
|
super("Mod mail thread closed");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTemplateName() {
|
||||||
|
return "modmail_thread_closed_exception";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getTemplateModel() {
|
||||||
|
return new Object();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user