mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-23 12:05:03 +00:00
[AB-104] adding server wide member individual command cooldown and commands to set/reset this cooldown configuration on a command level
removing custom cooldown handling from payday and slots commands
This commit is contained in:
@@ -241,7 +241,13 @@ public class CommandCoolDownServiceBean implements CommandCoolDownService {
|
||||
durationInSeconds = Math.max(durationInSeconds, channelGroup.getMemberCoolDown());
|
||||
}
|
||||
}
|
||||
return Duration.ofSeconds(durationInSeconds);
|
||||
if(durationInSeconds > 0) {
|
||||
return Duration.ofSeconds(durationInSeconds);
|
||||
}
|
||||
}
|
||||
ACommandInAServer commandInServer = commandInServerManagementService.getCommandForServer(aCommand, serverIdChannelId.getServerId());
|
||||
if(commandInServer.getMemberCooldown() != null) {
|
||||
return commandInServer.getMemberCooldown();
|
||||
}
|
||||
if(commandConfiguration.getCoolDownConfig() != null) {
|
||||
return commandConfiguration.getCoolDownConfig().getMemberCoolDown();
|
||||
@@ -261,7 +267,7 @@ public class CommandCoolDownServiceBean implements CommandCoolDownService {
|
||||
}
|
||||
try {
|
||||
Duration coolDown = getServerCoolDownForCommand(command, serverId);
|
||||
if(coolDown.equals(Duration.ZERO)) {
|
||||
if(Duration.ZERO.equals(coolDown) || coolDown == null) {
|
||||
return;
|
||||
}
|
||||
log.info("Updating cooldowns for command {} in server {}.", command.getConfiguration().getName(), serverId);
|
||||
@@ -288,7 +294,7 @@ public class CommandCoolDownServiceBean implements CommandCoolDownService {
|
||||
}
|
||||
try {
|
||||
Duration coolDown = getChannelGroupCoolDownForCommand(command, serverIdChannelId);
|
||||
if(coolDown.equals(Duration.ZERO)) {
|
||||
if(Duration.ZERO.equals(coolDown) || coolDown == null) {
|
||||
return;
|
||||
}
|
||||
log.info("Updating cooldowns for command {} in server {} in channel {}.",
|
||||
@@ -358,7 +364,7 @@ public class CommandCoolDownServiceBean implements CommandCoolDownService {
|
||||
}
|
||||
try {
|
||||
Duration coolDown = getMemberCoolDownForCommand(command, serverChannelUserId.toServerChannelId());
|
||||
if(coolDown.equals(Duration.ZERO)) {
|
||||
if(Duration.ZERO.equals(coolDown) || coolDown == null) {
|
||||
return;
|
||||
}
|
||||
log.info("Updating cooldowns for command {} in server {} in channel {} for user {}.",
|
||||
|
||||
@@ -16,8 +16,6 @@ import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
|
||||
import dev.sheldan.abstracto.core.command.model.database.ACommand;
|
||||
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
|
||||
import dev.sheldan.abstracto.core.command.model.database.AModule;
|
||||
import dev.sheldan.abstracto.core.command.service.CommandRegistry;
|
||||
import dev.sheldan.abstracto.core.command.service.CommandService;
|
||||
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
|
||||
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
|
||||
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||
@@ -33,6 +31,7 @@ import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
@@ -40,6 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -209,6 +209,12 @@ public class CommandServiceBean implements CommandService {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setServerCooldownTo(String commandName, Guild guild, Duration duration) {
|
||||
ACommand aCommand = commandManagementService.findCommandByName(commandName);
|
||||
commandInServerManagementService.getCommandForServer(aCommand, guild.getIdLong()).setMemberCooldown(duration);
|
||||
}
|
||||
|
||||
private CompletableFuture<ConditionResult> checkConditions(SlashCommandInteractionEvent slashCommandInteractionEvent, Command command, List<CommandCondition> conditions) {
|
||||
if(conditions != null && !conditions.isEmpty()) {
|
||||
List<CompletableFuture<ConditionResult>> futures = new ArrayList<>();
|
||||
|
||||
@@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@@ -47,6 +48,11 @@ public class CommandInServerManagementServiceBean implements CommandInServerMana
|
||||
return repository.findByServerReferenceAndCommandReference(server, command).orElseThrow(CommandNotFoundException::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCooldownForCommandInServer(ACommand command, AServer server, Duration duration) {
|
||||
getCommandForServer(command, server).setMemberCooldown(duration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ACommandInAServer getCommandForServer(ACommand command, Long serverId) {
|
||||
return repository.findByServerReference_IdAndCommandReference(serverId, command);
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
package dev.sheldan.abstracto.core.commands.config.cooldown;
|
||||
|
||||
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.config.features.CoreFeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||
import dev.sheldan.abstracto.core.command.service.CommandService;
|
||||
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Component
|
||||
public class RemoveCommandMemberCooldown extends AbstractConditionableCommand {
|
||||
|
||||
private static final String REMOVE_COMMAND_MEMBER_COOLDOWN_COMMAND = "removeCommandMemberCooldown";
|
||||
private static final String COMMAND_NAME_PARAMETER = "commandName";
|
||||
private static final String REMOVE_COMMAND_MEMBER_COOLDOWN_RESPONSE_TEMPLATE_KEY = "removeCommandMemberCooldown_response";
|
||||
|
||||
@Autowired
|
||||
private SlashCommandParameterService slashCommandParameterService;
|
||||
|
||||
@Autowired
|
||||
private CommandService commandService;
|
||||
|
||||
@Autowired
|
||||
private InteractionService interactionService;
|
||||
|
||||
@Override
|
||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||
String commandName = slashCommandParameterService.getCommandOption(COMMAND_NAME_PARAMETER, event, String.class);
|
||||
commandService.setServerCooldownTo(commandName, event.getGuild(), null);
|
||||
return interactionService.replyEmbed(REMOVE_COMMAND_MEMBER_COOLDOWN_RESPONSE_TEMPLATE_KEY, event)
|
||||
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandConfiguration getConfiguration() {
|
||||
Parameter commandName = Parameter
|
||||
.builder()
|
||||
.name(COMMAND_NAME_PARAMETER)
|
||||
.type(String.class)
|
||||
.templated(true)
|
||||
.build();
|
||||
List<Parameter> parameters = Arrays.asList(commandName);
|
||||
HelpInfo helpInfo = HelpInfo
|
||||
.builder()
|
||||
.templated(true)
|
||||
.build();
|
||||
|
||||
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||
.builder()
|
||||
.enabled(true)
|
||||
.rootCommandName(CoreSlashCommandNames.COOLDOWN)
|
||||
.groupName("commandMember")
|
||||
.commandName("remove")
|
||||
.build();
|
||||
|
||||
return CommandConfiguration.builder()
|
||||
.name(REMOVE_COMMAND_MEMBER_COOLDOWN_COMMAND)
|
||||
.module(ConfigModuleDefinition.CONFIG)
|
||||
.parameters(parameters)
|
||||
.slashCommandConfig(slashCommandConfig)
|
||||
.templated(true)
|
||||
.supportsEmbedException(true)
|
||||
.help(helpInfo)
|
||||
.causesReaction(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return CoreFeatureDefinition.CORE_FEATURE;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package dev.sheldan.abstracto.core.commands.config.cooldown;
|
||||
|
||||
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.config.features.CoreFeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||
import dev.sheldan.abstracto.core.command.service.CommandService;
|
||||
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Component
|
||||
public class SetCommandMemberCooldown extends AbstractConditionableCommand {
|
||||
|
||||
private static final String SET_COMMAND_MEMBER_COOLDOWN = "setCommandMemberCooldown";
|
||||
private static final String COMMAND_NAME_PARAMETER = "commandName";
|
||||
private static final String COOLDOWN_DURATION_PARAMETER = "duration";
|
||||
private static final String SET_COOLDOWN_MEMBER_RESPONSE_TEMPLATE_KEY = "setCommandMemberCooldown_response";
|
||||
|
||||
@Autowired
|
||||
private CommandService commandService;
|
||||
|
||||
@Autowired
|
||||
private SlashCommandParameterService slashCommandParameterService;
|
||||
|
||||
@Autowired
|
||||
private InteractionService interactionService;
|
||||
|
||||
@Override
|
||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||
String commandName = slashCommandParameterService.getCommandOption(COMMAND_NAME_PARAMETER, event, String.class);
|
||||
String cooldownDurationString = slashCommandParameterService.getCommandOption(COOLDOWN_DURATION_PARAMETER, event, Duration.class, String.class);
|
||||
Duration duration = ParseUtils.parseDuration(cooldownDurationString);
|
||||
commandService.setServerCooldownTo(commandName, event.getGuild(), duration);
|
||||
return interactionService.replyEmbed(SET_COOLDOWN_MEMBER_RESPONSE_TEMPLATE_KEY, event)
|
||||
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandConfiguration getConfiguration() {
|
||||
Parameter commandName = Parameter
|
||||
.builder()
|
||||
.name(COMMAND_NAME_PARAMETER)
|
||||
.type(String.class)
|
||||
.templated(true)
|
||||
.build();
|
||||
Parameter cooldownDuration = Parameter
|
||||
.builder()
|
||||
.name(COOLDOWN_DURATION_PARAMETER)
|
||||
.type(Duration.class)
|
||||
.templated(true)
|
||||
.build();
|
||||
List<Parameter> parameters = Arrays.asList(commandName, cooldownDuration);
|
||||
HelpInfo helpInfo = HelpInfo
|
||||
.builder()
|
||||
.templated(true)
|
||||
.build();
|
||||
|
||||
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||
.builder()
|
||||
.enabled(true)
|
||||
.rootCommandName(CoreSlashCommandNames.COOLDOWN)
|
||||
.groupName("commandMember")
|
||||
.commandName("set")
|
||||
.build();
|
||||
|
||||
return CommandConfiguration.builder()
|
||||
.name(SET_COMMAND_MEMBER_COOLDOWN)
|
||||
.module(ConfigModuleDefinition.CONFIG)
|
||||
.parameters(parameters)
|
||||
.slashCommandConfig(slashCommandConfig)
|
||||
.templated(true)
|
||||
.supportsEmbedException(true)
|
||||
.help(helpInfo)
|
||||
.causesReaction(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return CoreFeatureDefinition.CORE_FEATURE;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd">
|
||||
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
||||
<include file="seedData/data.xml" relativeToChangelogFile="true"/>
|
||||
</databaseChangeLog>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
||||
<property name="coreFeature" value="(SELECT id FROM feature WHERE key = 'core')"/>
|
||||
<property name="configModule" value="(SELECT id FROM module WHERE name = 'config')"/>
|
||||
<changeSet author="Sheldan" id="cooldown-command" >
|
||||
<insert tableName="command">
|
||||
<column name="name" value="setCommandMemberCooldown"/>
|
||||
<column name="module_id" valueComputed="${configModule}"/>
|
||||
<column name="feature_id" valueComputed="${coreFeature}"/>
|
||||
</insert>
|
||||
<insert tableName="command">
|
||||
<column name="name" value="removeCommandMemberCooldown"/>
|
||||
<column name="module_id" valueComputed="${configModule}"/>
|
||||
<column name="feature_id" valueComputed="${coreFeature}"/>
|
||||
</insert>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
||||
<include file="command.xml" relativeToChangelogFile="true"/>
|
||||
</databaseChangeLog>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
||||
<changeSet author="Sheldan" id="command_in_server-add-server-member-cooldown">
|
||||
<addColumn tableName="command_in_server" >
|
||||
<column name="member_cooldown" type="BIGINT">
|
||||
<constraints nullable="true" />
|
||||
</column>
|
||||
</addColumn>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
||||
<include file="command_in_server.xml" relativeToChangelogFile="true"/>
|
||||
</databaseChangeLog>
|
||||
@@ -24,4 +24,5 @@
|
||||
<include file="1.3.10/collection.xml" relativeToChangelogFile="true"/>
|
||||
<include file="1.3.13/collection.xml" relativeToChangelogFile="true"/>
|
||||
<include file="1.4.0/collection.xml" relativeToChangelogFile="true"/>
|
||||
<include file="1.5.8/collection.xml" relativeToChangelogFile="true"/>
|
||||
</databaseChangeLog>
|
||||
Reference in New Issue
Block a user