Compare commits

...

30 Commits

Author SHA1 Message Date
Sheldan
c4e5e7a7c3 [maven-release-plugin] prepare release oneplusbot-1.3.9 2021-04-24 22:33:59 +02:00
Sheldan
3dc9f45dde [OP-xxx] updating to release versions of abstracto 2021-04-24 22:19:18 +02:00
Sheldan
9f773abd7e [OPB-13] adding logging module and customizing leave message templates 2021-04-24 16:06:10 +02:00
Sheldan
bf55064984 [OPB-12] adding news/newsupdate command and introducing mechanisms for cleanup thereof
changing templates to have the metaconfig
moving starboard custom templates
2021-04-24 01:38:59 +02:00
Sheldan
d860ad6291 [OPB-xx] creating overrides for templates containing the embed color 2021-04-16 18:03:40 +02:00
Sheldan
d563950bee [OPB-10] fixing gateway ping metric in dashboard 2021-04-11 21:11:03 +02:00
Sheldan
79bd338f45 [maven-release-plugin] prepare for next development iteration 2021-04-11 00:43:21 +02:00
Sheldan
0bb14e0657 [maven-release-plugin] prepare release oneplusbot-1.3.8 2021-04-11 00:43:16 +02:00
Sheldan
d71faa9749 [OPB-x] enabling remind module and updating to abstracto 1.2.8 2021-04-11 00:39:23 +02:00
Sheldan
e251b12dff [OPB-x] changing urban define template to remove timestamp and make link visible 2021-04-10 23:12:29 +02:00
Sheldan
4efb2470f8 [OPB-10] adding gateway ping to grafana dashboard 2021-04-08 00:40:16 +02:00
Sheldan
77065f2374 [maven-release-plugin] prepare for next development iteration 2021-04-05 02:21:08 +02:00
Sheldan
0de0bdd64b [maven-release-plugin] prepare release oneplusbot-1.3.7 2021-04-05 02:21:02 +02:00
Sheldan
e75322cda7 [OPB-9] adding overrides module
overriding urban define template
updating to abstracto 1.2.7
2021-04-05 01:32:18 +02:00
Sheldan
698d34c0e0 [OPB-8] adding oneplus bot version to docker compose
changing port forwards to be local forwards
2021-04-05 01:24:21 +02:00
Sheldan
b3fafac81f [OPB-7] adding cache stats to grafana dashboard 2021-04-05 01:20:56 +02:00
Sheldan
8de5e543c8 [maven-release-plugin] prepare for next development iteration 2021-03-29 03:35:39 +02:00
Sheldan
eb620f5309 [maven-release-plugin] prepare release oneplusbot-1.3.6 2021-03-29 03:35:33 +02:00
Sheldan
694e33da93 [OPB-x] update to abstracto release 1.2.6 2021-03-29 03:33:45 +02:00
Sheldan
af27472b09 [OPB-x] updating release pipeline 2021-03-29 01:59:23 +02:00
Sheldan
89c810c346 [maven-release-plugin] prepare for next development iteration 2021-03-29 01:56:31 +02:00
Sheldan
eb28bb6fd8 [maven-release-plugin] prepare release oneplusbot-1.3.5 2021-03-29 01:56:26 +02:00
Sheldan
fad8abe2e3 [OPB-x] updating to abstracto 1.2.5
adding webservices dependency
2021-03-29 01:45:13 +02:00
Sheldan
d25f8dc12f [maven-release-plugin] prepare for next development iteration 2021-03-24 22:32:39 +01:00
Sheldan
9190688f45 [maven-release-plugin] prepare release oneplusbot-1.3.4 2021-03-24 22:32:33 +01:00
Sheldan
b84177f062 [OPB-x] updating to abstracto 1.2.4 2021-03-24 22:30:41 +01:00
Sheldan
6985f329f8 [maven-release-plugin] prepare for next development iteration 2021-03-24 21:28:17 +01:00
Sheldan
a815f7239e [maven-release-plugin] prepare release oneplusbot-1.3.3 2021-03-24 21:28:10 +01:00
Sheldan
085e53cebc [OPB-x] updating to abstracto 1.2.3 2021-03-24 21:21:21 +01:00
Sheldan
b7a67c8a38 [maven-release-plugin] prepare for next development iteration 2021-03-24 14:54:38 +01:00
91 changed files with 3440 additions and 396 deletions

View File

@@ -34,5 +34,5 @@ jobs:
env:
REGISTRY_PREFIX: docker.pkg.github.com/sheldan/oneplusbot/
VERSION: ${{ env.version }}
ABSTRACTO_VERSION: 1.2
ABSTRACTO_VERSION: 1.2.9
ABSTRACTO_REGISTRY_PREFIX: docker.pkg.github.com/sheldan/abstracto/

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.application</groupId>
<artifactId>application</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>executable</artifactId>
@@ -80,17 +80,38 @@
<artifactId>link-embed-impl</artifactId>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>webservices-impl</artifactId>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>remind-impl</artifactId>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>starboard-impl</artifactId>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>logging-impl</artifactId>
</dependency>
<dependency>
<groupId>dev.sheldan.oneplus.bot.application.custom</groupId>
<artifactId>starboard-custom</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>dev.sheldan.oneplus.bot.application.modules</groupId>
<artifactId>news</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -16,4 +16,6 @@ log4j.logger.org.hibernate.type=trace
management.metrics.tags.application=oneplus-bot
spring.security.user.name=abstracto
spring.security.user.password=password
spring.security.user.roles=USER
spring.security.user.roles=USER
spring.application.name=OnePlusBot

