diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Subscribe.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Subscribe.java new file mode 100644 index 000000000..905b8c68c --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Subscribe.java @@ -0,0 +1,64 @@ +package dev.sheldan.abstracto.modmail.commands; + +import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; +import dev.sheldan.abstracto.core.command.condition.CommandCondition; +import dev.sheldan.abstracto.core.command.config.CommandConfiguration; +import dev.sheldan.abstracto.core.command.config.HelpInfo; +import dev.sheldan.abstracto.core.command.execution.CommandContext; +import dev.sheldan.abstracto.core.command.execution.CommandResult; +import dev.sheldan.abstracto.core.config.FeatureEnum; +import dev.sheldan.abstracto.modmail.commands.condition.RequiresModMailCondition; +import dev.sheldan.abstracto.modmail.config.ModMailFeatures; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; +import dev.sheldan.abstracto.modmail.service.ModMailSubscriptionService; +import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class Subscribe extends AbstractConditionableCommand { + + @Autowired + private RequiresModMailCondition requiresModMailCondition; + + @Autowired + private ModMailThreadManagementService modMailThreadManagementService; + + @Autowired + private ModMailSubscriptionService modMailSubscriptionService; + + @Override + public CommandResult execute(CommandContext commandContext) { + ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong()); + modMailSubscriptionService.subscribeToThread(commandContext.getUserInitiatedContext().getAUserInAServer(), modMailThread); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("subscribe") + .module(ModMailModuleInterface.MODMAIL) + .parameters(new ArrayList<>()) + .help(helpInfo) + .templated(true) + .causesReaction(true) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return ModMailFeatures.MODMAIL; + } + + @Override + public List getConditions() { + List conditions = super.getConditions(); + conditions.add(requiresModMailCondition); + return conditions; + } +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/UnSubscribe.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/UnSubscribe.java new file mode 100644 index 000000000..651888527 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/UnSubscribe.java @@ -0,0 +1,64 @@ +package dev.sheldan.abstracto.modmail.commands; + +import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; +import dev.sheldan.abstracto.core.command.condition.CommandCondition; +import dev.sheldan.abstracto.core.command.config.CommandConfiguration; +import dev.sheldan.abstracto.core.command.config.HelpInfo; +import dev.sheldan.abstracto.core.command.execution.CommandContext; +import dev.sheldan.abstracto.core.command.execution.CommandResult; +import dev.sheldan.abstracto.core.config.FeatureEnum; +import dev.sheldan.abstracto.modmail.commands.condition.RequiresModMailCondition; +import dev.sheldan.abstracto.modmail.config.ModMailFeatures; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; +import dev.sheldan.abstracto.modmail.service.ModMailSubscriptionService; +import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class UnSubscribe extends AbstractConditionableCommand { + + @Autowired + private RequiresModMailCondition requiresModMailCondition; + + @Autowired + private ModMailThreadManagementService modMailThreadManagementService; + + @Autowired + private ModMailSubscriptionService modMailSubscriptionService; + + @Override + public CommandResult execute(CommandContext commandContext) { + ModMailThread modMailThread = modMailThreadManagementService.getByChannelId(commandContext.getChannel().getIdLong()); + modMailSubscriptionService.unsubscribeFromThread(commandContext.getUserInitiatedContext().getAUserInAServer(), modMailThread); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("unSubscribe") + .module(ModMailModuleInterface.MODMAIL) + .parameters(new ArrayList<>()) + .help(helpInfo) + .templated(true) + .causesReaction(true) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return ModMailFeatures.MODMAIL; + } + + @Override + public List getConditions() { + List conditions = super.getConditions(); + conditions.add(requiresModMailCondition); + return conditions; + } +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/repository/ModMailSubscriberRepository.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/repository/ModMailSubscriberRepository.java new file mode 100644 index 000000000..ea7caa480 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/repository/ModMailSubscriberRepository.java @@ -0,0 +1,16 @@ +package dev.sheldan.abstracto.modmail.repository; + +import dev.sheldan.abstracto.core.models.database.AUserInAServer; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; +import dev.sheldan.abstracto.modmail.models.database.ModMailThreadSubscriber; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface ModMailSubscriberRepository extends JpaRepository { + List findByThreadReference(ModMailThread thread); + boolean existsBySubscriberAndThreadReference(AUserInAServer aUserInAServer, ModMailThread modMailThread); + void deleteBySubscriberAndThreadReference(AUserInAServer aUserInAServer, ModMailThread modMailThread); +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailSubscriptionServiceBean.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailSubscriptionServiceBean.java new file mode 100644 index 000000000..1123d77e7 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailSubscriptionServiceBean.java @@ -0,0 +1,34 @@ +package dev.sheldan.abstracto.modmail.service; + +import dev.sheldan.abstracto.core.models.database.AUserInAServer; +import dev.sheldan.abstracto.modmail.exception.AlreadySubscribedException; +import dev.sheldan.abstracto.modmail.exception.NotSubscribedException; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; +import dev.sheldan.abstracto.modmail.service.management.ModMailSubscriberManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ModMailSubscriptionServiceBean implements ModMailSubscriptionService { + + @Autowired + private ModMailSubscriberManagementService modMailSubscriberManagementService; + + @Override + public void subscribeToThread(AUserInAServer aUserInAServer, ModMailThread modMailThread) { + if(!modMailSubscriberManagementService.isSubscribedToThread(aUserInAServer, modMailThread)){ + modMailSubscriberManagementService.createSubscriber(aUserInAServer, modMailThread); + } else { + throw new AlreadySubscribedException("The user is already subscribed to the thread."); + } + } + + @Override + public void unsubscribeFromThread(AUserInAServer aUserInAServer, ModMailThread modMailThread) { + if(modMailSubscriberManagementService.isSubscribedToThread(aUserInAServer, modMailThread)){ + modMailSubscriberManagementService.removeSubscriber(aUserInAServer, modMailThread); + } else { + throw new NotSubscribedException("The user is not subscribed to the thread."); + } + } +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java index 86541dfd5..8f6906c0d 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java @@ -10,14 +10,12 @@ import dev.sheldan.abstracto.core.service.management.ChannelManagementService; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.core.service.management.UserInServerService; import dev.sheldan.abstracto.modmail.config.ModMailFeature; -import dev.sheldan.abstracto.modmail.models.database.ModMailMessage; -import dev.sheldan.abstracto.modmail.models.database.ModMailRole; -import dev.sheldan.abstracto.modmail.models.database.ModMailThread; -import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState; +import dev.sheldan.abstracto.modmail.models.database.*; import dev.sheldan.abstracto.modmail.models.dto.ServerChoice; import dev.sheldan.abstracto.modmail.models.template.*; import dev.sheldan.abstracto.modmail.service.management.ModMailMessageManagementService; import dev.sheldan.abstracto.modmail.service.management.ModMailRoleManagementService; +import dev.sheldan.abstracto.modmail.service.management.ModMailSubscriberManagementService; import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService; import dev.sheldan.abstracto.templating.model.MessageToSend; import dev.sheldan.abstracto.templating.service.TemplateService; @@ -84,6 +82,9 @@ public class ModMailThreadServiceBean implements ModMailThreadService { @Autowired private ModMailRoleManagementService modMailRoleManagementService; + @Autowired + private ModMailSubscriberManagementService modMailSubscriberManagementService; + @Autowired private ModMailThreadServiceBean self; @@ -229,11 +230,23 @@ public class ModMailThreadServiceBean implements ModMailThreadService { .aUserInAServer(modMailThread.getUser()) .member(botService.getMemberInServer(modMailThread.getUser())) .build(); - ModMailModeratorReplyModel modMailUserReplyModel = ModMailModeratorReplyModel + + List subscribers = new ArrayList<>(); + List subscriberList = modMailSubscriberManagementService.getSubscribersForThread(modMailThread); + subscriberList.forEach(modMailThreadSubscriber -> { + FullUser subscriber = FullUser + .builder() + .aUserInAServer(modMailThreadSubscriber.getSubscriber()) + .member(botService.getMemberInServer(modMailThreadSubscriber.getSubscriber())) + .build(); + subscribers.add(subscriber); + }); + ModMailUserReplyModel modMailUserReplyModel = ModMailUserReplyModel .builder() .modMailThread(modMailThread) .postedMessage(message) .threadUser(fullUser) + .subscribers(subscribers) .build(); MessageToSend messageToSend = templateService.renderEmbedTemplate("modmail_user_message", modMailUserReplyModel); List> completableFutures = channelService.sendMessageToSendToChannel(messageToSend, textChannel); diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/management/ModMailSubscriberManagementServiceBean.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/management/ModMailSubscriberManagementServiceBean.java new file mode 100644 index 000000000..78bb3a075 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/management/ModMailSubscriberManagementServiceBean.java @@ -0,0 +1,45 @@ +package dev.sheldan.abstracto.modmail.service.management; + +import dev.sheldan.abstracto.core.models.database.AUserInAServer; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; +import dev.sheldan.abstracto.modmail.models.database.ModMailThreadSubscriber; +import dev.sheldan.abstracto.modmail.repository.ModMailSubscriberRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class ModMailSubscriberManagementServiceBean implements ModMailSubscriberManagementService { + + @Autowired + private ModMailSubscriberRepository modMailSubscriberRepository; + + @Override + public List getSubscribersForThread(ModMailThread modMailThread) { + return modMailSubscriberRepository.findByThreadReference(modMailThread); + } + + @Override + public boolean isSubscribedToThread(AUserInAServer aUserInAServer, ModMailThread modMailThread) { + return modMailSubscriberRepository.existsBySubscriberAndThreadReference(aUserInAServer, modMailThread); + } + + @Override + public ModMailThreadSubscriber createSubscriber(AUserInAServer aUserInAServer, ModMailThread modMailThread) { + + ModMailThreadSubscriber subscriber = ModMailThreadSubscriber + .builder() + .subscriber(aUserInAServer) + .threadReference(modMailThread) + .build(); + + modMailSubscriberRepository.save(subscriber); + return subscriber; + } + + @Override + public void removeSubscriber(AUserInAServer aUserInAServer, ModMailThread modMailThread) { + modMailSubscriberRepository.deleteBySubscriberAndThreadReference(aUserInAServer, modMailThread); + } +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/listener/messageReceived/modmail_user_message_embed_en_US.ftl b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/listener/messageReceived/modmail_user_message_embed_en_US.ftl index a8bd51305..156b31a3d 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/listener/messageReceived/modmail_user_message_embed_en_US.ftl +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/listener/messageReceived/modmail_user_message_embed_en_US.ftl @@ -17,4 +17,7 @@ <#if postedMessage.attachments?size gt 0> ,"imageUrl": "${postedMessage.attachments[0].proxyUrl}" + <#if subscribers?size gt 0> + ,"additionalMessage": "<#list subscribers as subscriber>${subscriber.member.asMention}<#sep>," + } \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/exception/AlreadySubscribedException.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/exception/AlreadySubscribedException.java new file mode 100644 index 000000000..6512770bb --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/exception/AlreadySubscribedException.java @@ -0,0 +1,20 @@ +package dev.sheldan.abstracto.modmail.exception; + +import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException; +import dev.sheldan.abstracto.templating.Templatable; + +public class AlreadySubscribedException extends AbstractoRunTimeException implements Templatable { + public AlreadySubscribedException(String message) { + super(message); + } + + @Override + public String getTemplateName() { + return "modmail_already_subscribed_exception"; + } + + @Override + public Object getTemplateModel() { + return new Object(); + } +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/exception/NotSubscribedException.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/exception/NotSubscribedException.java new file mode 100644 index 000000000..51891bab5 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/exception/NotSubscribedException.java @@ -0,0 +1,20 @@ +package dev.sheldan.abstracto.modmail.exception; + +import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException; +import dev.sheldan.abstracto.templating.Templatable; + +public class NotSubscribedException extends AbstractoRunTimeException implements Templatable { + public NotSubscribedException(String message) { + super(message); + } + + @Override + public String getTemplateName() { + return "modmail_not_subscribed_exception"; + } + + @Override + public Object getTemplateModel() { + return new Object(); + } +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThread.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThread.java index d5df152c4..7cf7cd376 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThread.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThread.java @@ -55,6 +55,15 @@ public class ModMailThread { @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) private List messages = new ArrayList<>(); + @OneToMany( + fetch = FetchType.LAZY, + cascade = {CascadeType.PERSIST, CascadeType.MERGE}, + orphanRemoval = true) + @JoinColumn(name = "modMailThread") + @Builder.Default + @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) + private List subscribers = new ArrayList<>(); + @Enumerated(EnumType.STRING) @Column private ModMailThreadState state; diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadState.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadState.java index 0b09e2ebb..84ed63a7a 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadState.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadState.java @@ -2,15 +2,4 @@ package dev.sheldan.abstracto.modmail.models.database; public enum ModMailThreadState { INITIAL, USER_REPLIED, MOD_REPLIED, CLOSED, CLOSING; - - public static ModMailThreadState getState(ModMailThreadState type) { - switch (type) { - case INITIAL: return ModMailThreadState.INITIAL; - case USER_REPLIED: return ModMailThreadState.USER_REPLIED; - case CLOSED: return ModMailThreadState.CLOSED; - case CLOSING: return ModMailThreadState.CLOSING; - default: - case MOD_REPLIED: return ModMailThreadState.MOD_REPLIED; - } - } } diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadSubscriber.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadSubscriber.java new file mode 100644 index 000000000..f48d53af6 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/database/ModMailThreadSubscriber.java @@ -0,0 +1,31 @@ +package dev.sheldan.abstracto.modmail.models.database; + +import dev.sheldan.abstracto.core.models.database.AUserInAServer; +import lombok.*; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +import javax.persistence.*; + +@Builder +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "modmail_subscribers") +@Cacheable +@Getter +@Setter +@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) +public class ModMailThreadSubscriber { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long subscriberId; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "modmail_message_subscriber", nullable = false) + private AUserInAServer subscriber; + + @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinColumn(name = "modMailThread", nullable = false) + private ModMailThread threadReference; +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/template/ModMailUserReplyModel.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/template/ModMailUserReplyModel.java index 3cc4b2477..2a25c54a9 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/template/ModMailUserReplyModel.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/models/template/ModMailUserReplyModel.java @@ -7,6 +7,8 @@ import lombok.Getter; import lombok.Setter; import net.dv8tion.jda.api.entities.Message; +import java.util.List; + @Getter @Setter @Builder @@ -14,4 +16,5 @@ public class ModMailUserReplyModel { private FullUser threadUser; private Message postedMessage; private ModMailThread modMailThread; + private List subscribers; } diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailSubscriptionService.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailSubscriptionService.java new file mode 100644 index 000000000..ab0845fab --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailSubscriptionService.java @@ -0,0 +1,9 @@ +package dev.sheldan.abstracto.modmail.service; + +import dev.sheldan.abstracto.core.models.database.AUserInAServer; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; + +public interface ModMailSubscriptionService { + void subscribeToThread(AUserInAServer aUserInAServer, ModMailThread modMailThread); + void unsubscribeFromThread(AUserInAServer aUserInAServer, ModMailThread modMailThread); +} diff --git a/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/service/management/ModMailSubscriberManagementService.java b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/service/management/ModMailSubscriberManagementService.java new file mode 100644 index 000000000..c4e970809 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-int/src/main/java/dev/sheldan/abstracto/modmail/service/management/ModMailSubscriberManagementService.java @@ -0,0 +1,14 @@ +package dev.sheldan.abstracto.modmail.service.management; + +import dev.sheldan.abstracto.core.models.database.AUserInAServer; +import dev.sheldan.abstracto.modmail.models.database.ModMailThread; +import dev.sheldan.abstracto.modmail.models.database.ModMailThreadSubscriber; + +import java.util.List; + +public interface ModMailSubscriberManagementService { + List getSubscribersForThread(ModMailThread modMailThread); + boolean isSubscribedToThread(AUserInAServer aUserInAServer, ModMailThread modMailThread); + ModMailThreadSubscriber createSubscriber(AUserInAServer aUserInAServer, ModMailThread modMailThread); + void removeSubscriber(AUserInAServer aUserInAServer, ModMailThread modMailThread); +} diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_description_en_US.ftl new file mode 100644 index 000000000..21df467a1 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_description_en_US.ftl @@ -0,0 +1 @@ +Subscribes to the current mod mail thread. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_long_help_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_long_help_en_US.ftl new file mode 100644 index 000000000..b0952135b --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_long_help_en_US.ftl @@ -0,0 +1 @@ +Subscribes to the current mod mail thread and pings you whenever there is a new message from the user until you un-subscribe. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_usage_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_usage_en_US.ftl new file mode 100644 index 000000000..2a9bad92d --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/subscribe/help/subscribe_usage_en_US.ftl @@ -0,0 +1 @@ +subscribe \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_description_en_US.ftl new file mode 100644 index 000000000..04ac93872 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_description_en_US.ftl @@ -0,0 +1 @@ +Un-subscribes from the current mod mail thread. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_long_help_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_long_help_en_US.ftl new file mode 100644 index 000000000..b662af032 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_long_help_en_US.ftl @@ -0,0 +1 @@ +Causes you to not be pinged in case the user sends another message to this mod mail thread. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_usage_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_usage_en_US.ftl new file mode 100644 index 000000000..635efbc09 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/modmail/unSubscribe/help/unSubscribe_usage_en_US.ftl @@ -0,0 +1 @@ +unSubscribe \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_already_subscribed_exception_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_already_subscribed_exception_en_US.ftl new file mode 100644 index 000000000..225bf97d8 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_already_subscribed_exception_en_US.ftl @@ -0,0 +1 @@ +You are already subscribed to this mod mail thread. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_not_subscribed_exception_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_not_subscribed_exception_en_US.ftl new file mode 100644 index 000000000..a189f6f5d --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_not_subscribed_exception_en_US.ftl @@ -0,0 +1 @@ +You are not subscribed to this mod mail thread. \ No newline at end of file