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