mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-26 22:02:40 +00:00
added mod mail thread notification, if a user initiates a mod mail thread
added the concept of a mod mail role, these are roles being pinged when a thread is opened, and they also are able to execute mod mail related commands fixed past thread count in mod mail header added convenience method to allow a role to execute a whole feature
This commit is contained in:
@@ -60,7 +60,7 @@ public class Contact extends AbstractConditionableCommand {
|
|||||||
.aUserInAServer(user)
|
.aUserInAServer(user)
|
||||||
.member(targetUser)
|
.member(targetUser)
|
||||||
.build();
|
.build();
|
||||||
modMailThreadService.createModMailThreadForUser(fullUser, commandContext.getChannel());
|
modMailThreadService.createModMailThreadForUser(fullUser, commandContext.getChannel(), false);
|
||||||
}
|
}
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.commands;
|
||||||
|
|
||||||
|
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.FeatureEnum;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatures;
|
||||||
|
import dev.sheldan.abstracto.modmail.service.ModMailRoleService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class SetModMailRole extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModMailRoleService modMailRoleService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
|
ARole role = (ARole) commandContext.getParameters().getParameters().get(0);
|
||||||
|
modMailRoleService.addRoleToModMailRoles(role, commandContext.getUserInitiatedContext().getServer());
|
||||||
|
return CommandResult.fromSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
Parameter categoryId = Parameter.builder().name("role").type(ARole.class).description("The role to be notified by new mod mail threads").build();
|
||||||
|
List<Parameter> parameters = Arrays.asList(categoryId);
|
||||||
|
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
||||||
|
List<String> aliases = Arrays.asList("modMailRole");
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name("setModMailRole")
|
||||||
|
.module(ModMailModuleInterface.MODMAIL)
|
||||||
|
.aliases(aliases)
|
||||||
|
.parameters(parameters)
|
||||||
|
.help(helpInfo)
|
||||||
|
.templated(true)
|
||||||
|
.causesReaction(true)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureEnum getFeature() {
|
||||||
|
return ModMailFeatures.MODMAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.repository;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.modmail.models.database.ModMailRole;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface ModMailRoleRepository extends JpaRepository<ModMailRole, Long> {
|
||||||
|
boolean existsByServerAndRole(AServer server, ARole role);
|
||||||
|
|
||||||
|
List<ModMailRole> findByServer(AServer server);
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.service;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.service.CommandService;
|
||||||
|
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.modmail.config.ModMailFeatures;
|
||||||
|
import dev.sheldan.abstracto.modmail.service.management.ModMailRoleManagementService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ModMailRoleServiceBean implements ModMailRoleService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModMailRoleManagementService modMailRoleManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CommandService commandService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FeatureManagementService featureManagementService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addRoleToModMailRoles(ARole role, AServer server) {
|
||||||
|
if(!modMailRoleManagementService.isRoleAlreadyAssigned(role, server)) {
|
||||||
|
modMailRoleManagementService.addRoleToModMailRoles(role, server);
|
||||||
|
}
|
||||||
|
commandService.allowFeatureForRole(ModMailFeatures.MODMAIL, role);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,11 +11,13 @@ import dev.sheldan.abstracto.core.service.management.UserInServerManagementServi
|
|||||||
import dev.sheldan.abstracto.core.service.management.UserInServerService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerService;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeature;
|
import dev.sheldan.abstracto.modmail.config.ModMailFeature;
|
||||||
import dev.sheldan.abstracto.modmail.models.database.ModMailMessage;
|
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.ModMailThread;
|
||||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState;
|
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState;
|
||||||
import dev.sheldan.abstracto.modmail.models.dto.ServerChoice;
|
import dev.sheldan.abstracto.modmail.models.dto.ServerChoice;
|
||||||
import dev.sheldan.abstracto.modmail.models.template.*;
|
import dev.sheldan.abstracto.modmail.models.template.*;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailMessageManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailMessageManagementService;
|
||||||
|
import dev.sheldan.abstracto.modmail.service.management.ModMailRoleManagementService;
|
||||||
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
|
||||||
import dev.sheldan.abstracto.templating.model.MessageToSend;
|
import dev.sheldan.abstracto.templating.model.MessageToSend;
|
||||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||||
@@ -79,6 +81,9 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ModMailFeature modMailFeature;
|
private ModMailFeature modMailFeature;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModMailRoleManagementService modMailRoleManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ModMailThreadServiceBean self;
|
private ModMailThreadServiceBean self;
|
||||||
|
|
||||||
@@ -89,13 +94,13 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createModMailThreadForUser(FullUser aUserInAServer, MessageChannel feedBackChannel) {
|
public void createModMailThreadForUser(FullUser aUserInAServer, MessageChannel feedBackChannel, Boolean userInitiated) {
|
||||||
Long categoryId = configService.getLongValue(MODMAIL_CATEGORY, aUserInAServer.getAUserInAServer().getServerReference().getId());
|
Long categoryId = configService.getLongValue(MODMAIL_CATEGORY, aUserInAServer.getAUserInAServer().getServerReference().getId());
|
||||||
User user = aUserInAServer.getMember().getUser();
|
User user = aUserInAServer.getMember().getUser();
|
||||||
CompletableFuture<TextChannel> textChannel = channelService.createTextChannel(user.getName() + user.getDiscriminator(), aUserInAServer.getAUserInAServer().getServerReference(), categoryId);
|
CompletableFuture<TextChannel> textChannel = channelService.createTextChannel(user.getName() + user.getDiscriminator(), aUserInAServer.getAUserInAServer().getServerReference(), categoryId);
|
||||||
|
|
||||||
textChannel.thenAccept(channel -> {
|
textChannel.thenAccept(channel -> {
|
||||||
self.performModMailThreadSetup(aUserInAServer, channel);
|
self.performModMailThreadSetup(aUserInAServer, channel, userInitiated);
|
||||||
}).exceptionally(throwable -> {
|
}).exceptionally(throwable -> {
|
||||||
log.error("Failed to create mod mail thread", throwable);
|
log.error("Failed to create mod mail thread", throwable);
|
||||||
sendModMailFailure("modmail_exception_failed_to_create_mod_mail_thread", aUserInAServer.getAUserInAServer(), null, feedBackChannel, throwable);
|
sendModMailFailure("modmail_exception_failed_to_create_mod_mail_thread", aUserInAServer.getAUserInAServer(), null, feedBackChannel, throwable);
|
||||||
@@ -104,15 +109,30 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void performModMailThreadSetup(FullUser aUserInAServer, TextChannel channel) {
|
public void performModMailThreadSetup(FullUser aUserInAServer, TextChannel channel, Boolean userInitiated) {
|
||||||
createThreadObject(channel, aUserInAServer);
|
ModMailThread thread = createThreadObject(channel, aUserInAServer);
|
||||||
sendModMailHeader(channel, aUserInAServer);
|
sendModMailHeader(channel, aUserInAServer);
|
||||||
|
if(userInitiated) {
|
||||||
|
sendModMailNotification(aUserInAServer, thread);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createThreadObject(TextChannel channel, FullUser user) {
|
private void sendModMailNotification(FullUser aUserInAServer, ModMailThread thread) {
|
||||||
|
List<ModMailRole> rolesToPing = modMailRoleManagementService.getRolesForServer(thread.getServer());
|
||||||
|
ModMailNotificationModel modMailNotificationModel = ModMailNotificationModel
|
||||||
|
.builder()
|
||||||
|
.modMailThread(thread)
|
||||||
|
.threadUser(aUserInAServer)
|
||||||
|
.roles(rolesToPing)
|
||||||
|
.build();
|
||||||
|
MessageToSend messageToSend = templateService.renderEmbedTemplate("modmail_notification_message", modMailNotificationModel);
|
||||||
|
postTargetService.sendEmbedInPostTarget(messageToSend, "modmailping", thread.getServer().getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModMailThread createThreadObject(TextChannel channel, FullUser user) {
|
||||||
AChannel channel2 = channelManagementService.createChannel(channel.getIdLong(), AChannelType.TEXT, user.getAUserInAServer().getServerReference());
|
AChannel channel2 = channelManagementService.createChannel(channel.getIdLong(), AChannelType.TEXT, user.getAUserInAServer().getServerReference());
|
||||||
log.info("Creating mod mail thread in channel {} with db channel {}", channel.getIdLong(), channel2.getId());
|
log.info("Creating mod mail thread in channel {} with db channel {}", channel.getIdLong(), channel2.getId());
|
||||||
modMailThreadManagementService.createModMailThread(user.getAUserInAServer(), channel2);
|
return modMailThreadManagementService.createModMailThread(user.getAUserInAServer(), channel2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -168,7 +188,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
|
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
|
||||||
Member memberInServer = botService.getMemberInServer(chosenServer);
|
Member memberInServer = botService.getMemberInServer(chosenServer);
|
||||||
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
|
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
|
||||||
self.createModMailThreadForUser(fullUser, channel);
|
self.createModMailThreadForUser(fullUser, channel, true);
|
||||||
botService.getInstance().removeEventListener(waiter);
|
botService.getInstance().removeEventListener(waiter);
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
@@ -188,7 +208,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
.builder()
|
.builder()
|
||||||
.threadUser(aUserInAServer)
|
.threadUser(aUserInAServer)
|
||||||
.latestModMailThread(latestThread)
|
.latestModMailThread(latestThread)
|
||||||
.pastModMailThreads((long)oldThreads.size())
|
.pastModMailThreadCount((long)oldThreads.size())
|
||||||
.build();
|
.build();
|
||||||
channelService.sendTemplateInChannel("modmail_thread_header", header, channel);
|
channelService.sendTemplateInChannel("modmail_thread_header", header, channel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.service.management;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.modmail.models.database.ModMailRole;
|
||||||
|
import dev.sheldan.abstracto.modmail.repository.ModMailRoleRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ModMailRoleManagementServiceBean implements ModMailRoleManagementService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModMailRoleRepository modMailRoleRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addRoleToModMailRoles(ARole role, AServer server) {
|
||||||
|
ModMailRole roleToAdd = ModMailRole
|
||||||
|
.builder()
|
||||||
|
.role(role)
|
||||||
|
.server(server)
|
||||||
|
.build();
|
||||||
|
modMailRoleRepository.save(roleToAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModMailRole> getRolesForServer(AServer server) {
|
||||||
|
return modMailRoleRepository.findByServer(server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRoleAlreadyAssigned(ARole role, AServer server) {
|
||||||
|
return modMailRoleRepository.existsByServerAndRole(server, role);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -64,7 +64,7 @@ public class ModMailThreadManagementServiceBean implements ModMailThreadManageme
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createModMailThread(AUserInAServer userInAServer, AChannel channel) {
|
public ModMailThread createModMailThread(AUserInAServer userInAServer, AChannel channel) {
|
||||||
ModMailThread thread = ModMailThread
|
ModMailThread thread = ModMailThread
|
||||||
.builder()
|
.builder()
|
||||||
.channel(channel)
|
.channel(channel)
|
||||||
@@ -76,6 +76,7 @@ public class ModMailThreadManagementServiceBean implements ModMailThreadManageme
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
modMailThreadRepository.save(thread);
|
modMailThreadRepository.save(thread);
|
||||||
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
abstracto.postTargets.modmail=modmaillog
|
abstracto.postTargets.modmail=modmaillog,modmailping
|
||||||
abstracto.emoteNames.readReaction=readReaction
|
abstracto.emoteNames.readReaction=readReaction
|
||||||
abstracto.defaultEmotes.readReaction=\uD83D\uDC40
|
abstracto.defaultEmotes.readReaction=\uD83D\uDC40
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"author": {
|
||||||
|
"name": "${threadUser.member.effectiveName}",
|
||||||
|
"avatar": "${threadUser.member.user.effectiveAvatarUrl}"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"title": "<#include "modmail_notification_message_title">"
|
||||||
|
},
|
||||||
|
"color" : {
|
||||||
|
"r": 200,
|
||||||
|
"g": 0,
|
||||||
|
"b": 255
|
||||||
|
},
|
||||||
|
<#assign user>${threadUser.member.effectiveName}#${threadUser.member.user.discriminator}(${threadUser.member.user.id})</#assign>
|
||||||
|
"description": "<#include "modmail_notification_message_description">"
|
||||||
|
<#if roles?size gt 0>
|
||||||
|
,"additionalMessage": "<#list roles as role>${role.role.asMention}<#sep>,</#list>"
|
||||||
|
</#if>
|
||||||
|
}
|
||||||
@@ -11,6 +11,5 @@
|
|||||||
<#assign user>${threadUser.member.effectiveName}#${threadUser.member.user.discriminator} (${threadUser.member.user.id})</#assign>
|
<#assign user>${threadUser.member.effectiveName}#${threadUser.member.user.discriminator} (${threadUser.member.user.id})</#assign>
|
||||||
<#assign joinDate>${threadUser.member.timeJoined}</#assign>
|
<#assign joinDate>${threadUser.member.timeJoined}</#assign>
|
||||||
<#assign roles><#list threadUser.member.roles as role>${role.asMention}<#sep>,<#else>No roles</#list></#assign>
|
<#assign roles><#list threadUser.member.roles as role>${role.asMention}<#sep>,<#else>No roles</#list></#assign>
|
||||||
<#assign threadCount>3</#assign>
|
|
||||||
"description": "<#include "modmail_thread_header_embed_description">"
|
"description": "<#include "modmail_thread_header_embed_description">"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.models.database;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
@Entity
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Table(name = "modmail_roles")
|
||||||
|
@Cacheable
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
|
public class ModMailRole {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long modMailRoleId;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "modmail_role_server", nullable = false)
|
||||||
|
private AServer server;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "modmail_role", nullable = false)
|
||||||
|
private ARole role;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.models.template;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.FullUser;
|
||||||
|
import dev.sheldan.abstracto.core.models.context.ServerContext;
|
||||||
|
import dev.sheldan.abstracto.modmail.models.database.ModMailRole;
|
||||||
|
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@SuperBuilder
|
||||||
|
public class ModMailNotificationModel extends ServerContext {
|
||||||
|
private ModMailThread modMailThread;
|
||||||
|
private FullUser threadUser;
|
||||||
|
private List<ModMailRole> roles;
|
||||||
|
}
|
||||||
@@ -12,5 +12,5 @@ import lombok.Setter;
|
|||||||
public class ModMailThreaderHeader {
|
public class ModMailThreaderHeader {
|
||||||
private FullUser threadUser;
|
private FullUser threadUser;
|
||||||
private ModMailThread latestModMailThread;
|
private ModMailThread latestModMailThread;
|
||||||
private Long pastModMailThreads;
|
private Long pastModMailThreadCount;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.service;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
|
||||||
|
public interface ModMailRoleService {
|
||||||
|
void addRoleToModMailRoles(ARole role, AServer server);
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ import net.dv8tion.jda.api.entities.Message;
|
|||||||
import net.dv8tion.jda.api.entities.MessageChannel;
|
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||||
|
|
||||||
public interface ModMailThreadService {
|
public interface ModMailThreadService {
|
||||||
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel);
|
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel, Boolean userInitiated);
|
||||||
boolean hasOpenThread(AUserInAServer aUserInAServer);
|
boolean hasOpenThread(AUserInAServer aUserInAServer);
|
||||||
boolean hasOpenThread(AUser user);
|
boolean hasOpenThread(AUser user);
|
||||||
void setModMailCategoryTo(AServer server, Long categoryId);
|
void setModMailCategoryTo(AServer server, Long categoryId);
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.service.management;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.modmail.models.database.ModMailRole;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ModMailRoleManagementService {
|
||||||
|
void addRoleToModMailRoles(ARole role, AServer server);
|
||||||
|
List<ModMailRole> getRolesForServer(AServer server);
|
||||||
|
boolean isRoleAlreadyAssigned(ARole role, AServer server);
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ public interface ModMailThreadManagementService {
|
|||||||
ModMailThread getOpenModmailThreadForUser(AUser user);
|
ModMailThread getOpenModmailThreadForUser(AUser user);
|
||||||
List<ModMailThread> getModMailThreadForUser(AUserInAServer aUserInAServer);
|
List<ModMailThread> getModMailThreadForUser(AUserInAServer aUserInAServer);
|
||||||
ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer);
|
ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer);
|
||||||
void createModMailThread(AUserInAServer userInAServer, AChannel channel);
|
ModMailThread createModMailThread(AUserInAServer userInAServer, AChannel channel);
|
||||||
void setModMailThreadState(ModMailThread modMailThread, ModMailThreadState newState);
|
void setModMailThreadState(ModMailThread modMailThread, ModMailThreadState newState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,14 @@ public class CommandServiceBean implements CommandService {
|
|||||||
commandForServer.setRestricted(true);
|
commandForServer.setRestricted(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void allowFeatureForRole(FeatureEnum featureEnum, ARole role) {
|
||||||
|
AFeature feature = featureManagementService.getFeature(featureEnum.getKey());
|
||||||
|
feature.getCommands().forEach(command -> {
|
||||||
|
this.allowCommandForRole(command, role);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void makeRoleImmuneForCommand(ACommand aCommand, ARole role) {
|
public void makeRoleImmuneForCommand(ACommand aCommand, ARole role) {
|
||||||
ACommandInAServer commandForServer = commandInServerManagementService.getCommandForServer(aCommand, role.getServer());
|
ACommandInAServer commandForServer = commandInServerManagementService.getCommandForServer(aCommand, role.getServer());
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
|
|||||||
import dev.sheldan.abstracto.core.config.features.CoreFeatures;
|
import dev.sheldan.abstracto.core.config.features.CoreFeatures;
|
||||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -37,15 +38,16 @@ public class AllowRole extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RoleManagementService roleManagementService;
|
private RoleManagementService roleManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FeatureFlagService featureFlagService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
String name = (String) commandContext.getParameters().getParameters().get(0);
|
String name = (String) commandContext.getParameters().getParameters().get(0);
|
||||||
ARole role = (ARole) commandContext.getParameters().getParameters().get(1);
|
ARole role = (ARole) commandContext.getParameters().getParameters().get(1);
|
||||||
if(featureManagementService.featureExists(name)) {
|
if(featureManagementService.featureExists(name)) {
|
||||||
AFeature feature = featureManagementService.getFeature(name);
|
FeatureEnum featureEnum = featureFlagService.getFeatureEnum(name);
|
||||||
feature.getCommands().forEach(command ->
|
commandService.allowFeatureForRole(featureEnum, role);
|
||||||
commandService.allowCommandForRole(command, role)
|
|
||||||
);
|
|
||||||
} else if(commandManagementService.doesCommandExist(name)) {
|
} else if(commandManagementService.doesCommandExist(name)) {
|
||||||
ACommand command = commandManagementService.findCommandByName(name);
|
ACommand command = commandManagementService.findCommandByName(name);
|
||||||
commandService.allowCommandForRole(command, role);
|
commandService.allowCommandForRole(command, role);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ public interface CommandService {
|
|||||||
ACommand createCommand(String name, String moduleName, FeatureEnum featureEnum);
|
ACommand createCommand(String name, String moduleName, FeatureEnum featureEnum);
|
||||||
Boolean doesCommandExist(String name);
|
Boolean doesCommandExist(String name);
|
||||||
void allowCommandForRole(ACommand aCommand, ARole role);
|
void allowCommandForRole(ACommand aCommand, ARole role);
|
||||||
|
void allowFeatureForRole(FeatureEnum featureEnum, ARole role);
|
||||||
void makeRoleImmuneForCommand(ACommand aCommand, ARole role);
|
void makeRoleImmuneForCommand(ACommand aCommand, ARole role);
|
||||||
void makeRoleAffectedByCommand(ACommand aCommand, ARole role);
|
void makeRoleAffectedByCommand(ACommand aCommand, ARole role);
|
||||||
void restrictCommand(ACommand aCommand, AServer server);
|
void restrictCommand(ACommand aCommand, AServer server);
|
||||||
|
|||||||
@@ -46,4 +46,8 @@ public class ARole implements SnowFlake, Serializable {
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(id, server, deleted);
|
return Objects.hash(id, server, deleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAsMention() {
|
||||||
|
return "<@&" + getId() + '>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
text
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
text
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
setModMailRole <role>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
The thread concerns ${user}.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
A new mod mail thread has been opened.
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
This is a mod mail thread concerning ${user}.
|
This is a mod mail thread concerning ${user}.
|
||||||
The user has the roles ${roles} and joined on ${joinDate}
|
The user has the roles ${roles} and joined on ${joinDate}
|
||||||
There were ${threadCount} threads in the past.
|
There were ${pastModMailThreadCount} threads in the past.
|
||||||
Reference in New Issue
Block a user