View File

@@ -6,4 +6,6 @@ spring.quartz.jdbc.initialize-schema=never
management.metrics.tags.application=oneplus-bot
spring.security.user.name= ${REST_USER_NAME}
spring.security.user.password= ${REST_PASSWORD}
spring.security.user.roles=USER
spring.security.user.roles=USER
spring.application.name=OnePlusBot

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.application</groupId>
<artifactId>application</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.application.custom</groupId>
<artifactId>oneplus-bot-customizations</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.application.modules</groupId>
<artifactId>oneplus-bot-modules</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>news</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/liquibase.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,18 @@
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>liquibase</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources/migrations</directory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
</fileSets>
</assembly>

View File

@@ -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<CommandResult> 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<Parameter> 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;
}
}

View File

@@ -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<CommandResult> executeAsync(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
Long messageId = (Long) parameters.get(0);
String postText = (String) parameters.get(1);
return newsServiceBean.updateNewsPostViaId(messageId, postText, commandContext.getMessage())
.thenApply(unused -> CommandResult.fromSuccess());
}
@Override
public CommandConfiguration getConfiguration() {
Parameter newsPostId = Parameter.builder().name("newsPostId").type(Long.class).templated(true).build();
Parameter newsText = Parameter.builder().name("text").type(String.class).remainder(true).templated(true).build();
List<Parameter> parameters = Arrays.asList(newsPostId, newsText);
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("updateNews")
.module(NewsModuleDefinition.NEWS)
.parameters(parameters)
.supportsEmbedException(true)
.async(true)
.help(helpInfo)
.templated(true)
.causesReaction(true)
.build();
}
@Override
public FeatureDefinition getFeature() {
return NewsFeatureDefinition.NEWS;
}
}

View File

