diff --git a/application/executable/pom.xml b/application/executable/pom.xml index 5db131c..35f08dd 100644 --- a/application/executable/pom.xml +++ b/application/executable/pom.xml @@ -191,6 +191,12 @@ ${project.version} + + dev.sheldan.oneplus.bot.application.modules + seasonal + ${project.version} + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/pom.xml b/application/oneplus-bot-modules/pom.xml index 701f078..7131f57 100644 --- a/application/oneplus-bot-modules/pom.xml +++ b/application/oneplus-bot-modules/pom.xml @@ -15,6 +15,7 @@ setup referral faq + seasonal diff --git a/application/oneplus-bot-modules/seasonal/pom.xml b/application/oneplus-bot-modules/seasonal/pom.xml new file mode 100644 index 0000000..3fda049 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/pom.xml @@ -0,0 +1,41 @@ + + + + dev.sheldan.oneplus.bot.application.modules + oneplus-bot-modules + 1.5.9-SNAPSHOT + + 4.0.0 + + seasonal + + + 8 + 8 + + + + + + maven-assembly-plugin + + + src/main/assembly/liquibase.xml + + + + + make-assembly + package + + single + + + + + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/assembly/liquibase.xml b/application/oneplus-bot-modules/seasonal/src/main/assembly/liquibase.xml new file mode 100644 index 0000000..8b4774f --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/assembly/liquibase.xml @@ -0,0 +1,18 @@ + + liquibase + + zip + + false + + + . + ${project.basedir}/src/main/resources/migrations + + **/* + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalEntertainmentFeatureDefinition.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalEntertainmentFeatureDefinition.java new file mode 100644 index 0000000..2696f0f --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalEntertainmentFeatureDefinition.java @@ -0,0 +1,24 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.config; + +import dev.sheldan.abstracto.core.command.config.ModuleDefinition; +import dev.sheldan.abstracto.core.command.config.ModuleInfo; +import org.springframework.stereotype.Component; + +@Component +public class SeasonalEntertainmentFeatureDefinition implements ModuleDefinition { + public static final String ENTERTAINMENT = "entertainment"; + + @Override + public ModuleInfo getInfo() { + return ModuleInfo + .builder() + .name(ENTERTAINMENT) + .templated(true) + .build(); + } + + @Override + public String getParentModule() { + return "default"; + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalFeatureDefinition.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalFeatureDefinition.java new file mode 100644 index 0000000..81befa1 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalFeatureDefinition.java @@ -0,0 +1,15 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.config; + +import dev.sheldan.abstracto.core.config.FeatureDefinition; +import lombok.Getter; + +@Getter +public enum SeasonalFeatureDefinition implements FeatureDefinition { + LIGHTS("lights"); + + private String key; + + SeasonalFeatureDefinition(String key) { + this.key = key; + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalProperties.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalProperties.java new file mode 100644 index 0000000..885e613 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/config/SeasonalProperties.java @@ -0,0 +1,10 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:seasonal.properties") +public class SeasonalProperties { + +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/AddRoleToLights.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/AddRoleToLights.java new file mode 100644 index 0000000..5af4fd8 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/AddRoleToLights.java @@ -0,0 +1,58 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.command; + +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.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalEntertainmentFeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalFeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.service.LightsRoleServiceBean; +import net.dv8tion.jda.api.entities.Role; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class AddRoleToLights extends AbstractConditionableCommand { + + @Autowired + private LightsRoleServiceBean lightsMemberServiceBean; + + @Override + public CommandResult execute(CommandContext commandContext) { + List parameters = commandContext.getParameters().getParameters(); + Role role = (Role) parameters.get(0); + if(!role.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } + lightsMemberServiceBean.addMemberToSeasonalLights(role); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + parameters.add(Parameter.builder().name("role").templated(true).type(Role.class).build()); + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("addRoleToLights") + .module(SeasonalEntertainmentFeatureDefinition.ENTERTAINMENT) + .templated(true) + .supportsEmbedException(true) + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureDefinition getFeature() { + return SeasonalFeatureDefinition.LIGHTS; + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/RemoveRoleFromLights.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/RemoveRoleFromLights.java new file mode 100644 index 0000000..bf94022 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/RemoveRoleFromLights.java @@ -0,0 +1,58 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.command; + +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.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalEntertainmentFeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalFeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.service.LightsRoleServiceBean; +import net.dv8tion.jda.api.entities.Role; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class RemoveRoleFromLights extends AbstractConditionableCommand { + + @Autowired + private LightsRoleServiceBean lightsMemberServiceBean; + + @Override + public CommandResult execute(CommandContext commandContext) { + List parameters = commandContext.getParameters().getParameters(); + Role role = (Role) parameters.get(0); + if(!role.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } + lightsMemberServiceBean.removeMemberFromSeasonalLights(role); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + parameters.add(Parameter.builder().name("role").templated(true).type(Role.class).build()); + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + return CommandConfiguration.builder() + .name("removeRoleFromLights") + .module(SeasonalEntertainmentFeatureDefinition.ENTERTAINMENT) + .templated(true) + .supportsEmbedException(true) + .causesReaction(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureDefinition getFeature() { + return SeasonalFeatureDefinition.LIGHTS; + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/SwitchLights.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/SwitchLights.java new file mode 100644 index 0000000..9030ba0 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/command/SwitchLights.java @@ -0,0 +1,55 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.command; + +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.FeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalEntertainmentFeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalFeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.service.LightsRoleServiceBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +@Component +public class SwitchLights extends AbstractConditionableCommand { + + @Autowired + private LightsRoleServiceBean lightsMemberServiceBean; + + @Override + public CompletableFuture executeAsync(CommandContext commandContext) { + return lightsMemberServiceBean.switchLights(commandContext.getGuild()) + .thenApply(unused -> CommandResult.fromSuccess()); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + HelpInfo helpInfo = HelpInfo + .builder() + .templated(true) + .build(); + return CommandConfiguration.builder() + .name("switchLights") + .module(SeasonalEntertainmentFeatureDefinition.ENTERTAINMENT) + .templated(true) + .async(true) + .causesReaction(true) + .supportsEmbedException(true) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureDefinition getFeature() { + return SeasonalFeatureDefinition.LIGHTS; + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/config/LightsColorConfig.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/config/LightsColorConfig.java new file mode 100644 index 0000000..2a8c24c --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/config/LightsColorConfig.java @@ -0,0 +1,17 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.config; + +import dev.sheldan.oneplus.bot.modules.seasonal.lights.models.LightsRoleColor; +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Getter +@Setter +@Configuration +@ConfigurationProperties(prefix = "abstracto.feature.lights") +public class LightsColorConfig { + private List colors; +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/config/LightsFeatureConfig.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/config/LightsFeatureConfig.java new file mode 100644 index 0000000..be32551 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/config/LightsFeatureConfig.java @@ -0,0 +1,16 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.config; + +import dev.sheldan.abstracto.core.config.FeatureConfig; +import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.oneplus.bot.modules.seasonal.config.SeasonalFeatureDefinition; +import org.springframework.stereotype.Component; + +@Component +public class LightsFeatureConfig implements FeatureConfig { + + @Override + public FeatureDefinition getFeature() { + return SeasonalFeatureDefinition.LIGHTS; + } + +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/models/LightsRoleColor.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/models/LightsRoleColor.java new file mode 100644 index 0000000..9df7cc1 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/models/LightsRoleColor.java @@ -0,0 +1,18 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.models; + +import lombok.Getter; +import lombok.Setter; + +import java.awt.*; + +@Getter +@Setter +public class LightsRoleColor { + private Integer r; + private Integer g; + private Integer b; + + public Color toColor() { + return new Color(r, g, b); + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/models/database/LightsRole.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/models/database/LightsRole.java new file mode 100644 index 0000000..e748b26 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/models/database/LightsRole.java @@ -0,0 +1,31 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.models.database; + +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.database.AServer; +import lombok.*; + +import javax.persistence.*; + +@Builder +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "lights_role") +@Getter +@Setter +@EqualsAndHashCode +public class LightsRole { + @Id + @Column(name = "id") + private Long id; + + @Getter + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "server_id", nullable = false) + private AServer server; + + @Getter + @ManyToOne(fetch = FetchType.LAZY) + @PrimaryKeyJoinColumn + private ARole role; +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/repository/LightsRoleRepository.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/repository/LightsRoleRepository.java new file mode 100644 index 0000000..a6f895a --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/repository/LightsRoleRepository.java @@ -0,0 +1,13 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.repository; + +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.models.database.LightsRole; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface LightsRoleRepository extends JpaRepository { + List findByServer(AServer server); +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/service/LightsRoleServiceBean.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/service/LightsRoleServiceBean.java new file mode 100644 index 0000000..ccbfac4 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/service/LightsRoleServiceBean.java @@ -0,0 +1,81 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.service; + +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.core.service.RoleService; +import dev.sheldan.abstracto.core.service.management.RoleManagementService; +import dev.sheldan.abstracto.core.service.management.ServerManagementService; +import dev.sheldan.abstracto.core.utils.FutureUtils; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.config.LightsColorConfig; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.models.database.LightsRole; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.service.management.LightsRoleServiceManagementBean; +import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Role; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.awt.*; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class LightsRoleServiceBean { + + @Autowired + private ServerManagementService serverManagementService; + + @Autowired + private LightsRoleServiceManagementBean serviceManagementBean; + + @Autowired + private RoleManagementService roleManagementService; + + @Autowired + private RoleService roleService; + + @Autowired + private SecureRandom secureRandom; + + @Autowired + private LightsColorConfig lightsColorConfig; + + public void addMemberToSeasonalLights(Role role) { + ARole aRole = roleManagementService.findRole(role.getIdLong()); + log.info("Adding {} to lights for guild {}.", role.getId(), role.getGuild().getId()); + serviceManagementBean.addMemberToLights(aRole); + } + + public void removeMemberFromSeasonalLights(Role role) { + ARole aRole = roleManagementService.findRole(role.getIdLong()); + log.info("Removing {} from lights for guild {}.", role.getId(), role.getGuild().getId()); + serviceManagementBean.removeMemberFromLights(aRole); + } + + public CompletableFuture switchLights(Guild guild) { + log.info("Switching lights in guild {}", guild.getIdLong()); + AServer server = serverManagementService.loadServer(guild.getIdLong()); + List lightUsers = serviceManagementBean.getLightsUserInServer(server); + List roleIds = lightUsers + .stream() + .map(lightsMember -> lightsMember.getRole().getId()) + .distinct() + .collect(Collectors.toList()); + List> futures = new ArrayList<>(); + roleIds.forEach(roleId -> { + Role foundRole = guild.getRoleById(roleId); + if(foundRole != null) { + futures.add(roleService.setRoleColorTo(foundRole, getRandomColor())); + } + }); + return FutureUtils.toSingleFutureGeneric(futures); + } + + private Color getRandomColor() { + return lightsColorConfig.getColors().get(secureRandom.nextInt(lightsColorConfig.getColors().size())).toColor(); + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/service/management/LightsRoleServiceManagementBean.java b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/service/management/LightsRoleServiceManagementBean.java new file mode 100644 index 0000000..430c649 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/java/dev/sheldan/oneplus/bot/modules/seasonal/lights/service/management/LightsRoleServiceManagementBean.java @@ -0,0 +1,37 @@ +package dev.sheldan.oneplus.bot.modules.seasonal.lights.service.management; + +import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.models.database.LightsRole; +import dev.sheldan.oneplus.bot.modules.seasonal.lights.repository.LightsRoleRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class LightsRoleServiceManagementBean { + + @Autowired + private LightsRoleRepository lightMemberRepository; + + public void addMemberToLights(ARole aRole) { + if(!lightMemberRepository.existsById(aRole.getId())) { + LightsRole member = LightsRole + .builder() + .id(aRole.getId()) + .server(aRole.getServer()) + .role(aRole) + .build(); + lightMemberRepository.save(member); + } + } + + public void removeMemberFromLights(ARole aRole) { + lightMemberRepository.deleteById(aRole.getId()); + } + + public List getLightsUserInServer(AServer server) { + return lightMemberRepository.findByServer(server); + } +} diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/collection.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/collection.xml new file mode 100644 index 0000000..4cd75ec --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/collection.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/command.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/command.xml new file mode 100644 index 0000000..ed956fe --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/command.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/data.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/data.xml new file mode 100644 index 0000000..d492a35 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/data.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/feature.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/feature.xml new file mode 100644 index 0000000..fcd3b17 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/seedData/feature.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/tables/lights_role.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/tables/lights_role.xml new file mode 100644 index 0000000..4072c27 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/tables/lights_role.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + DROP TRIGGER IF EXISTS lights_role_update_trigger ON lights_role; + CREATE TRIGGER lights_role_update_trigger BEFORE UPDATE ON lights_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure(); + + + DROP TRIGGER IF EXISTS lights_role_insert_trigger ON lights_role; + CREATE TRIGGER lights_role_insert_trigger BEFORE INSERT ON lights_role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure(); + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/tables/tables.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/tables/tables.xml new file mode 100644 index 0000000..4be4063 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/1.5.9/tables/tables.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/dbchangelog.xsd b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/dbchangelog.xsd new file mode 100644 index 0000000..83483a5 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/dbchangelog.xsd @@ -0,0 +1,1386 @@ + + + + + + + + + + + + + + Extension to standard XSD boolean type to allow ${} parameters + + + + + + + + + + + + + + + + Extension to standard XSD integer type to allow ${} parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + onChangeLogPreconditionOnSqlOutput determines what should + happen when evaluating this precondition in updateSQL mode. TEST: Run + precondition, FAIL: Fail precondition, IGNORE: Skip precondition check + [DEFAULT] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Used with valueClobFile to specify file encoding explicitly. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true for a cycling sequence, false for a non-cycling sequence. + Default is false. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/seasonal-changeLog.xml b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/seasonal-changeLog.xml new file mode 100644 index 0000000..43bbf71 --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/migrations/seasonal-changeLog.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/application/oneplus-bot-modules/seasonal/src/main/resources/seasonal.properties b/application/oneplus-bot-modules/seasonal/src/main/resources/seasonal.properties new file mode 100644 index 0000000..2e4372e --- /dev/null +++ b/application/oneplus-bot-modules/seasonal/src/main/resources/seasonal.properties @@ -0,0 +1,30 @@ +abstracto.featureFlags.lights.featureName=lights +abstracto.featureFlags.lights.enabled=false + +abstracto.feature.lights.colors[0].r=12 +abstracto.feature.lights.colors[0].g=169 +abstracto.feature.lights.colors[0].b=12 + +abstracto.feature.lights.colors[1].r=206 +abstracto.feature.lights.colors[1].g=13 +abstracto.feature.lights.colors[1].b=13 + +abstracto.feature.lights.colors[2].r=255 +abstracto.feature.lights.colors[2].g=255 +abstracto.feature.lights.colors[2].b=255 + +abstracto.feature.lights.colors[3].r=148 +abstracto.feature.lights.colors[3].g=125 +abstracto.feature.lights.colors[3].b=0 + +abstracto.feature.lights.colors[4].r=77 +abstracto.feature.lights.colors[4].g=106 +abstracto.feature.lights.colors[4].b=255 + +abstracto.feature.lights.colors[5].r=166 +abstracto.feature.lights.colors[5].g=51 +abstracto.feature.lights.colors[5].b=222 + +abstracto.feature.lights.colors[6].r=246 +abstracto.feature.lights.colors[6].g=232 +abstracto.feature.lights.colors[6].b=63 \ No newline at end of file diff --git a/deployment/image-packaging/pom.xml b/deployment/image-packaging/pom.xml index 3454cfc..ef43530 100644 --- a/deployment/image-packaging/pom.xml +++ b/deployment/image-packaging/pom.xml @@ -513,6 +513,16 @@ referral.zip + + dev.sheldan.oneplus.bot.templates.translations.modules + seasonal-translations + ${project.version} + zip + true + ${file.basedir}/deployment/translation-artifacts/ + seasonal.zip + + dev.sheldan.oneplus.bot.templates.translations.modules faq-translations @@ -834,6 +844,17 @@ faq.zip + + dev.sheldan.oneplus.bot.application.modules + seasonal + ${project.version} + liquibase + zip + true + ${file.basedir}/deployment/liquibase-artifacts/ + seasonal.zip + + dev.sheldan.oneplus.bot.application database diff --git a/deployment/image-packaging/src/main/docker/deployment/config/artifact_versions.json b/deployment/image-packaging/src/main/docker/deployment/config/artifact_versions.json index fff4e45..634fb9d 100644 --- a/deployment/image-packaging/src/main/docker/deployment/config/artifact_versions.json +++ b/deployment/image-packaging/src/main/docker/deployment/config/artifact_versions.json @@ -11,7 +11,7 @@ "voice-channel-context", "anti-raid", "starboard-custom", "dynamic-activity-custom-translations", "moderation-custom", "overrides-translation-moderation", - "news", "setup", "referral", "faq"], + "news", "setup", "referral", "faq", "seasonal"], "liquibase_artifacts": [ { "zip": "scheduling", "file": "scheduling-changeLog.xml" }, { "zip": "core", "file": "core-changeLog.xml" }, @@ -40,7 +40,8 @@ { "zip": "moderation-custom", "file": "moderation-custom-changeLog.xml"}, { "zip": "dynamic-activity-custom", "file": "dynamicActivity-custom-changeLog.xml"}, { "zip": "news", "file": "news-changeLog.xml"}, - { "zip": "faq", "file": "faq-changeLog.xml"} + { "zip": "faq", "file": "faq-changeLog.xml"}, + { "zip": "seasonal", "file": "seasonal-changeLog.xml"} ] } diff --git a/templates/translations/module-translations/pom.xml b/templates/translations/module-translations/pom.xml index 92e54c7..f1ab4cd 100644 --- a/templates/translations/module-translations/pom.xml +++ b/templates/translations/module-translations/pom.xml @@ -15,6 +15,7 @@ news-translations referral-translations setup-translations + seasonal-translations \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/pom.xml b/templates/translations/module-translations/seasonal-translations/pom.xml new file mode 100644 index 0000000..13928ce --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/pom.xml @@ -0,0 +1,38 @@ + + + + dev.sheldan.oneplus.bot.templates.translations.modules + module-translations + 1.5.9-SNAPSHOT + + 4.0.0 + + seasonal-translations + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + package + + single + + + seasonal-translations-${project.version} + false + + src/main/assembly/assembly.xml + + + + + + + + + \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/assembly/assembly.xml b/templates/translations/module-translations/seasonal-translations/src/main/assembly/assembly.xml new file mode 100644 index 0000000..aca1e51 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/assembly/assembly.xml @@ -0,0 +1,15 @@ + + zip + false + + zip + + + + . + ${project.basedir}/src/main/resources + + + \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_description_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_description_en_US.ftl new file mode 100644 index 0000000..b0e209d --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_description_en_US.ftl @@ -0,0 +1 @@ +Adds a role to the lights mechanism \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_long_help_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_long_help_en_US.ftl new file mode 100644 index 0000000..309af57 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_long_help_en_US.ftl @@ -0,0 +1 @@ +Adds this role to the mechanism which switches the colors of the defined roles to a random color, when `switchLights` is executed. \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_parameter_role_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_parameter_role_en_US.ftl new file mode 100644 index 0000000..a9f30ca --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/addRoleToLights/help/addRoleToLights_parameter_role_en_US.ftl @@ -0,0 +1 @@ +The role to add to the lights mechanism \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_description_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_description_en_US.ftl new file mode 100644 index 0000000..88e6257 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_description_en_US.ftl @@ -0,0 +1 @@ +Removes a role from the lights mechanism \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_long_help_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_long_help_en_US.ftl new file mode 100644 index 0000000..a1282ee --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_long_help_en_US.ftl @@ -0,0 +1 @@ +Removes this role from the mechanism which switches the colors of the defined roles to a random color, when `switchLights` is executed. \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_parameter_role_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_parameter_role_en_US.ftl new file mode 100644 index 0000000..8c12c09 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/removeRoleFromLights/help/removeRoleFromLights_parameter_role_en_US.ftl @@ -0,0 +1 @@ +The role to remove \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/switchLights/help/switchLights_description_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/switchLights/help/switchLights_description_en_US.ftl new file mode 100644 index 0000000..4aa7d32 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/switchLights/help/switchLights_description_en_US.ftl @@ -0,0 +1 @@ +Switches the configured roles to a random color \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/switchLights/help/switchLights_long_help_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/switchLights/help/switchLights_long_help_en_US.ftl new file mode 100644 index 0000000..7c5b244 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/commands/switchLights/help/switchLights_long_help_en_US.ftl @@ -0,0 +1 @@ +This command switches the configured roles to a completely random color. \ No newline at end of file diff --git a/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/config/feature_lights_en_US.ftl b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/config/feature_lights_en_US.ftl new file mode 100644 index 0000000..9f0b8a9 --- /dev/null +++ b/templates/translations/module-translations/seasonal-translations/src/main/resources/en_US/lights/config/feature_lights_en_US.ftl @@ -0,0 +1 @@ +Lights \ No newline at end of file