diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/CommandReceivedHandler.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/CommandReceivedHandler.java index 9abb5b330..982fcc558 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/CommandReceivedHandler.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/CommandReceivedHandler.java @@ -89,7 +89,7 @@ public class CommandReceivedHandler extends ListenerAdapter { String contentStripped = event.getMessage().getContentStripped(); List parameters = Arrays.asList(contentStripped.split(" ")); UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter(contentStripped); - String commandName = parameters.get(0).substring(1); + String commandName = commandManager.getCommandName(parameters.get(0), event.getGuild().getIdLong()); foundCommand = commandManager.findCommandByParameters(commandName, unparsedParameter); Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage()); CommandContext commandContext = commandContextBuilder.parameters(parsedParameters).build(); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/service/CommandManager.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/service/CommandManager.java index 45e553869..e4b959943 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/service/CommandManager.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/service/CommandManager.java @@ -6,10 +6,11 @@ import dev.sheldan.abstracto.core.command.exception.CommandNotFound; import dev.sheldan.abstracto.core.command.exception.InsufficientParameters; import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.Parameter; -import dev.sheldan.abstracto.core.command.service.CommandRegistry; import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter; +import dev.sheldan.abstracto.core.service.ConfigService; import net.dv8tion.jda.api.entities.Message; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -22,6 +23,12 @@ public class CommandManager implements CommandRegistry { @Autowired private List commands; + @Autowired + private ConfigService configService; + + @Value("${abstracto.prefix}") + private String defaultPrefix; + @Override public Command findCommandByParameters(String name, UnParsedCommandParameter unParsedCommandParameter) { Optional commandOptional = commands.stream().filter((Command o )-> { @@ -90,6 +97,11 @@ public class CommandManager implements CommandRegistry { @Override public boolean isCommand(Message message) { - return message.getContentRaw().startsWith("!"); + return message.getContentRaw().startsWith(configService.getStringValue("prefix", message.getGuild().getIdLong(), defaultPrefix)); + } + + @Override + public String getCommandName(String input, Long serverId) { + return input.replaceFirst(configService.getStringValue("prefix", serverId, defaultPrefix), ""); } } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/SetPrefix.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/SetPrefix.java new file mode 100644 index 000000000..0a85c3579 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/SetPrefix.java @@ -0,0 +1,47 @@ +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.config.FeatureEnum; +import dev.sheldan.abstracto.core.config.features.CoreFeatures; +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 SetPrefix implements Command { + + @Autowired + private ConfigService configService; + + @Override + public CommandResult execute(CommandContext commandContext) { + String prefixValue = (String) commandContext.getParameters().getParameters().get(0); + configService.setStringValue("prefix", commandContext.getGuild().getIdLong(), prefixValue); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + Parameter newPrefixParameter = Parameter.builder().name("prefix").type(String.class).description("The new prefix to be used for this server.").build(); + List parameters = Arrays.asList(newPrefixParameter); + return CommandConfiguration.builder() + .name("setPrefix") + .module(ConfigModuleInterface.CONFIG) + .parameters(parameters) + .description("Used to change the prefix on this server.") + .causesReaction(true) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return CoreFeatures.CORE_FEATURE; + } +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/config/AbstractoConfig.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/config/AbstractoConfig.java new file mode 100644 index 000000000..cd7fbf610 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/config/AbstractoConfig.java @@ -0,0 +1,10 @@ +package dev.sheldan.abstracto.core.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:abstracto.properties") +public class AbstractoConfig { +} + diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/CoreServiceConfigListener.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/CoreServiceConfigListener.java new file mode 100644 index 000000000..2dd3c9780 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/CoreServiceConfigListener.java @@ -0,0 +1,22 @@ +package dev.sheldan.abstracto.core.listener; + +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.core.service.management.ConfigManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class CoreServiceConfigListener implements ServerConfigListener { + + @Autowired + private ConfigManagementService configManagementService; + + @Value("ยง{abstracto.prefix}") + private String prefix; + + @Override + public void updateServerConfig(AServer server) { + configManagementService.createIfNotExists(server.getId(), "prefix", prefix); + } +} 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 89ea2cdeb..8494eb615 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 @@ -26,6 +26,15 @@ public class ConfigServiceBean implements ConfigService{ return config.getDoubleValue(); } + @Override + public String getStringValue(String name, Long serverId, String defaultValue) { + AConfig config = configManagementService.loadConfig(serverId, name); + if(config == null) { + return defaultValue; + } + return config.getStringValue(); + } + @Override public void createDoubleValueIfNotExist(String name, Long serverId, Double value) { configManagementService.createIfNotExists(serverId, name, value); @@ -39,4 +48,13 @@ public class ConfigServiceBean implements ConfigService{ throw new ConfigurationException(String.format("Key %s does not exist.", name)); } } + + @Override + public void setStringValue(String name, Long serverId, String value) { + if(configManagementService.configExists(serverId, name)) { + configManagementService.setStringValue(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 87371b138..4908e774a 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 @@ -95,4 +95,10 @@ public class ConfigManagementServiceBean implements ConfigManagementService { config.setDoubleValue(value); } + @Override + public void setStringValue(Long serverId, String name, String value) { + AConfig config = loadConfig(serverId, name); + config.setStringValue(value); + } + } diff --git a/abstracto-application/core/core-impl/src/main/resources/abstracto.properties b/abstracto-application/core/core-impl/src/main/resources/abstracto.properties new file mode 100644 index 000000000..34bb7fe22 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/resources/abstracto.properties @@ -0,0 +1,6 @@ +abstracto.startup.synchronize=true + +abstracto.parameter.lowerBound=50 + +abstracto.features.core=true +abstracto.prefix=! \ No newline at end of file diff --git a/abstracto-application/core/core-impl/src/main/resources/config/application.properties b/abstracto-application/core/core-impl/src/main/resources/config/application.properties index 4a93b4d22..d30045539 100644 --- a/abstracto-application/core/core-impl/src/main/resources/config/application.properties +++ b/abstracto-application/core/core-impl/src/main/resources/config/application.properties @@ -15,8 +15,3 @@ logging.level.dev.sheldan=info spring.cache.cache-names=messages spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s -abstracto.startup.synchronize=true - -abstracto.parameter.lowerBound=50 - -abstracto.features.core=true \ No newline at end of file diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/service/CommandRegistry.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/service/CommandRegistry.java index 10586e6ce..0b17d1aaa 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/service/CommandRegistry.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/service/CommandRegistry.java @@ -14,4 +14,5 @@ public interface CommandRegistry { List getAllCommands(); List getAllCommandsFromModule(ModuleInterface module); boolean isCommand(Message message); + String getCommandName(String input, Long serverId); } 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 7a5552430..18b99ec6c 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 @@ -3,7 +3,9 @@ package dev.sheldan.abstracto.core.service; public interface ConfigService { Double getDoubleValue(String name, Long serverId); Double getDoubleValue(String name, Long serverId, Double defaultValue); + String getStringValue(String name, Long serverId, String defaultValue); void createDoubleValueIfNotExist(String name, Long serverId, Double value); void setDoubleValue(String name, Long serverId, Double value); + void setStringValue(String name, Long serverId, String 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 cbce18007..68e2c72ae 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 @@ -12,4 +12,5 @@ public interface ConfigManagementService { AConfig loadConfig(Long serverId, String name); boolean configExists(Long serverId, String name); void setDoubleValue(Long serverId, String name, Double value); + void setStringValue(Long serverId, String name, String value); }