@@ -0,0 +1,23 @@
package dev.sheldan.oneplus.bot.modules.news.config;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class NewsFeature implements FeatureConfig {
@Override
public FeatureDefinition getFeature() {
return NewsFeatureDefinition.NEWS;
}
@Override
public List<PostTargetEnum> getRequiredPostTargets() {
return Arrays.asList(NewsPostTarget.NEWS_TARGET);
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.oneplus.bot.modules.news.config;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import lombok.Getter;
@Getter
public enum NewsFeatureDefinition implements FeatureDefinition {
NEWS("news");
private String key;
NewsFeatureDefinition(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.oneplus.bot.modules.news.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 NewsModuleDefinition implements ModuleDefinition {
public static final String NEWS = "news";
@Override
public ModuleInfo getInfo() {
return ModuleInfo.builder().name(NEWS).templated(true).build();
}
@Override
public String getParentModule() {
return "default";
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.oneplus.bot.modules.news.config;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import lombok.Getter;
@Getter
public enum NewsPostTarget implements PostTargetEnum {
NEWS_TARGET("news");
private String key;
NewsPostTarget(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,10 @@
package dev.sheldan.oneplus.bot.modules.news.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:news.properties")
public class NewsProperties {
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.oneplus.bot.modules.news.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class NewsPostLockedException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "news_post_locked_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.oneplus.bot.modules.news.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class NewsPostNotFoundException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "news_post_not_found_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,31 @@
package dev.sheldan.oneplus.bot.modules.news.job;
import dev.sheldan.oneplus.bot.modules.news.service.NewsServiceBean;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
@Slf4j
@DisallowConcurrentExecution
@Component
@PersistJobDataAfterExecution
public class NewsPostCleanupJob extends QuartzJobBean {
@Autowired
private NewsServiceBean newsServiceBean;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
try {
log.info("Executing news post cleanup job.");
newsServiceBean.cleanUpNewsPosts();
} catch (Exception exception) {
log.error("Failed to execute news post cleanup job.", exception);
}
}
}

View File

@@ -0,0 +1,31 @@
package dev.sheldan.oneplus.bot.modules.news.job;
import dev.sheldan.oneplus.bot.modules.news.service.NewsServiceBean;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
@Slf4j
@DisallowConcurrentExecution
@Component
@PersistJobDataAfterExecution
public class NewsPostLockingJob extends QuartzJobBean {
@Autowired
private NewsServiceBean newsServiceBean;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
try {
log.info("Executing news post lock job.");
newsServiceBean.lockNewsPosts();
} catch (Exception exception) {
log.error("Failed to execute news post lock job.", exception);
}
}
}

View File

@@ -0,0 +1,46 @@
package dev.sheldan.oneplus.bot.modules.news.listener;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.async.jda.AsyncMessageUpdatedListener;
import dev.sheldan.abstracto.core.models.listener.MessageUpdatedModel;
import dev.sheldan.oneplus.bot.modules.news.config.NewsFeatureDefinition;
import dev.sheldan.oneplus.bot.modules.news.model.database.NewsPost;
import dev.sheldan.oneplus.bot.modules.news.service.NewsServiceBean;
import dev.sheldan.oneplus.bot.modules.news.service.management.NewsPostManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
@Slf4j
public class NewsMessageSourceMessageUpdatedListener implements AsyncMessageUpdatedListener {
@Autowired
private NewsPostManagementServiceBean newsPostManagementServiceBean;
@Autowired
private NewsServiceBean newsServiceBean;
@Override
public DefaultListenerResult execute(MessageUpdatedModel model) {
Optional<NewsPost> existingPostOptional = newsPostManagementServiceBean.getNewsPostForSourceMessage(model.getAfter().getIdLong());
if(existingPostOptional.isPresent()) {
NewsPost newsPost = existingPostOptional.get();
if(!newsPost.isLocked()) {
newsServiceBean.updateNewsPost(newsPost, model.getAfter());
return DefaultListenerResult.PROCESSED;
} else {
log.info("Not updating news post {}, because it is locked.", newsPost.getSourceMessageId());
}
}
return DefaultListenerResult.IGNORED;
}
@Override
public FeatureDefinition getFeature() {
return NewsFeatureDefinition.NEWS;
}
}

View File

@@ -0,0 +1,18 @@
package dev.sheldan.oneplus.bot.modules.news.model;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.Role;
@Getter
@Setter
@Builder
public class NewsMessageModel {
private String messageText;
private Message message;
private Member author;
private Role newsRole;
}

View File

@@ -0,0 +1,51 @@
package dev.sheldan.oneplus.bot.modules.news.model.database;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
@Builder
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "news_post")
@Getter
@Setter
@EqualsAndHashCode
public class NewsPost {
@Id
@Column(name = "source_message_id")
private Long sourceMessageId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "server_id", nullable = false)
private AServer server;
@Column(name = "news_message_id")
private Long newsMessageId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "author_user_in_server_id", nullable = false)
private AUserInAServer author;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "source_channel_id", nullable = false)
private AChannel sourceChannel;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "news_channel_id", nullable = false)
private AChannel newsChannel;
@Column(name = "locked")
private boolean locked;
@Column(name = "created")
private Instant created;
@Column(name = "updated")
private Instant updated;
}

View File

@@ -0,0 +1,17 @@
package dev.sheldan.oneplus.bot.modules.news.repository;
import dev.sheldan.oneplus.bot.modules.news.model.database.NewsPost;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
@Repository
public interface NewsPostRepository extends JpaRepository<NewsPost, Long> {
List<NewsPost> findByCreatedLessThanAndLockedFalse(Instant date);
List<NewsPost> findByUpdatedLessThanAndLockedTrue(Instant date);
Optional<NewsPost> findByNewsMessageId(Long newsMessageId);
}

View File

@@ -0,0 +1,127 @@
package dev.sheldan.oneplus.bot.modules.news.service;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import dev.sheldan.abstracto.core.utils.FutureUtils;
import dev.sheldan.oneplus.bot.modules.news.config.NewsPostTarget;
import dev.sheldan.oneplus.bot.modules.news.exception.NewsPostLockedException;
import dev.sheldan.oneplus.bot.modules.news.model.NewsMessageModel;
import dev.sheldan.oneplus.bot.modules.news.model.database.NewsPost;
import dev.sheldan.oneplus.bot.modules.news.service.management.NewsPostManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Component
@Slf4j
public class NewsServiceBean {
@Autowired
private PostTargetService postTargetService;
@Autowired
private TemplateService templateService;
@Autowired
private NewsPostManagementServiceBean newsPostManagementServiceBean;
@Autowired
private ChannelService channelService;
@Autowired
private NewsServiceBean self;
private static final String MESSAGE_TEMPLATE_KEY = "news_post";
@Value("${abstracto.feature.news.postLockSeconds}")
private Long postLockSeconds;
@Value("${abstracto.feature.news.removalDays}")
private Long removalDays;
@Transactional
public void lockNewsPosts() {
Instant oldestDate = Instant.now().minus(postLockSeconds, ChronoUnit.SECONDS).truncatedTo(ChronoUnit.DAYS);
log.info("Locking news posts older than {}.", oldestDate);
List<NewsPost> oldPosts = newsPostManagementServiceBean.findNewsPostsOlderNotLocked(oldestDate);
log.info("Locking {} news posts.", oldPosts.size());
oldPosts.forEach(newsPost -> newsPost.setLocked(true));
}
@Transactional
public void cleanUpNewsPosts() {
Instant oldestDate = Instant.now().minus(removalDays, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
log.info("Deleting news posts older than {}.", oldestDate);
List<NewsPost> oldPosts = newsPostManagementServiceBean.findNewsPostsUpdatedOlderThanAndLocked(oldestDate);
newsPostManagementServiceBean.deleteNewsPosts(oldPosts);
}
public CompletableFuture<Message> sendNewsPost(String text, Message commandMessage) {
NewsMessageModel model = NewsMessageModel
.builder()
.messageText(text)
.message(commandMessage)
.author(commandMessage.getMember())
.build();
log.info("Sending new message post based on message {}.", commandMessage.getIdLong());
Long serverId = commandMessage.getGuild().getIdLong();
MessageToSend messageToSend = templateService.renderEmbedTemplate(MESSAGE_TEMPLATE_KEY, model, serverId);
List<CompletableFuture<Message>> messageFutures = postTargetService.sendEmbedInPostTarget(messageToSend, NewsPostTarget.NEWS_TARGET, serverId);
return FutureUtils.toSingleFutureGeneric(messageFutures)
.thenApply(unused -> {
Message createdMessage = messageFutures.get(0).join();
self.persistPost(commandMessage, createdMessage);
return createdMessage;
});
}
public CompletableFuture<Void> updateNewsPostViaId(Long postId, String postText, Message updatedMessage) {
NewsPost post = newsPostManagementServiceBean.getNewsPostForNewsMessageId(postId);
if(post.isLocked()) {
throw new NewsPostLockedException();
}
return updateNewsPostMessage(post, updatedMessage, postText);
}
public CompletableFuture<Void> updateNewsPost(NewsPost newsPost, Message updatedMessage) {
String contentStripped = updatedMessage.getContentRaw();
String command = contentStripped.split(" ")[0];
String postText = updatedMessage.getContentRaw().replaceFirst(command, "");
return updateNewsPostMessage(newsPost, updatedMessage, postText);
}
private CompletableFuture<Void> updateNewsPostMessage(NewsPost newsPost, Message updatedMessage, String postText) {
NewsMessageModel model = NewsMessageModel
.builder()
.messageText(postText)
.message(updatedMessage)
.author(updatedMessage.getMember())
.build();
Long serverId = updatedMessage.getGuild().getIdLong();
newsPost.setUpdated(Instant.now());
log.info("Updating news post {} with new content based on message from user {} in server {}.",
newsPost.getSourceMessageId(), updatedMessage.getIdLong(), updatedMessage.getGuild().getId());
MessageToSend messageToSend = templateService.renderEmbedTemplate(MESSAGE_TEMPLATE_KEY, model, serverId);
TextChannel newsChannel = channelService.getTextChannelFromServer(serverId, newsPost.getNewsChannel().getId());
return channelService.editMessageInAChannelFuture(messageToSend, newsChannel, newsPost.getNewsMessageId())
.thenApply(message -> null);
}
@Transactional
public void persistPost(Message commandMessage, Message createdMessage) {
log.info("Persisting news post with created message {} based on command message {}.", createdMessage.getIdLong(), commandMessage.getIdLong());
newsPostManagementServiceBean.createNewsPost(commandMessage, createdMessage);
}
}

View File

@@ -0,0 +1,77 @@
package dev.sheldan.oneplus.bot.modules.news.service.management;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.oneplus.bot.modules.news.exception.NewsPostNotFoundException;
import dev.sheldan.oneplus.bot.modules.news.model.database.NewsPost;
import dev.sheldan.oneplus.bot.modules.news.repository.NewsPostRepository;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.persistence.EntityManager;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
@Component
@Slf4j
public class NewsPostManagementServiceBean {
@Autowired
private NewsPostRepository newsPostRepository;
@Autowired
private EntityManager entityManager;
@Autowired
private UserInServerManagementService userInServerManagementService;
public NewsPost createNewsPost(Message commandMessage, Message createdMessage) {
AChannel sourceChannel = entityManager.getReference(AChannel.class, commandMessage.getChannel().getIdLong());
AChannel newsChannel = entityManager.getReference(AChannel.class, createdMessage.getChannel().getIdLong());
AUserInAServer author = userInServerManagementService.loadOrCreateUser(commandMessage.getMember());
NewsPost post = NewsPost
.builder()
.sourceChannel(sourceChannel)
.newsChannel(newsChannel)
.author(author)
.newsMessageId(createdMessage.getIdLong())
.sourceMessageId(commandMessage.getIdLong())
.server(author.getServerReference())
.locked(false)
.build();
log.debug("Created news post based on message {}.", createdMessage.getIdLong());
return newsPostRepository.save(post);
}
public Optional<NewsPost> getNewsPostForSourceMessage(Long sourceMessageId) {
return newsPostRepository.findById(sourceMessageId);
}
public Optional<NewsPost> getNewsPostForNewsMessageIdOptional(Long sourceMessageId) {
return newsPostRepository.findByNewsMessageId(sourceMessageId);
}
public NewsPost getNewsPostForNewsMessageId(Long sourceMessageId) {
return getNewsPostForNewsMessageIdOptional(sourceMessageId).orElseThrow(NewsPostNotFoundException::new);
}
public List<NewsPost> findNewsPostsOlderNotLocked(Instant pointInTime) {
log.debug("Checking for not locked news posts older than {}", pointInTime);
return newsPostRepository.findByCreatedLessThanAndLockedFalse(pointInTime);
}
public List<NewsPost> findNewsPostsUpdatedOlderThanAndLocked(Instant pointInTime) {
log.debug("Checking for not locked news posts updated older than {}.", pointInTime);
return newsPostRepository.findByUpdatedLessThanAndLockedTrue(pointInTime);
}
public void deleteNewsPosts(List<NewsPost> postsToDelete) {
log.info("Deleting {} news posts.", postsToDelete.size());
postsToDelete.forEach(newsPost -> log.info("Deleting news post {}", newsPost.getSourceMessageId()));
newsPostRepository.deleteAll(postsToDelete);
}
}

View File

@@ -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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../dbchangelog-3.8.xsd" >
<include file="news-tables/tables.xml" relativeToChangelogFile="true"/>
<include file="news-seedData/data.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<property name="newsFeature" value="(SELECT id FROM feature WHERE key = 'news')"/>
<property name="newsModule" value="(SELECT id FROM module WHERE name = 'news')"/>
<changeSet author="Sheldan" id="news-commands" >
<insert tableName="command">
<column name="name" value="news"/>
<column name="module_id" valueComputed="${newsModule}"/>
<column name="feature_id" valueComputed="${newsFeature}"/>
</insert>
<insert tableName="command">
<column name="name" value="updateNews"/>
<column name="module_id" valueComputed="${newsModule}"/>
<column name="feature_id" valueComputed="${newsFeature}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,13 @@
<?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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<include file="feature.xml" relativeToChangelogFile="true"/>
<include file="module.xml" relativeToChangelogFile="true"/>
<include file="command.xml" relativeToChangelogFile="true"/>
<include file="news_jobs.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,14 @@
<?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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="news_feature-insertion">
<insert tableName="feature">
<column name="key" value="news"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,14 @@
<?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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="news-module-insertion">
<insert tableName="module">
<column name="name" value="news"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,28 @@
<?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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="news-job-insert">
<insert tableName="scheduler_job">
<column name="name" value="newsLockJob"/>
<column name="group_name" value="news"/>
<column name="clazz" value="dev.sheldan.oneplus.bot.modules.news.job.NewsPostLockingJob"/>
<column name="active" value="true"/>
<column name="cron_expression" value="0 0 * * * ?"/>
<column name="recovery" value="false"/>
</insert>
<insert tableName="scheduler_job">
<column name="name" value="newsCleanupJob"/>
<column name="group_name" value="news"/>
<column name="clazz" value="dev.sheldan.oneplus.bot.modules.news.job.NewsPostCleanupJob"/>
<column name="active" value="true"/>
<column name="cron_expression" value="0 0 0 * * ?"/>
<column name="recovery" value="false"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,62 @@
<?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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="news_post-table">
<createTable tableName="news_post">
<column name="source_message_id" type="BIGINT">
<constraints nullable="true" primaryKey="true" primaryKeyName="pk_news_post"/>
</column>
<column name="source_channel_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="news_channel_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="news_message_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="locked" type="boolean">
<constraints nullable="false"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable>
<addForeignKeyConstraint baseColumnNames="source_channel_id" baseTableName="news_post" constraintName="fk_news_post_source_channel"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<addForeignKeyConstraint baseColumnNames="news_channel_id" baseTableName="news_post" constraintName="fk_news_channel"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<addForeignKeyConstraint baseColumnNames="author_user_in_server_id" baseTableName="news_post" constraintName="fk_news_post_author"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="news_post" constraintName="fk_news_post_server"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS news_post_update_trigger ON news_post;
CREATE TRIGGER repost_check_channel_group_update_trigger BEFORE UPDATE ON news_post FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS news_post_insert_trigger ON news_post;
CREATE TRIGGER repost_check_channel_group_insert_trigger BEFORE INSERT ON news_post FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet>
</databaseChangeLog>

View File

@@ -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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<include file="news_post.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -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-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro dbchangelog-3.8.xsd" >
<include file="1.3.9-news/collection.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,7 @@
abstracto.postTargets.news.name=news
abstracto.featureFlags.news.featureName=news
abstracto.featureFlags.news.enabled=false
abstracto.feature.news.removalDays=4
abstracto.feature.news.postLockSeconds=3600

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.application</groupId>
<artifactId>application</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>dev.sheldan.oneplus.bot.application.modules</groupId>
<artifactId>oneplus-bot-modules</artifactId>
<packaging>pom</packaging>
<modules>
<module>news</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>

View File

@@ -5,16 +5,17 @@
<parent>
<groupId>dev.sheldan.oneplus.bot</groupId>
<artifactId>oneplusbot</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<groupId>dev.sheldan.oneplus.bot.application</groupId>
<artifactId>application</artifactId>
<packaging>pom</packaging>
<version>1.3.2</version>
<version>1.3.9</version>
<modules>
<module>executable</module>
<module>oneplus-bot-customizations</module>
<module>oneplus-bot-modules</module>
</modules>
<dependencyManagement>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.deployment</groupId>
<artifactId>deployment</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -24,4 +24,6 @@ PGADMIN_PORT=5050
# default authentication for pg admin
PGADMIN_DEFAULT_EMAIL=sheldan@sheldan.dev
PGADMIN_DEFAULT_PASSWORD=admin
TOKEN=<INSERT TOKEN>
TOKEN=<INSERT TOKEN>
YOUTUBE_API_KEY=<INSERT KEY>
ONEPLUS_BOT_VERSION=1.3.9

View File

@@ -2,21 +2,21 @@ version: '3.7'
services:
db:
image: ${REGISTRY_PREFIX}oneplus_bot_database
image: ${REGISTRY_PREFIX}oneplus_bot_database:${ONEPLUS_BOT_VERSION}
container_name: database
restart: always
environment:
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_USER: ${DATABASE_USER}
ports:
- "${DATABASE_PORT}:5432"
- "127.0.0.1:${DATABASE_PORT}:5432"
networks:
- oneplusbot
volumes:
- db-data:/var/lib/postgresql/data
deployment_container:
container_name: deployment
image: ${REGISTRY_PREFIX}oneplus_bot_deployment
image: ${REGISTRY_PREFIX}oneplus_bot_deployment:${ONEPLUS_BOT_VERSION}
depends_on:
- db
environment:
@@ -34,7 +34,7 @@ services:
networks:
- oneplusbot
bot:
image: ${REGISTRY_PREFIX}oneplus_bot
image: ${REGISTRY_PREFIX}oneplus_bot:${ONEPLUS_BOT_VERSION}
depends_on:
- db
- deployment_container
@@ -50,10 +50,11 @@ services:
DB_NAME: ${DATABASE_NAME}
REST_USER_NAME: ${REST_USER_NAME}
REST_PASSWORD: ${REST_PASSWORD}
YOUTUBE_API_KEY: ${YOUTUBE_API_KEY}
command: sh -c "while ping -c1 deployment_container &>/dev/null; do sleep 1; done; echo 'Liquibase finished!' && ./start.sh"
ports:
- "${DEBUG_PORT}:5005"
- "${TOMCAT_PORT}:8080"
- "127.0.0.1:${DEBUG_PORT}:5005"
- "127.0.0.1:${TOMCAT_PORT}:8080"
networks:
- oneplusbot
volumes:
@@ -61,24 +62,24 @@ services:
- ./config:/config
pgadmin:
container_name: pgadmin
image: ${REGISTRY_PREFIX}oneplus_bot_pg_admin
image: ${REGISTRY_PREFIX}oneplus_bot_pg_admin:${ONEPLUS_BOT_VERSION}
depends_on:
- db
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
ports:
- "${PGADMIN_PORT}:80"
- "127.0.0.1:${PGADMIN_PORT}:80"
restart: unless-stopped
networks:
- oneplusbot
prometheus:
container_name: prometheus
image: ${REGISTRY_PREFIX}oneplus_bot_prometheus
image: ${REGISTRY_PREFIX}oneplus_bot_prometheus:${ONEPLUS_BOT_VERSION}
depends_on:
- bot
ports:
- "${PROMETHEUS_PORT}:9090"
- "127.0.0.1:${PROMETHEUS_PORT}:9090"
restart: unless-stopped
networks:
- oneplusbot
@@ -87,12 +88,12 @@ services:
- prometheus-data:/prometheus
grafana:
container_name: grafana
image: ${REGISTRY_PREFIX}oneplus_bot_grafana
image: ${REGISTRY_PREFIX}oneplus_bot_grafana:${ONEPLUS_BOT_VERSION}
depends_on:
- prometheus
- bot
ports:
- "${GRAFANA_PORT}:3000"
- "127.0.0.1:${GRAFANA_PORT}:3000"
restart: unless-stopped
volumes:
- grafana-user-data:/var/lib/grafana

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.deployment</groupId>
<artifactId>deployment</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -89,6 +89,36 @@
<destFileName>utility.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.templates</groupId>
<artifactId>webservices</artifactId>
<version>${abstracto.templates.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>webservices.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.templates</groupId>
<artifactId>remind</artifactId>
<version>${abstracto.templates.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>remind.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.templates</groupId>
<artifactId>logging</artifactId>
<version>${abstracto.templates.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>logging.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.modules</groupId>
<artifactId>starboard-custom-templates</artifactId>
@@ -99,6 +129,16 @@
<destFileName>starboard-custom.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.modules</groupId>
<artifactId>news-templates</artifactId>
<version>${project.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>news.zip</destFileName>
</artifactItem>
<!-- translation artefacts -->
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.translations</groupId>
@@ -145,6 +185,7 @@
<outputDirectory>${file.basedir}/deployment/translation-artifacts/</outputDirectory>
<destFileName>starboard.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.translations</groupId>
<artifactId>utility</artifactId>
@@ -155,6 +196,36 @@
<destFileName>utility.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.translations</groupId>
<artifactId>webservices</artifactId>
<version>${abstracto.templates.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/translation-artifacts/</outputDirectory>
<destFileName>webservices.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.translations</groupId>
<artifactId>remind</artifactId>
<version>${abstracto.templates.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/translation-artifacts/</outputDirectory>
<destFileName>remind.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto-templates.translations</groupId>
<artifactId>logging</artifactId>
<version>${abstracto.templates.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/translation-artifacts/</outputDirectory>
<destFileName>logging.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.translations</groupId>
<artifactId>starboard-custom</artifactId>
@@ -165,6 +236,17 @@
<destFileName>starboard-custom.zip</destFileName>
</artifactItem>
<!-- custom -->
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.translations</groupId>
<artifactId>news-translations</artifactId>
<version>${project.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/translation-artifacts/</outputDirectory>
<destFileName>news.zip</destFileName>
</artifactItem>
<!-- liquibase artifacts -->
<artifactItem>
<groupId>dev.sheldan.abstracto.scheduling</groupId>
@@ -244,6 +326,40 @@
<destFileName>utility.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>webservices-impl</artifactId>
<version>${abstracto.version}</version>
<classifier>liquibase</classifier>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/liquibase-artifacts/</outputDirectory>
<destFileName>webservices.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>remind-impl</artifactId>
<version>${abstracto.version}</version>
<classifier>liquibase</classifier>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/liquibase-artifacts/</outputDirectory>
<destFileName>remind.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>logging-impl</artifactId>
<version>${abstracto.version}</version>
<classifier>liquibase</classifier>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/liquibase-artifacts/</outputDirectory>
<destFileName>logging.zip</destFileName>
</artifactItem>
<!-- customizations -->
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.application.custom</groupId>
<artifactId>starboard-custom</artifactId>
@@ -255,6 +371,49 @@
<destFileName>starboard-custom.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.application.modules</groupId>
<artifactId>news</artifactId>
<version>${project.version}</version>
<classifier>liquibase</classifier>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/liquibase-artifacts/</outputDirectory>
<destFileName>news.zip</destFileName>
</artifactItem>
<!-- overrides -->
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<artifactId>core</artifactId>
<version>${project.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>overrides-templates-core.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<artifactId>webservices</artifactId>
<version>${project.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>overrides-templates-webservices.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<artifactId>logging</artifactId>
<version>${project.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/deployment/template-artifacts/</outputDirectory>
<destFileName>overrides-templates-logging.zip</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</plugin>

View File

@@ -1,6 +1,6 @@
ARG ABSTRACTO_REGISTRY_PREFIX=
ARG ABSTRACTO_REGISTRY_PREFIX
ARG ABSTRACTO_VERSION=latest
FROM ${ABSTRACTO_REGISTRY_PREFIX}abstracto_deployment:${ABSTRACTO_VERSION}
FROM ${ABSTRACTO_REGISTRY_PREFIX}abstracto_deployment:${ABSTRACTO_VERSION:-latest}
MAINTAINER Sheldan
ADD template-artifacts /templates
ADD translation-artifacts /translations

View File

@@ -1,14 +1,20 @@
{
"template_artifacts": ["utility", "core", "entertainment", "starboard", "link-embed", "starboard-custom"],
"translation_artifacts": ["utility", "core", "entertainment", "starboard", "link-embed", "starboard-custom"],
"template_artifacts": ["utility", "core", "entertainment", "starboard", "link-embed", "webservices", "remind", "logging",
"starboard-custom", "overrides-templates-webservices", "overrides-templates-core", "overrides-templates-logging", "news"],
"translation_artifacts": ["utility", "core", "entertainment", "starboard", "link-embed", "webservices",
"remind", "logging", "starboard-custom", "news"],
"liquibase_artifacts": [
{ "zip": "scheduling", "file": "scheduling-changeLog.xml" },
{ "zip": "core", "file": "core-changeLog.xml" },
{ "zip": "utility", "file": "utility-changeLog.xml"},
{ "zip": "entertainment", "file": "entertainment-changeLog.xml"},
{ "zip": "link-embed", "file": "link-embed-changeLog.xml"},
{ "zip": "webservices", "file": "webservices-changeLog.xml"},
{ "zip": "starboard", "file": "starboard-changeLog.xml"},
{ "zip": "starboard-custom", "file": "starboard-custom-changeLog.xml"}
{ "zip": "remind", "file": "remind-changeLog.xml"},
{ "zip": "logging", "file": "logging-changeLog.xml"},
{ "zip": "starboard-custom", "file": "starboard-custom-changeLog.xml"},
{ "zip": "news", "file": "news-changeLog.xml"}
]
}

View File

@@ -11,7 +11,7 @@ scrape_configs:
scheme: http
static_configs:
- targets:
- 172.17.0.1:8080
- oneplusbot:8080
basic_auth:
username: "abstracto"
password_file: /etc/prometheus/micrometer_password

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>oneplusbot</artifactId>
<groupId>dev.sheldan.oneplus.bot</groupId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>

10
pom.xml
View File

@@ -12,13 +12,15 @@
<groupId>dev.sheldan.oneplus.bot</groupId>
<artifactId>oneplusbot</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<abstracto.version>1.2.2</abstracto.version>
<abstracto.templates.version>1.2.1</abstracto.templates.version>
<!-- edit in release.yml as well -->
<!-- when releasing a new opbot version, update the docker-compose as well-->
<abstracto.version>1.2.9</abstracto.version>
<abstracto.templates.version>1.2.5</abstracto.templates.version>
</properties>
<modules>
@@ -54,7 +56,7 @@
<scm>
<url>https://maven.pkg.github.com/Sheldan/OnePlusBot</url>
<developerConnection>scm:git:git@github.com:Sheldan/OnePlusBot.git</developerConnection>
<tag>oneplusbot-1.3.2</tag>
<tag>oneplusbot-1.3.9</tag>
</scm>
</project>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.modules</groupId>
<artifactId>oneplus-bot-modules-templates</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>news-templates</artifactId>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>starboard-custom-templates-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,12 @@
{
<#assign roleMention="<@&823285857515470868>"/>
<#assign authorMention>${author.user.name}#${author.user.discriminator}</#assign>
"additionalMessage": "<@safe_include "news_post_description"/>",
<#if message.attachments?size gt 0>
"imageUrl": "${message.attachments[0].proxyUrl}",
</#if>
"metaConfig": {
"allowsRoleMention": true,
"preventEmptyEmbed": true
}
}

View File

@@ -0,0 +1 @@
<#include "news_post_locked_exception_message">

View File

@@ -0,0 +1 @@
<#include "news_post_not_found_exception_text">

View File

@@ -3,16 +3,17 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.templates</groupId>
<artifactId>templates</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>dev.sheldan.oneplus.bot.templates.modules</groupId>
<artifactId>oneplus-bot-modules</artifactId>
<artifactId>oneplus-bot-modules-templates</artifactId>
<packaging>pom</packaging>
<version>1.3.2</version>
<version>1.3.9</version>
<modules>
<module>starboard-custom</module>
<module>news-templates</module>
</modules>

View File

@@ -2,8 +2,8 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.modules</groupId>
<artifactId>oneplus-bot-modules</artifactId>
<version>1.3.2</version>
<artifactId>oneplus-bot-modules-templates</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -0,0 +1,15 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources</directory>
</fileSet>
</fileSets>
</assembly>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates</groupId>
<artifactId>templates</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>dev.sheldan.oneplus.bot.templates.overrides</groupId>
<artifactId>overrides</artifactId>
<packaging>pom</packaging>
<modules>
<module>template-overrides</module>
</modules>
</project>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>template-overrides</artifactId>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>core</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>template-overrides-core-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,15 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources</directory>
</fileSet>
</fileSets>
</assembly>

View File

@@ -0,0 +1,5 @@
"color" : {
"r": 151,
"g": 0,
"b": 69
}

View File

@@ -0,0 +1,5 @@
"color" : {
"r": 151,
"g": 0,
"b": 69
}

View File

@@ -0,0 +1,5 @@
"color" : {
"r": 151,
"g": 0,
"b": 69
}

View File

@@ -0,0 +1,5 @@
"color" : {
"r": 151,
"g": 0,
"b": 69
}

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<artifactId>template-overrides</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>logging</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>template-overrides-logging-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,15 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources</directory>
</fileSet>
</fileSets>
</assembly>

View File

@@ -0,0 +1,4 @@
{
<#assign user>${member.user.name}#${member.user.discriminator} (${member.asMention}: ${member.id})</#assign>
"additionalMessage": "<@safe_include "user_joined_text"/>"
}

View File

@@ -0,0 +1,4 @@
{
<#assign user>${user.name}#${user.discriminator} (${user.id})</#assign>
"additionalMessage": "<@safe_include "user_left_text"/>"
}

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.overrides</groupId>
<artifactId>overrides</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<artifactId>template-overrides</artifactId>
<packaging>pom</packaging>
<modules>
<module>webservices</module>
<module>core</module>
<module>logging</module>
</modules>
</project>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.overrides.templates</groupId>
<artifactId>template-overrides</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>webservices</artifactId>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>template-overrides-webservices-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,15 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources</directory>
</fileSet>
</fileSets>
</assembly>

View File

@@ -0,0 +1,19 @@
{
<#include "abstracto_color">,
"fields": [
{
"name": "<@safe_include "urban_search_command_response_embed_field_title_link"/>",
"value": "${definition.url?json_string}",
"inline": "true"
},
{
"name": "<@safe_include "urban_search_command_response_embed_field_title_example"/>",
"value": "${definition.example?json_string}",
"inline": "true"
}
],
"additionalMessage": "${definition.definition?json_string}",
"metaConfig": {
"messageLimit": 1
}
}

View File

@@ -4,17 +4,18 @@
<parent>
<groupId>dev.sheldan.oneplus.bot</groupId>
<artifactId>oneplusbot</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modules>
<module>oneplus-bot-modules</module>
<module>oneplus-bot-modules-templates</module>
<module>translations</module>
<module>overrides</module>
</modules>
<groupId>dev.sheldan.oneplus.bot.templates</groupId>
<artifactId>templates</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
<packaging>pom</packaging>
</project>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.translations</groupId>
<artifactId>translations</artifactId>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>news-translations</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>starboard-custom-templates-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,15 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources</directory>
</fileSet>
</fileSets>
</assembly>

View File

@@ -0,0 +1 @@
Posts a news post in the news channel

View File

@@ -0,0 +1,4 @@
Creates a news with the provided text and any attachments in the `news` post target with the defined template.
The news post can be updated via editing the original message containing the command or by the command `updateNews`.
This is only possible as long as the news post has not been locked. This is the case a few hours after posting it.
The news posts are completely removed from the database a few days after locking them.

View File

@@ -0,0 +1 @@
The text the news post should contain

View File

@@ -0,0 +1,4 @@
${messageText}
${roleMention?json_string}
- ${authorMention}

View File

@@ -0,0 +1 @@
Command used to update an existing news post content

View File

@@ -0,0 +1,4 @@
This command can be used to update the news post complete.
This will effectively render the template new (including author) and replace the contents of the existing news post.
Editing the news post does not re-ping any roles.
This is only possible as long as the news post was not locked and is still stored in the database.

View File

@@ -0,0 +1 @@
The ID of the news post message which was created.

View File

@@ -0,0 +1 @@
The new text the news post should receive.

View File

@@ -0,0 +1 @@
The channel in which the news should be posted in. Currently: ${currentTarget}

View File

@@ -0,0 +1 @@
Module used to post & update news in the server

View File

@@ -0,0 +1 @@
News post is locked and cannot be edited.

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.templates</groupId>
<artifactId>templates</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -12,5 +12,6 @@
<packaging>pom</packaging>
<modules>
<module>starboard-custom-translations</module>
<module>news-translations</module>
</modules>
</project>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.oneplus.bot.templates.translations</groupId>
<artifactId>translations</artifactId>
<version>1.3.2</version>
<version>1.3.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>