From 0260862e8eb1e99fcd3aff73e63c402d99351f76 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sun, 17 May 2020 20:35:53 +0200 Subject: [PATCH] added command to set roles for which experience gain is disabled and separate command to remove them from the list again added command to see all roles for which experience gain is disabled --- .../commands/DisableExpForRole.java | 53 ++++++++++++++ .../experience/commands/EnableExpForRole.java | 53 ++++++++++++++ .../commands/ListDisabledExperienceRoles.java | 71 +++++++++++++++++++ .../repository/DisabledExpRoleRepository.java | 19 +++++ .../service/AUserExperienceServiceBean.java | 32 ++++++--- .../DisabledExpRoleManagementServiceBean.java | 45 ++++++++++++ ..._disabled_experience_roles_embed_en_US.ftl | 21 ++++++ .../models/database/ADisabledExpRole.java | 29 ++++++++ .../DisabledExperienceRolesModel.java | 19 +++++ .../DisabledExpRoleManagementService.java | 14 ++++ .../core/service/BotServiceBean.java | 2 - .../core/service/RoleServiceBean.java | 5 ++ .../abstracto/core/models/FullRole.java | 15 ++++ .../abstracto/core/service/RoleService.java | 1 + .../disableExpForRole_description_en_US.ftl | 1 + .../disableExpForRole_long_help_en_US.ftl | 2 + ...disableExpForRole_parameter_role_en_US.ftl | 1 + .../help/disableExpForRole_usage_en_US.ftl | 1 + .../enableExpForRole_description_en_US.ftl | 1 + .../help/enableExpForRole_long_help_en_US.ftl | 1 + .../enableExpForRole_parameter_role_en_US.ftl | 1 + .../help/enableExpForRole_usage_en_US.ftl | 1 + ...abledExperienceRoles_description_en_US.ftl | 1 + ...isabledExperienceRoles_long_help_en_US.ftl | 1 + ...istDisabledExperienceRoles_usage_en_US.ftl | 1 + ..._experience_roles_embed_no_roles_en_US.ftl | 1 + ...led_experience_roles_embed_title_en_US.ftl | 1 + 27 files changed, 380 insertions(+), 13 deletions(-) create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/DisableExpForRole.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/EnableExpForRole.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ListDisabledExperienceRoles.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/repository/DisabledExpRoleRepository.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementServiceBean.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/templates/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_en_US.ftl create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/database/ADisabledExpRole.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/templates/DisabledExperienceRolesModel.java create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementService.java create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/FullRole.java create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_description_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_long_help_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_parameter_role_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_usage_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_description_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_long_help_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_parameter_role_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_usage_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_description_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_long_help_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_usage_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_no_roles_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_title_en_US.ftl diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/DisableExpForRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/DisableExpForRole.java new file mode 100644 index 000000000..6851e0e01 --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/DisableExpForRole.java @@ -0,0 +1,53 @@ +package dev.sheldan.abstracto.experience.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.experience.config.features.ExperienceFeature; +import dev.sheldan.abstracto.experience.service.management.DisabledExpRoleManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class DisableExpForRole extends AbstractConditionableCommand { + + @Autowired + private DisabledExpRoleManagementService disabledExpRoleManagementService; + + @Override + public CommandResult execute(CommandContext commandContext) { + ARole role = (ARole) commandContext.getParameters().getParameters().get(0); + if(!disabledExpRoleManagementService.isExperienceDisabledForRole(role)) { + disabledExpRoleManagementService.setRoleToBeDisabledForExp(role); + } + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + parameters.add(Parameter.builder().name("role").templated(true).type(ARole.class).build()); + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("disableExpForRole") + .module(ExperienceModule.EXPERIENCE) + .templated(true) + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return ExperienceFeature.EXPERIENCE; + } +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/EnableExpForRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/EnableExpForRole.java new file mode 100644 index 000000000..64ea44c3d --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/EnableExpForRole.java @@ -0,0 +1,53 @@ +package dev.sheldan.abstracto.experience.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.experience.config.features.ExperienceFeature; +import dev.sheldan.abstracto.experience.service.management.DisabledExpRoleManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class EnableExpForRole extends AbstractConditionableCommand { + + @Autowired + private DisabledExpRoleManagementService disabledExpRoleManagementService; + + @Override + public CommandResult execute(CommandContext commandContext) { + ARole role = (ARole) commandContext.getParameters().getParameters().get(0); + if(disabledExpRoleManagementService.isExperienceDisabledForRole(role)) { + disabledExpRoleManagementService.removeRoleToBeDisabledForExp(role); + } + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + parameters.add(Parameter.builder().name("role").templated(true).type(ARole.class).build()); + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("enableExpForRole") + .module(ExperienceModule.EXPERIENCE) + .templated(true) + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return ExperienceFeature.EXPERIENCE; + } +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ListDisabledExperienceRoles.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ListDisabledExperienceRoles.java new file mode 100644 index 000000000..bd69a3b62 --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ListDisabledExperienceRoles.java @@ -0,0 +1,71 @@ +package dev.sheldan.abstracto.experience.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.command.execution.ContextConverter; +import dev.sheldan.abstracto.core.config.FeatureEnum; +import dev.sheldan.abstracto.core.models.FullRole; +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.service.ChannelService; +import dev.sheldan.abstracto.core.service.RoleService; +import dev.sheldan.abstracto.experience.config.features.ExperienceFeature; +import dev.sheldan.abstracto.experience.models.database.ADisabledExpRole; +import dev.sheldan.abstracto.experience.models.templates.DisabledExperienceRolesModel; +import dev.sheldan.abstracto.experience.service.management.DisabledExpRoleManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class ListDisabledExperienceRoles extends AbstractConditionableCommand { + + @Autowired + private DisabledExpRoleManagementService disabledExpRoleManagementService; + + @Autowired + private RoleService roleService; + + @Autowired + private ChannelService channelService; + + @Override + public CommandResult execute(CommandContext commandContext) { + List disabledRolesForServer = disabledExpRoleManagementService.getDisabledRolesForServer(commandContext.getUserInitiatedContext().getServer()); + DisabledExperienceRolesModel disabledExperienceRolesModel = (DisabledExperienceRolesModel) ContextConverter.fromCommandContext(commandContext, DisabledExperienceRolesModel.class); + disabledRolesForServer.forEach(aDisabledExpRole -> { + FullRole role = FullRole + .builder() + .role(aDisabledExpRole.getRole()) + .serverRole(roleService.getRoleFromGuild(aDisabledExpRole.getRole())) + .build(); + disabledExperienceRolesModel.getRoles().add(role); + }); + channelService.sendTemplateInChannel("list_disabled_experience_roles", disabledExperienceRolesModel, commandContext.getChannel()); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("listDisabledExperienceRoles") + .module(ExperienceModule.EXPERIENCE) + .templated(true) + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return ExperienceFeature.EXPERIENCE; + } +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/repository/DisabledExpRoleRepository.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/repository/DisabledExpRoleRepository.java new file mode 100644 index 000000000..14104b14c --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/repository/DisabledExpRoleRepository.java @@ -0,0 +1,19 @@ +package dev.sheldan.abstracto.experience.repository; + +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.experience.models.database.ADisabledExpRole; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DisabledExpRoleRepository extends JpaRepository { + boolean existsByRole(ARole role); + + ADisabledExpRole findByRole(ARole role); + void deleteByRole(ARole role); + + List getByRole_Server(AServer server); +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java index 1ad46f655..7d25bca04 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java @@ -2,19 +2,18 @@ package dev.sheldan.abstracto.experience.service; import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException; import dev.sheldan.abstracto.core.models.database.AChannel; +import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.BotService; import dev.sheldan.abstracto.core.service.ConfigService; import dev.sheldan.abstracto.core.service.MessageService; import dev.sheldan.abstracto.core.service.RoleService; -import dev.sheldan.abstracto.experience.models.database.LeaderBoardEntryResult; +import dev.sheldan.abstracto.experience.models.database.*; import dev.sheldan.abstracto.experience.models.LeaderBoard; import dev.sheldan.abstracto.experience.models.LeaderBoardEntry; -import dev.sheldan.abstracto.experience.models.database.AExperienceLevel; -import dev.sheldan.abstracto.experience.models.database.AExperienceRole; -import dev.sheldan.abstracto.experience.models.database.AUserExperience; import dev.sheldan.abstracto.experience.models.templates.UserSyncStatusModel; +import dev.sheldan.abstracto.experience.service.management.DisabledExpRoleManagementService; import dev.sheldan.abstracto.experience.service.management.ExperienceLevelManagementService; import dev.sheldan.abstracto.experience.service.management.ExperienceRoleManagementService; import dev.sheldan.abstracto.experience.service.management.UserExperienceManagementService; @@ -31,6 +30,7 @@ import java.time.Instant; import java.util.*; import java.util.concurrent.ExecutionException; import java.util.function.Consumer; +import java.util.stream.Collectors; @Component @Slf4j @@ -62,6 +62,9 @@ public class AUserExperienceServiceBean implements AUserExperienceService { @Autowired private TemplateService templateService; + @Autowired + private DisabledExpRoleManagementService disabledExpRoleManagementService; + @Autowired private BotService botService; @@ -149,18 +152,25 @@ public class AUserExperienceServiceBean implements AUserExperienceService { List levels = experienceLevelManagementService.getLevelConfig(); levels.sort(Comparator.comparing(AExperienceLevel::getExperienceNeeded)); List roles = experienceRoleManagementService.getExperienceRolesForServer(serverExp); + List disabledExpRoles = disabledExpRoleManagementService.getDisabledRolesForServer(serverExp); + List disabledRoles = disabledExpRoles.stream().map(ADisabledExpRole::getRole).collect(Collectors.toList()); roles.sort(Comparator.comparing(role -> role.getLevel().getLevel())); serverExp.getUsers().forEach(userInAServer -> { Integer gainedExperience = iterator.next(); gainedExperience = (int) Math.floor(gainedExperience * multiplier); - log.trace("Handling {}. The user gains {}", userInAServer.getUserReference().getId(), gainedExperience); - AUserExperience aUserExperience = userExperienceManagementService.incrementExpForUser(userInAServer, gainedExperience.longValue(), 1L); - if(!aUserExperience.getExperienceGainDisabled()) { - updateUserlevel(aUserExperience, levels); - updateUserRole(aUserExperience, roles); - userExperienceManagementService.saveUser(aUserExperience); + Member member = botService.getMemberInServer(userInAServer); + if(!roleService.hasAnyOfTheRoles(member, disabledRoles)) { + log.trace("Handling {}. The user gains {}", userInAServer.getUserReference().getId(), gainedExperience); + AUserExperience aUserExperience = userExperienceManagementService.incrementExpForUser(userInAServer, gainedExperience.longValue(), 1L); + if(!aUserExperience.getExperienceGainDisabled()) { + updateUserlevel(aUserExperience, levels); + updateUserRole(aUserExperience, roles); + userExperienceManagementService.saveUser(aUserExperience); + } else { + log.trace("Experience gain was disabled. User did not gain any experience."); + } } else { - log.trace("Experience gain was disabled. User did not gain any experience."); + log.trace("User {} has a role which makes the user unable to gain experience.", userInAServer.getUserInServerId()); } }); }); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementServiceBean.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementServiceBean.java new file mode 100644 index 000000000..ae51cc3a6 --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementServiceBean.java @@ -0,0 +1,45 @@ +package dev.sheldan.abstracto.experience.service.management; + +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.experience.models.database.ADisabledExpRole; +import dev.sheldan.abstracto.experience.repository.DisabledExpRoleRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class DisabledExpRoleManagementServiceBean implements DisabledExpRoleManagementService { + + @Autowired + private DisabledExpRoleRepository disabledExpRoleRepository; + + @Override + public ADisabledExpRole setRoleToBeDisabledForExp(ARole role) { + ADisabledExpRole newRole = ADisabledExpRole + .builder() + .role(role) + .build(); + + disabledExpRoleRepository.save(newRole); + return newRole; + } + + @Override + public void removeRoleToBeDisabledForExp(ARole role) { + disabledExpRoleRepository.deleteByRole(role); + } + + @Override + public List getDisabledRolesForServer(AServer server) { + return disabledExpRoleRepository.getByRole_Server(server); + } + + @Override + public boolean isExperienceDisabledForRole(ARole role) { + return disabledExpRoleRepository.existsByRole(role); + } + + +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/templates/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_en_US.ftl b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/templates/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_en_US.ftl new file mode 100644 index 000000000..54c1f9b0f --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/templates/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_en_US.ftl @@ -0,0 +1,21 @@ +{ + "author": { + "name": "${member.effectiveName}", + "avatar": "${member.user.effectiveAvatarUrl}" + }, + "title": { + "title": "<#include "list_disabled_experience_roles_embed_title">" + }, + "color" : { + "r": 200, + "g": 0, + "b": 255 + }, + "description": " + <#list roles as role> + ${role.role.asMention} + <#else> + <#include "list_disabled_experience_roles_embed_no_roles"> + + " +} \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/database/ADisabledExpRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/database/ADisabledExpRole.java new file mode 100644 index 000000000..25ceafa4a --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/database/ADisabledExpRole.java @@ -0,0 +1,29 @@ +package dev.sheldan.abstracto.experience.models.database; + +import dev.sheldan.abstracto.core.models.database.ARole; +import lombok.*; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +import javax.persistence.*; + +@Builder +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "disabled_experience_roles") +@Getter +@Setter +@Cacheable +@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) +public class ADisabledExpRole { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * Reference to the actual {@link ARole} being marked as disabled for experience gain. + */ + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "role_id", nullable = false) + private ARole role; +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/templates/DisabledExperienceRolesModel.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/templates/DisabledExperienceRolesModel.java new file mode 100644 index 000000000..b2e3d3418 --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/models/templates/DisabledExperienceRolesModel.java @@ -0,0 +1,19 @@ +package dev.sheldan.abstracto.experience.models.templates; + +import dev.sheldan.abstracto.core.models.FullRole; +import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@SuperBuilder +public class DisabledExperienceRolesModel extends UserInitiatedServerContext { + @Builder.Default + private List roles = new ArrayList<>(); +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementService.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementService.java new file mode 100644 index 000000000..063014ae4 --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-int/src/main/java/dev/sheldan/abstracto/experience/service/management/DisabledExpRoleManagementService.java @@ -0,0 +1,14 @@ +package dev.sheldan.abstracto.experience.service.management; + +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.experience.models.database.ADisabledExpRole; + +import java.util.List; + +public interface DisabledExpRoleManagementService { + ADisabledExpRole setRoleToBeDisabledForExp(ARole role); + void removeRoleToBeDisabledForExp(ARole role); + List getDisabledRolesForServer(AServer server); + boolean isExperienceDisabledForRole(ARole role); +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/BotServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/BotServiceBean.java index 6bf31f883..7084c4264 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/BotServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/BotServiceBean.java @@ -14,11 +14,9 @@ import net.dv8tion.jda.api.entities.Emote; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.TextChannel; -import net.dv8tion.jda.api.utils.cache.CacheFlag; import org.springframework.stereotype.Service; import javax.security.auth.login.LoginException; -import java.util.EnumSet; import java.util.Optional; import java.util.concurrent.CompletableFuture; diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java index 88b62f97a..dc96eed4c 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java @@ -87,6 +87,11 @@ public class RoleServiceBean implements RoleService { return roles.stream().map(this::getRoleFromGuild).collect(Collectors.toList()); } + @Override + public boolean hasAnyOfTheRoles(Member member, List roles) { + return member.getRoles().stream().anyMatch(role1 -> roles.stream().anyMatch(role -> role.getId() == role1.getIdLong())); + } + @Override public boolean memberHasRole(Member member, Role role) { return member.getRoles().stream().anyMatch(role1 -> role1.getIdLong() == role.getIdLong()); diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/FullRole.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/FullRole.java new file mode 100644 index 000000000..d0b680f61 --- /dev/null +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/FullRole.java @@ -0,0 +1,15 @@ +package dev.sheldan.abstracto.core.models; + +import dev.sheldan.abstracto.core.models.database.ARole; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import net.dv8tion.jda.api.entities.Role; + +@Getter +@Setter +@Builder +public class FullRole { + private ARole role; + private Role serverRole; +} diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java index 6a38635bd..d0576d75a 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java @@ -15,6 +15,7 @@ public interface RoleService { void markDeleted(Long id, AServer server); Role getRoleFromGuild(ARole role); List getRolesFromGuild(List roles); + boolean hasAnyOfTheRoles(Member member, List roles); boolean memberHasRole(Member member, Role role); boolean memberHasRole(Member member, ARole role); boolean isRoleInServer(ARole role); diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_description_en_US.ftl new file mode 100644 index 000000000..5b03b0b0b --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_description_en_US.ftl @@ -0,0 +1 @@ +Sets the role which should not gain experience. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_long_help_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_long_help_en_US.ftl new file mode 100644 index 000000000..16bd3f87f --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_long_help_en_US.ftl @@ -0,0 +1,2 @@ +Adds the given role to the roles for which the users having this role should not gain any experience. +If a member has *any* of these roles, the user will not gain experience. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_parameter_role_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_parameter_role_en_US.ftl new file mode 100644 index 000000000..0e3410add --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_parameter_role_en_US.ftl @@ -0,0 +1 @@ +The role which should not gain any experience anymore \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_usage_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_usage_en_US.ftl new file mode 100644 index 000000000..94043e504 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/disableExpForRole/help/disableExpForRole_usage_en_US.ftl @@ -0,0 +1 @@ +disableExpForRole \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_description_en_US.ftl new file mode 100644 index 000000000..ebcc05d57 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_description_en_US.ftl @@ -0,0 +1 @@ +Re-enables the experience gain for the specified role. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_long_help_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_long_help_en_US.ftl new file mode 100644 index 000000000..88bb2d27c --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_long_help_en_US.ftl @@ -0,0 +1 @@ +Enables the experience gain for the specified role. If a user has any of the roles for which experience gain is disabled, the user will not gain experience. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_parameter_role_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_parameter_role_en_US.ftl new file mode 100644 index 000000000..f20e4fb53 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_parameter_role_en_US.ftl @@ -0,0 +1 @@ +The role to re-enable experience gain for. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_usage_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_usage_en_US.ftl new file mode 100644 index 000000000..a83303129 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/enableExpForRole/help/enableExpForRole_usage_en_US.ftl @@ -0,0 +1 @@ +enableExpForRole \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_description_en_US.ftl new file mode 100644 index 000000000..e0e8904f8 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_description_en_US.ftl @@ -0,0 +1 @@ +Lists the roles for which experience gain is disabled. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_long_help_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_long_help_en_US.ftl new file mode 100644 index 000000000..8e90e5ce0 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_long_help_en_US.ftl @@ -0,0 +1 @@ +Lists all of the roles (if any) for which experience gain is disabled. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_usage_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_usage_en_US.ftl new file mode 100644 index 000000000..22ea005c7 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/help/listDisabledExperienceRoles_usage_en_US.ftl @@ -0,0 +1 @@ +listDisabledExperienceRoles \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_no_roles_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_no_roles_en_US.ftl new file mode 100644 index 000000000..b860a5157 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_no_roles_en_US.ftl @@ -0,0 +1 @@ +No roles. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_title_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_title_en_US.ftl new file mode 100644 index 000000000..3f388c718 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/experience/commands/listDisabledExperienceRoles/list_disabled_experience_roles_embed_title_en_US.ftl @@ -0,0 +1 @@ +Roles for which experience has been disabled. \ No newline at end of file