added command to remove the role from mod mail configuration again

added convenience method to disallow a whole feature for a role
This commit is contained in:
Sheldan
2020-05-08 12:11:35 +02:00
parent 4236db7a5b
commit 9fdca52005
12 changed files with 81 additions and 1 deletions

View File

@@ -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 RemoveModMailRole extends AbstractConditionableCommand {
@Autowired
private ModMailRoleService modMailRoleService;
@Override
public CommandResult execute(CommandContext commandContext) {
ARole role = (ARole) commandContext.getParameters().getParameters().get(0);
modMailRoleService.removeRoleFromModMailRoles(role, commandContext.getUserInitiatedContext().getServer());
return CommandResult.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter categoryId = Parameter.builder().name("role").type(ARole.class).description("The role to not be notified about new threads.").build();
List<Parameter> parameters = Arrays.asList(categoryId);
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
List<String> aliases = Arrays.asList("rmMmRole");
return CommandConfiguration.builder()
.name("removeModMailRole")
.module(ModMailModuleInterface.MODMAIL)
.aliases(aliases)
.parameters(parameters)
.help(helpInfo)
.templated(true)
.causesReaction(true)
.build();
}
@Override
public FeatureEnum getFeature() {
return ModMailFeatures.MODMAIL;
}
}

View File

@@ -11,6 +11,7 @@ import java.util.List;
@Repository
public interface ModMailRoleRepository extends JpaRepository<ModMailRole, Long> {
boolean existsByServerAndRole(AServer server, ARole role);
void deleteByServerAndRole(AServer server, ARole role);
List<ModMailRole> findByServer(AServer server);
}

View File

@@ -28,4 +28,10 @@ public class ModMailRoleServiceBean implements ModMailRoleService {
}
commandService.allowFeatureForRole(ModMailFeatures.MODMAIL, role);
}
@Override
public void removeRoleFromModMailRoles(ARole role, AServer server) {
modMailRoleManagementService.removeRoleFromModMailRoles(role, server);
commandService.disAllowFeatureForRole(ModMailFeatures.MODMAIL, role);
}
}

View File

@@ -25,6 +25,11 @@ public class ModMailRoleManagementServiceBean implements ModMailRoleManagementSe
modMailRoleRepository.save(roleToAdd);
}
@Override
public void removeRoleFromModMailRoles(ARole role, AServer server) {
modMailRoleRepository.deleteByServerAndRole(server, role);
}
@Override
public List<ModMailRole> getRolesForServer(AServer server) {
return modMailRoleRepository.findByServer(server);

View File

@@ -5,4 +5,5 @@ import dev.sheldan.abstracto.core.models.database.AServer;
public interface ModMailRoleService {
void addRoleToModMailRoles(ARole role, AServer server);
void removeRoleFromModMailRoles(ARole role, AServer server);
}

View File

@@ -8,6 +8,7 @@ import java.util.List;
public interface ModMailRoleManagementService {
void addRoleToModMailRoles(ARole role, AServer server);
void removeRoleFromModMailRoles(ARole role, AServer server);
List<ModMailRole> getRolesForServer(AServer server);
boolean isRoleAlreadyAssigned(ARole role, AServer server);
}

View File

@@ -97,5 +97,13 @@ public class CommandServiceBean implements CommandService {
commandForServer.getAllowedRoles().removeIf(role1 -> role1.getId().equals(role.getId()));
}
@Override
public void disAllowFeatureForRole(FeatureEnum featureEnum, ARole role) {
AFeature feature = featureManagementService.getFeature(featureEnum.getKey());
feature.getCommands().forEach(command -> {
this.disAllowCommandForRole(command, role);
});
}
}

View File

@@ -15,4 +15,5 @@ public interface CommandService {
void restrictCommand(ACommand aCommand, AServer server);
void unRestrictCommand(ACommand aCommand, AServer server);
void disAllowCommandForRole(ACommand aCommand, ARole role);
void disAllowFeatureForRole(FeatureEnum featureEnum, ARole role);
}

View File

@@ -0,0 +1 @@
Removes the role from the roles being notified when a new thread is created by an user.

View File

@@ -0,0 +1,2 @@
Removes this role from the roles being notified when a new thread is opened by a user.
This also automatically removes them from the allowed roles of all commands in the mod mail feature.

View File

@@ -1 +1 @@
Sends the given text to the user in an embed containing you as the author of the message. Only pictures as embeds are supported.
Sends the given text to the user in an embed containing you as the author of the message. Only pictures as attachments are supported.