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