[OPB-3] adding initial structure of oneplus bot with deployment and selected modules

adding volume configuration to grafana and postgres
adding .env file for variables in docker compose
adding handling of password for prometheus
adding port configuration for more services
adding custom starboard notifications
updating readme and adding release job
 adding settings.xml for build
This commit is contained in:
Sheldan
2021-03-17 01:15:21 +01:00
parent 44a56d67c7
commit 71896bf3b6
77 changed files with 6086 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
<?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.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>dev.sheldan.oneplus.bot.application.custom</groupId>
<artifactId>oneplus-bot-customizations</artifactId>
<packaging>pom</packaging>
<modules>
<module>starboard-custom</module>
</modules>
</project>

View File

@@ -0,0 +1,49 @@
<?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.custom</groupId>
<artifactId>oneplus-bot-customizations</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>starboard-custom</artifactId>
<packaging>jar</packaging>
<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>
<dependencies>
<dependency>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>starboard-int</artifactId>
</dependency>
</dependencies>
</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,33 @@
package dev.sheldan.oneplus.bot.custom.starboard.config;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.starboard.config.StarboardFeatureConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class StarboardCustomFeature implements FeatureConfig {
@Autowired
private StarboardFeatureConfig starboardFeature;
@Override
public FeatureDefinition getFeature() {
return StarboardCustomFeatureDefinition.STARBOARD_NOTIFICATION;
}
@Override
public List<FeatureConfig> getRequiredFeatures() {
return Arrays.asList(starboardFeature);
}
@Override
public List<PostTargetEnum> getRequiredPostTargets() {
return Arrays.asList(StarboardCustomPostTarget.STARBOARD_NOTIFICATION);
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.oneplus.bot.custom.starboard.config;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import lombok.Getter;
@Getter
public enum StarboardCustomFeatureDefinition implements FeatureDefinition {
STARBOARD_NOTIFICATION("starboardNotification");
private String key;
StarboardCustomFeatureDefinition(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.oneplus.bot.custom.starboard.config;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import lombok.Getter;
@Getter
public enum StarboardCustomPostTarget implements PostTargetEnum {
STARBOARD_NOTIFICATION("starboardNotification");
private String key;
StarboardCustomPostTarget(String key) {
this.key = key;
}
}

View File

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

View File

@@ -0,0 +1,94 @@
package dev.sheldan.oneplus.bot.custom.starboard.listener;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.service.MemberService;
import dev.sheldan.abstracto.core.service.MessageService;
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.starboard.listener.StarboardPostCreatedListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostCreatedModel;
import dev.sheldan.abstracto.starboard.model.database.StarboardPost;
import dev.sheldan.abstracto.starboard.service.management.StarboardPostManagementService;
import dev.sheldan.oneplus.bot.custom.starboard.config.StarboardCustomFeatureDefinition;
import dev.sheldan.oneplus.bot.custom.starboard.config.StarboardCustomPostTarget;
import dev.sheldan.oneplus.bot.custom.starboard.model.StarboardPostCreatedNotificationModel;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Slf4j
@Component
public class StarboardPostCreatedListenerBean implements StarboardPostCreatedListener {
@Autowired
private PostTargetService postTargetService;
@Autowired
private StarboardPostManagementService starboardPostManagementService;
@Autowired
private MessageService messageService;
@Autowired
private MemberService memberService;
@Autowired
private StarboardPostCreatedListenerBean self;
@Autowired
private TemplateService templateService;
private static final String STARBOARD_POST_CREATED_NOTIFICATION_TEMPLATE_KEY = "starboard_post_created_notification";
@Override
public DefaultListenerResult execute(StarboardPostCreatedModel model) {
Long serverId = model.getServerId();
CompletableFuture<Message> starboardMessageFuture = messageService.loadMessage(serverId, model.getStarboardMessage().getChannelId(), model.getStarboardMessage().getMessageId());
CompletableFuture<Message> starredMessageFuture = messageService.loadMessage(serverId, model.getStarredMessage().getChannelId(), model.getStarredMessage().getMessageId());
CompletableFuture<Member> starredUserFuture = memberService.retrieveMemberInServer(model.getStarredUser());
CompletableFuture<Member> starringUserFuture = memberService.retrieveMemberInServer(model.getLastStarrer());
List<CompletableFuture> futures = Arrays.asList(starboardMessageFuture, starredMessageFuture, starredUserFuture, starringUserFuture);
CompletableFuture.allOf(starboardMessageFuture, starredMessageFuture, starredUserFuture, starringUserFuture)
.whenComplete((unused, throwable) -> self.sendNotification(futures, model));
log.info("Starboard created event for post {}.", model.getStarboardPostId());
return DefaultListenerResult.PROCESSED;
}
@Transactional
public void sendNotification(List<CompletableFuture> futures, StarboardPostCreatedModel model) {
StarboardPost post = starboardPostManagementService.findByStarboardPostId(model.getStarboardPostId()).orElse(null);
Message starboardMessage = futures.get(0).isCompletedExceptionally() ? null : (Message) futures.get(0).join();
Message starredMessage = futures.get(1).isCompletedExceptionally() ? null : (Message) futures.get(1).join();
Member starredMember = futures.get(2).isCompletedExceptionally() ? null : (Member) futures.get(2).join();
Member starringMember = futures.get(3).isCompletedExceptionally() ? null : (Member) futures.get(3).join();
StarboardPostCreatedNotificationModel templateModel = StarboardPostCreatedNotificationModel
.builder()
.post(post)
.starboardMessage(starboardMessage)
.starredMessage(starredMessage)
.starredMember(starredMember)
.starringMember(starringMember)
.starboardMessageSimple(model.getStarboardMessage())
.starredMessageSimple(model.getStarredMessage())
.starredUserId(model.getStarredUser().getUserId())
.starringUserId(model.getLastStarrer().getUserId())
.build();
MessageToSend messageToSend = templateService.renderEmbedTemplate(STARBOARD_POST_CREATED_NOTIFICATION_TEMPLATE_KEY, templateModel);
postTargetService.sendEmbedInPostTarget(messageToSend, StarboardCustomPostTarget.STARBOARD_NOTIFICATION, model.getServerId());
}
@Override
public FeatureDefinition getFeature() {
return StarboardCustomFeatureDefinition.STARBOARD_NOTIFICATION;
}
}

View File

@@ -0,0 +1,89 @@
package dev.sheldan.oneplus.bot.custom.starboard.listener;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.service.MemberService;
import dev.sheldan.abstracto.core.service.MessageService;
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.starboard.listener.StarboardPostDeletedListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostDeletedModel;
import dev.sheldan.abstracto.starboard.service.management.StarboardPostManagementService;
import dev.sheldan.oneplus.bot.custom.starboard.config.StarboardCustomFeatureDefinition;
import dev.sheldan.oneplus.bot.custom.starboard.config.StarboardCustomPostTarget;
import dev.sheldan.oneplus.bot.custom.starboard.model.StarboardPostDeletedNotificationModel;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Slf4j
@Component
public class StarboardPostDeletedListenerBean implements StarboardPostDeletedListener {
@Autowired
private PostTargetService postTargetService;
@Autowired
private StarboardPostManagementService starboardPostManagementService;
@Autowired
private MessageService messageService;
@Autowired
private MemberService memberService;
@Autowired
private StarboardPostDeletedListenerBean self;
@Autowired
private TemplateService templateService;
private static final String STARBOARD_POST_DELETED_NOTIFICATION_TEMPLATE_KEY = "starboard_post_deleted_notification";
@Override
public DefaultListenerResult execute(StarboardPostDeletedModel model) {
Long serverId = model.getServerId();
CompletableFuture<Message> starboardMessageFuture = messageService.loadMessage(serverId, model.getStarboardMessage().getChannelId(), model.getStarboardMessage().getMessageId());
CompletableFuture<Message> starredMessageFuture = messageService.loadMessage(serverId, model.getStarredMessage().getChannelId(), model.getStarredMessage().getMessageId());
CompletableFuture<Member> starredUserFuture = memberService.retrieveMemberInServer(model.getStarredUser());
CompletableFuture<Member> starringUserFuture = memberService.retrieveMemberInServer(model.getLastStarrer());
List<CompletableFuture> futures = Arrays.asList(starboardMessageFuture, starredMessageFuture, starredUserFuture, starringUserFuture);
CompletableFuture.allOf(starboardMessageFuture, starredMessageFuture, starredUserFuture, starringUserFuture)
.whenComplete((unused, throwable) -> self.sendNotification(futures, model));
log.info("Starboard deleted event for post {}.", model.getStarboardPostId());
return DefaultListenerResult.PROCESSED;
}
@Transactional
public void sendNotification(List<CompletableFuture> futures, StarboardPostDeletedModel model) {
Message starboardMessage = futures.get(0).isCompletedExceptionally() ? null : (Message) futures.get(0).join();
Message starredMessage = futures.get(1).isCompletedExceptionally() ? null : (Message) futures.get(1).join();
Member starredMember = futures.get(2).isCompletedExceptionally() ? null : (Member) futures.get(2).join();
Member starringMember = futures.get(3).isCompletedExceptionally() ? null : (Member) futures.get(3).join();
StarboardPostDeletedNotificationModel templateModel = StarboardPostDeletedNotificationModel
.builder()
.starboardMessage(starboardMessage)
.starredMessage(starredMessage)
.starredMember(starredMember)
.starringMember(starringMember)
.starredUserId(model.getStarredUser().getUserId())
.starringUserId(model.getLastStarrer().getUserId())
.build();
MessageToSend messageToSend = templateService.renderEmbedTemplate(STARBOARD_POST_DELETED_NOTIFICATION_TEMPLATE_KEY, templateModel);
postTargetService.sendEmbedInPostTarget(messageToSend, StarboardCustomPostTarget.STARBOARD_NOTIFICATION, model.getServerId());
}
@Override
public FeatureDefinition getFeature() {
return StarboardCustomFeatureDefinition.STARBOARD_NOTIFICATION;
}
}

View File

@@ -0,0 +1,24 @@
package dev.sheldan.oneplus.bot.custom.starboard.model;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.starboard.model.database.StarboardPost;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@Getter
@Setter
@Builder
public class StarboardPostCreatedNotificationModel {
private StarboardPost post;
private ServerChannelMessage starboardMessageSimple;
private Message starboardMessage;
private ServerChannelMessage starredMessageSimple;
private Message starredMessage;
private Member starredMember;
private Long starredUserId;
private Member starringMember;
private Long starringUserId;
}

View File

@@ -0,0 +1,22 @@
package dev.sheldan.oneplus.bot.custom.starboard.model;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@Getter
@Setter
@Builder
public class StarboardPostDeletedNotificationModel {
private ServerChannelMessage starboardMessageSimple;
private Message starboardMessage;
private ServerChannelMessage starredMessageSimple;
private Message starredMessage;
private Member starredMember;
private Long starredUserId;
private Member starringMember;
private Long starringUserId;
}

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="starboard-custom-seedData/data.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="feature.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="starboard_custom_feature-insertion">
<insert tableName="feature">
<column name="key" value="starboardNotification"/>
</insert>
</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="1.0-starboard-custom/collection.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,4 @@
abstracto.postTargets.starboardNotification.name=starboardNotification
abstracto.featureFlags.starboardNotification.featureName=starboardNotification
abstracto.featureFlags.starboardNotification.enabled=false