diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ExpScale.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ExpScale.java new file mode 100644 index 000000000..996302968 --- /dev/null +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/commands/ExpScale.java @@ -0,0 +1,50 @@ +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.service.ConfigService; +import dev.sheldan.abstracto.experience.config.ExperienceFeatures; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class ExpScale extends AbstractConditionableCommand { + + public static final String EXP_MULTIPLIER_KEY = "expMultiplier"; + @Autowired + private ConfigService configService; + + @Override + public CommandResult execute(CommandContext commandContext) { + Double scale = (Double) commandContext.getParameters().getParameters().get(0); + configService.setDoubleValue(EXP_MULTIPLIER_KEY, commandContext.getGuild().getIdLong(), scale); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + parameters.add(Parameter.builder().name("scale").type(Double.class).build()); + HelpInfo helpInfo = HelpInfo.builder().longHelp("The new scale of experience on this server.").usage("expScale").build(); + return CommandConfiguration.builder() + .name("expScale") + .module(ExperienceModule.EXPERIENCE) + .description("Sets the experience scale of this server to this value.") + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public String getFeature() { + return ExperienceFeatures.EXPERIENCE; + } +} diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfig.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfig.java index 40f88a336..1e7ba3b3f 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfig.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfig.java @@ -12,6 +12,6 @@ import org.springframework.stereotype.Component; public class ExperienceConfig { private Integer minExp; private Integer maxExp; - private Integer multiplier; + private Integer expMultiplier; private Integer maxLvl; } \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfigListener.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfigListener.java index b335c5569..db0fba484 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfigListener.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/config/ExperienceConfigListener.java @@ -23,6 +23,6 @@ public class ExperienceConfigListener implements ServerConfigListener { log.info("Setting up experience for {}", server.getId()); service.createDoubleValueIfNotExist("minExp", server.getId(), experienceConfig.getMinExp().doubleValue()); service.createDoubleValueIfNotExist("maxExp", server.getId(), experienceConfig.getMaxExp().doubleValue()); - service.createDoubleValueIfNotExist("multiplier", server.getId(), experienceConfig.getMultiplier().doubleValue()); + service.createDoubleValueIfNotExist("expMultiplier", server.getId(), experienceConfig.getExpMultiplier().doubleValue()); } } diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceTrackerServiceBean.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceTrackerServiceBean.java index ab20a18de..86a17f4b6 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceTrackerServiceBean.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceTrackerServiceBean.java @@ -131,7 +131,7 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService { log.debug("Handling experience for server {}", serverExp.getId()); int minExp = configService.getDoubleValue("minExp", serverExp.getId()).intValue(); int maxExp = configService.getDoubleValue("maxExp", serverExp.getId()).intValue(); - Integer multiplier = configService.getDoubleValue("multiplier", serverExp.getId()).intValue(); + Integer multiplier = configService.getDoubleValue("expMultiplier", serverExp.getId()).intValue(); PrimitiveIterator.OfInt iterator = new Random().ints(serverExp.getUsers().size(), minExp, maxExp + 1).iterator(); List levels = experienceLevelManagementService.getLevelConfig(); List roles = experienceRoleManagementService.getExperienceRoleForServer(serverExp); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/experience.properties b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/experience.properties index 17251280c..d91ff8b50 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/experience.properties +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/resources/experience.properties @@ -12,5 +12,5 @@ abstracto.features.experience=true abstracto.experience.minExp=10 abstracto.experience.maxExp=25 -abstracto.experience.multiplier=1 +abstracto.experience.expMultiplier=1 abstracto.experience.maxLvl=200 \ No newline at end of file diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/SetNumber.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/SetNumber.java new file mode 100644 index 000000000..37ac6d493 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/SetNumber.java @@ -0,0 +1,50 @@ +package dev.sheldan.abstracto.core.commands.config; + +import dev.sheldan.abstracto.core.command.Command; +import dev.sheldan.abstracto.core.command.config.CommandConfiguration; +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.commands.channels.ChannelsModuleInterface; +import dev.sheldan.abstracto.core.config.AbstractoFeatures; +import dev.sheldan.abstracto.core.service.ConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +@Component +public class SetNumber implements Command { + + @Autowired + private ConfigService configService; + + @Override + public CommandResult execute(CommandContext commandContext) { + String key = (String) commandContext.getParameters().getParameters().get(0); + Double value = (Double) commandContext.getParameters().getParameters().get(1); + configService.setDoubleValue(key, commandContext.getGuild().getIdLong(), value); + + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + Parameter channelGroupName = Parameter.builder().name("key").type(String.class).description("The key to change.").build(); + Parameter channelToAdd = Parameter.builder().name("value").type(Double.class).description("The numeric value to use for the config.").build(); + List parameters = Arrays.asList(channelGroupName, channelToAdd); + return CommandConfiguration.builder() + .name("setNumber") + .module(ChannelsModuleInterface.CHANNELS) + .parameters(parameters) + .description("Used to change the config on this server.") + .causesReaction(true) + .build(); + } + + @Override + public String getFeature() { + return AbstractoFeatures.CORE; + } +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ConfigServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ConfigServiceBean.java index b903ea2af..89ea2cdeb 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ConfigServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ConfigServiceBean.java @@ -1,5 +1,6 @@ package dev.sheldan.abstracto.core.service; +import dev.sheldan.abstracto.core.exception.ConfigurationException; import dev.sheldan.abstracto.core.service.management.ConfigManagementService; import dev.sheldan.abstracto.core.models.database.AConfig; import org.springframework.beans.factory.annotation.Autowired; @@ -29,4 +30,13 @@ public class ConfigServiceBean implements ConfigService{ public void createDoubleValueIfNotExist(String name, Long serverId, Double value) { configManagementService.createIfNotExists(serverId, name, value); } + + @Override + public void setDoubleValue(String name, Long serverId, Double value) { + if(configManagementService.configExists(serverId, name)) { + configManagementService.setDoubleValue(serverId, name, value); + } else { + throw new ConfigurationException(String.format("Key %s does not exist.", name)); + } + } } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementServiceBean.java index d8c1f6ba7..794a9c458 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementServiceBean.java @@ -86,4 +86,16 @@ public class ConfigManagementServiceBean implements ConfigManagementService { return configRepository.findAConfigByServerIdAndName(serverId, name); } + @Override + public boolean configExists(Long serverId, String name) { + return loadConfig(serverId, name) != null; + } + + @Override + public void setDoubleValue(Long serverId, String name, Double value) { + AConfig config = loadConfig(serverId, name); + config.setDoubleValue(value); + configRepository.save(config); + } + } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/ConfigurationException.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/ConfigurationException.java index 4a809194c..bfc74d575 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/ConfigurationException.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/ConfigurationException.java @@ -1,6 +1,6 @@ package dev.sheldan.abstracto.core.exception; -public class ConfigurationException extends Exception { +public class ConfigurationException extends AbstractoRunTimeException { public ConfigurationException(String message) { super(message); } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ConfigService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ConfigService.java index 46fdc52f1..7a5552430 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ConfigService.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ConfigService.java @@ -4,5 +4,6 @@ public interface ConfigService { Double getDoubleValue(String name, Long serverId); Double getDoubleValue(String name, Long serverId, Double defaultValue); void createDoubleValueIfNotExist(String name, Long serverId, Double value); + void setDoubleValue(String name, Long serverId, Double value); } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementService.java index e95e0adb6..cbce18007 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementService.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/management/ConfigManagementService.java @@ -10,4 +10,6 @@ public interface ConfigManagementService { AConfig createIfNotExists(Long serverId, String name, String value); AConfig createIfNotExists(Long serverId, String name, Double value); AConfig loadConfig(Long serverId, String name); + boolean configExists(Long serverId, String name); + void setDoubleValue(Long serverId, String name, Double value); }