diff --git a/application/executable/pom.xml b/application/executable/pom.xml
index a05b144..01dd698 100644
--- a/application/executable/pom.xml
+++ b/application/executable/pom.xml
@@ -101,6 +101,12 @@
${project.version}
+
+ dev.sheldan.oneplus.bot.application.modules
+ news
+ ${project.version}
+
+
\ No newline at end of file
diff --git a/application/oneplus-bot-modules/news/pom.xml b/application/oneplus-bot-modules/news/pom.xml
new file mode 100644
index 0000000..1a6225e
--- /dev/null
+++ b/application/oneplus-bot-modules/news/pom.xml
@@ -0,0 +1,41 @@
+
+
+
+ dev.sheldan.oneplus.bot.application.modules
+ oneplus-bot-modules
+ 1.3.9-SNAPSHOT
+
+ 4.0.0
+
+ news
+
+
+ 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/news/src/main/assembly/liquibase.xml b/application/oneplus-bot-modules/news/src/main/assembly/liquibase.xml
new file mode 100644
index 0000000..8b4774f
--- /dev/null
+++ b/application/oneplus-bot-modules/news/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/news/src/main/java/dev/sheldan/oneplus/bot/modules/news/commands/News.java b/application/oneplus-bot-modules/news/src/main/java/dev/sheldan/oneplus/bot/modules/news/commands/News.java
new file mode 100644
index 0000000..de4939d
--- /dev/null
+++ b/application/oneplus-bot-modules/news/src/main/java/dev/sheldan/oneplus/bot/modules/news/commands/News.java
@@ -0,0 +1,54 @@
+package dev.sheldan.oneplus.bot.modules.news.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.config.FeatureDefinition;
+import dev.sheldan.oneplus.bot.modules.news.config.NewsFeatureDefinition;
+import dev.sheldan.oneplus.bot.modules.news.config.NewsModuleDefinition;
+import dev.sheldan.oneplus.bot.modules.news.service.NewsServiceBean;
+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 News extends AbstractConditionableCommand {
+
+ @Autowired
+ private NewsServiceBean newsServiceBean;
+
+ @Override
+ public CompletableFuture executeAsync(CommandContext commandContext) {
+ String text = (String) commandContext.getParameters().getParameters().get(0);
+ return newsServiceBean.sendNewsPost(text, commandContext.getMessage())
+ .thenApply(unused -> CommandResult.fromSuccess());
+ }
+
+ @Override
+ public CommandConfiguration getConfiguration() {
+ Parameter newsText = Parameter.builder().name("text").type(String.class).remainder(true).templated(true).build();
+ List parameters = Arrays.asList(newsText);
+ HelpInfo helpInfo = HelpInfo.builder().templated(true).hasExample(true).build();
+ return CommandConfiguration.builder()
+ .name("news")
+ .module(NewsModuleDefinition.NEWS)
+ .parameters(parameters)
+ .supportsEmbedException(true)
+ .async(true)
+ .help(helpInfo)
+ .templated(true)
+ .causesReaction(true)
+ .build();
+ }
+
+ @Override
+ public FeatureDefinition getFeature() {
+ return NewsFeatureDefinition.NEWS;
+ }
+}
diff --git a/application/oneplus-bot-modules/news/src/main/java/dev/sheldan/oneplus/bot/modules/news/commands/UpdateNews.java b/application/oneplus-bot-modules/news/src/main/java/dev/sheldan/oneplus/bot/modules/news/commands/UpdateNews.java
new file mode 100644
index 0000000..faa4a3f
--- /dev/null
+++ b/application/oneplus-bot-modules/news/src/main/java/dev/sheldan/oneplus/bot/modules/news/commands/UpdateNews.java
@@ -0,0 +1,57 @@
+package dev.sheldan.oneplus.bot.modules.news.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.config.FeatureDefinition;
+import dev.sheldan.oneplus.bot.modules.news.config.NewsFeatureDefinition;
+import dev.sheldan.oneplus.bot.modules.news.config.NewsModuleDefinition;
+import dev.sheldan.oneplus.bot.modules.news.service.NewsServiceBean;
+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 UpdateNews extends AbstractConditionableCommand {
+
+ @Autowired
+ private NewsServiceBean newsServiceBean;
+
+ @Override
+ public CompletableFuture executeAsync(CommandContext commandContext) {
+ List