diff --git a/application/sissi-customizations/moderation-custom/src/main/java/dev/sheldan/sissi/module/custom/moderation/commands/SelfMute.java b/application/sissi-customizations/moderation-custom/src/main/java/dev/sheldan/sissi/module/custom/moderation/commands/SelfMute.java new file mode 100644 index 00000000..cca0ff96 --- /dev/null +++ b/application/sissi-customizations/moderation-custom/src/main/java/dev/sheldan/sissi/module/custom/moderation/commands/SelfMute.java @@ -0,0 +1,68 @@ +package dev.sheldan.sissi.module.custom.moderation.commands; + +import dev.sheldan.abstracto.core.command.UtilityModuleDefinition; +import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; +import dev.sheldan.abstracto.core.command.config.CommandConfiguration; +import dev.sheldan.abstracto.core.command.config.HelpInfo; +import dev.sheldan.abstracto.core.command.config.Parameter; +import dev.sheldan.abstracto.core.command.execution.CommandContext; +import dev.sheldan.abstracto.core.command.execution.CommandResult; +import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.sissi.module.custom.moderation.config.ModerationCustomFeatureDefinition; +import dev.sheldan.sissi.module.custom.moderation.service.SelfMuteServiceBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +@Component +public class SelfMute extends AbstractConditionableCommand { + + public static final String DURATION_PARAMETER = "duration"; + + @Autowired + private SelfMuteServiceBean selfMuteServiceBean; + + @Override + public CompletableFuture executeAsync(CommandContext commandContext) { + List parameters = commandContext.getParameters().getParameters(); + Duration muteDuration = (Duration) parameters.get(0); + return selfMuteServiceBean.selfMuteMember(commandContext.getAuthor(), muteDuration) + .thenApply(unused -> CommandResult.fromSuccess()); + } + + @Override + public CommandConfiguration getConfiguration() { + Parameter durationParameter = Parameter + .builder() + .name(DURATION_PARAMETER) + .type(Duration.class) + .templated(true) + .build(); + List parameters = Arrays.asList(durationParameter); + + HelpInfo helpInfo = HelpInfo + .builder() + .templated(true) + .build(); + + return CommandConfiguration.builder() + .name("selfMute") + .async(true) + .module(UtilityModuleDefinition.UTILITY) + .templated(true) + .supportsEmbedException(true) + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureDefinition getFeature() { + return ModerationCustomFeatureDefinition.MODERATION_CUSTOM; + } +} diff --git a/application/sissi-customizations/moderation-custom/src/main/java/dev/sheldan/sissi/module/custom/moderation/service/SelfMuteServiceBean.java b/application/sissi-customizations/moderation-custom/src/main/java/dev/sheldan/sissi/module/custom/moderation/service/SelfMuteServiceBean.java new file mode 100644 index 00000000..c9cd33c0 --- /dev/null +++ b/application/sissi-customizations/moderation-custom/src/main/java/dev/sheldan/sissi/module/custom/moderation/service/SelfMuteServiceBean.java @@ -0,0 +1,30 @@ +package dev.sheldan.sissi.module.custom.moderation.service; + +import dev.sheldan.abstracto.core.service.MemberService; +import dev.sheldan.abstracto.core.templating.service.TemplateService; +import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.entities.Member; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.concurrent.CompletableFuture; + +@Slf4j +@Component +public class SelfMuteServiceBean { + + @Autowired + private MemberService memberService; + + @Autowired + private TemplateService templateService; + + private static final String SELF_MUTE_REASON_TEMPLATE = "self_mute_reason"; + + public CompletableFuture selfMuteMember(Member member, Duration duration) { + String reason = templateService.renderSimpleTemplate(SELF_MUTE_REASON_TEMPLATE, member.getGuild().getIdLong()); + log.info("Self muting user {} in server {}.", member.getIdLong(), member.getGuild().getIdLong()); + return memberService.timeoutUser(member, duration, reason); + } +} diff --git a/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/collection.xml b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/collection.xml new file mode 100644 index 00000000..7fad62b2 --- /dev/null +++ b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/collection.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/seedData/command.xml b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/seedData/command.xml new file mode 100644 index 00000000..81829c43 --- /dev/null +++ b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/seedData/command.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/seedData/data.xml b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/seedData/data.xml new file mode 100644 index 00000000..67a30033 --- /dev/null +++ b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/1.5.9/seedData/data.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/application/sissi-customizations/moderation-custom/src/main/resources/migrations/moderation-custom-changeLog.xml b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/moderation-custom-changeLog.xml index 84af0a32..064e8d18 100644 --- a/application/sissi-customizations/moderation-custom/src/main/resources/migrations/moderation-custom-changeLog.xml +++ b/application/sissi-customizations/moderation-custom/src/main/resources/migrations/moderation-custom-changeLog.xml @@ -5,4 +5,5 @@ + \ No newline at end of file diff --git a/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_description.ftl b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_description.ftl new file mode 100644 index 00000000..6a477a77 --- /dev/null +++ b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_description.ftl @@ -0,0 +1 @@ +Mute yourself for a duration \ No newline at end of file diff --git a/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_long_help.ftl b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_long_help.ftl new file mode 100644 index 00000000..85ad48f0 --- /dev/null +++ b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_long_help.ftl @@ -0,0 +1,2 @@ +Mute yourself for a given duration. This can be used in case you want to stay away from the server and do not feel you have the self-control. +This cannot be undone by yourself. \ No newline at end of file diff --git a/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_parameter_duration.ftl b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_parameter_duration.ftl new file mode 100644 index 00000000..36076201 --- /dev/null +++ b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/help/selfMute_parameter_duration.ftl @@ -0,0 +1 @@ +The duration to be muted for. \ No newline at end of file diff --git a/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/self_mute_reason_en_US.ftl b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/self_mute_reason_en_US.ftl new file mode 100644 index 00000000..de89c4ae --- /dev/null +++ b/templates/sissi-translations/customization-translations/moderation-customization-translations/src/main/resources/default/commands/selfmute/self_mute_reason_en_US.ftl @@ -0,0 +1 @@ +Self mute \ No newline at end of file