added liquibase for setup of databases and initial values

fixed some table names to be singular
migrated templates to separate repository
added seed data to initial version in liquibase migrations instead of property files (post targets, emotes etc) and created some default tables containing those default values
added separate artifacts to be used containing only the liquibase config
added shell script as a wrapper for ansible deployment, to handle an environment variable defining whether or not the deployment should be executed
added logback scan period
added licenses for ansible, liquibase, docker and docker-compose
This commit is contained in:
Sheldan
2020-07-01 20:44:21 +02:00
parent e8767429bf
commit 9374dfb912
965 changed files with 15775 additions and 2935 deletions

View File

@@ -17,7 +17,7 @@ jobs:
id: version id: version
run: echo "::set-output name=version::$(mvn --file abstracto-application/pom.xml -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec)" run: echo "::set-output name=version::$(mvn --file abstracto-application/pom.xml -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec)"
- name: Publish to GitHub Packages - name: Publish to GitHub Packages
run: mvn --file abstracto-application/pom.xml -B deploy -P documentation -Dmaven.wagon.http.pool=false -DskipTests=true run: mvn --file abstracto-application/pom.xml -B deploy -P documentation,deployment-docker -Dmaven.wagon.http.pool=false -DskipTests=true
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install SSH Client - name: Install SSH Client

View File

@@ -6,7 +6,7 @@
[![GitHub license](https://img.shields.io/github/license/Sheldan/abstracto)](https://github.com/Sheldan/abstracto/blob/master/LICENSE) [![GitHub license](https://img.shields.io/github/license/Sheldan/abstracto)](https://github.com/Sheldan/abstracto/blob/master/LICENSE)
Abastracto represents a framework to be used as a basis for a Discord bot. It uses [JDA](https://github.com/DV8FromTheWorld/JDA/) as an API wrapper underneath Abstracto represents a framework to be used as a basis for a Discord bot. It uses [JDA](https://github.com/DV8FromTheWorld/JDA/) as an API wrapper underneath
and provides an extensive tool set to create new commands and a wide range of commands out of the box. and provides an extensive tool set to create new commands and a wide range of commands out of the box.
This repository does not provide the full functionality in order to start a discord bot, because it requires a Main class. This repository does not provide the full functionality in order to start a discord bot, because it requires a Main class.

View File

@@ -11,6 +11,28 @@
<artifactId>experience-tracking-impl</artifactId> <artifactId>experience-tracking-impl</artifactId>
<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> <dependencies>
<dependency> <dependency>
<groupId>dev.sheldan.abstracto.modules</groupId> <groupId>dev.sheldan.abstracto.modules</groupId>
@@ -25,6 +47,7 @@
<type>test-jar</type> <type>test-jar</type>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </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

@@ -1,33 +0,0 @@
package dev.sheldan.abstracto.experience.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Getter
@Setter
@ConfigurationProperties(prefix = "abstracto.experience")
public class ExperienceConfig {
/**
* The default min experience range from the properties file. This is used, when the bot joins a new guild.
*/
private Integer minExp;
/**
* The default max experience range from the properties file. This is used, when the bot joins a new guild.
*/
private Integer maxExp;
/**
* The default multiplier from the properties file. This is used, when the bot joins a new guild.
*/
private Double expMultiplier;
/**
* The default maxLevel from the properties file. This configuration applies globally, as the amount of levels does not depend on the server.
* This is only used once, when creating the {@link dev.sheldan.abstracto.experience.models.database.AExperienceLevel} once
*/
private Integer maxLvl;
}

View File

@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.experience.config;
import dev.sheldan.abstracto.core.listener.ServerConfigListener; import dev.sheldan.abstracto.core.listener.ServerConfigListener;
import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService; import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeatureConfig; import dev.sheldan.abstracto.experience.config.features.ExperienceFeatureConfig;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +18,7 @@ public class ExperienceConfigListener implements ServerConfigListener {
@Autowired @Autowired
private ExperienceConfig experienceConfig; private DefaultConfigManagementService defaultConfigManagementService;
@Autowired @Autowired
private ConfigManagementService service; private ConfigManagementService service;
@@ -25,8 +26,8 @@ public class ExperienceConfigListener implements ServerConfigListener {
@Override @Override
public void updateServerConfig(AServer server) { public void updateServerConfig(AServer server) {
log.info("Setting up experience configuration for server {}.", server.getId()); log.info("Setting up experience configuration for server {}.", server.getId());
service.createIfNotExists(server.getId(), ExperienceFeatureConfig.MIN_EXP_KEY, experienceConfig.getMinExp().longValue()); service.createIfNotExists(server.getId(), ExperienceFeatureConfig.MIN_EXP_KEY, defaultConfigManagementService.getDefaultConfig(ExperienceFeatureConfig.MIN_EXP_KEY).getLongValue());
service.createIfNotExists(server.getId(), ExperienceFeatureConfig.MAX_EXP_KEY, experienceConfig.getMaxExp().longValue()); service.createIfNotExists(server.getId(), ExperienceFeatureConfig.MAX_EXP_KEY, defaultConfigManagementService.getDefaultConfig(ExperienceFeatureConfig.MAX_EXP_KEY).getLongValue());
service.createIfNotExists(server.getId(), ExperienceFeatureConfig.EXP_MULTIPLIER_KEY, experienceConfig.getExpMultiplier()); service.createIfNotExists(server.getId(), ExperienceFeatureConfig.EXP_MULTIPLIER_KEY, defaultConfigManagementService.getDefaultConfig(ExperienceFeatureConfig.EXP_MULTIPLIER_KEY).getDoubleValue());
} }
} }

View File

@@ -1,32 +0,0 @@
package dev.sheldan.abstracto.experience.config;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeatureConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* Bean used to define the default values for the required configuration in the experience module.
* This {@link dev.sheldan.abstracto.core.models.database.ADefaultConfig} is used, when a config key in a module is set to the default value
* This service only creates a value if no one is previously there.
*/
@Component
public class ExperienceDefaultConfigListener {
@Autowired
private DefaultConfigManagementService defaultConfigManagementService;
@Autowired
private ExperienceConfig experienceConfig;
@EventListener
@Transactional
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
defaultConfigManagementService.createDefaultConfig(ExperienceFeatureConfig.MIN_EXP_KEY, experienceConfig.getMinExp().longValue());
defaultConfigManagementService.createDefaultConfig(ExperienceFeatureConfig.MAX_EXP_KEY, experienceConfig.getMaxExp().longValue());
defaultConfigManagementService.createDefaultConfig(ExperienceFeatureConfig.EXP_MULTIPLIER_KEY, experienceConfig.getExpMultiplier());
}
}

View File

@@ -1,30 +0,0 @@
package dev.sheldan.abstracto.experience.config;
import dev.sheldan.abstracto.experience.service.ExperienceLevelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* Component responsible to create the amount of {@link dev.sheldan.abstracto.experience.models.database.AExperienceLevel}
* configured in the {@link ExperienceConfig}. This is executed when the application starts up.
*/
@Component
@Slf4j
public class ExperienceLevelLoader {
@Autowired
private ExperienceConfig experienceConfig;
@Autowired
private ExperienceLevelService experienceLevelService;
@EventListener
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
Integer maxLevel = experienceConfig.getMaxLvl();
log.info("Creating experience levels up to level {}", maxLevel);
experienceLevelService.createLevelsUntil(maxLevel);
}
}

View File

@@ -1,9 +0,0 @@
package dev.sheldan.abstracto.experience.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:experience.properties")
public class ExperienceProperties {
}

View File

@@ -1,16 +0,0 @@
abstracto.scheduling.jobs.experienceJob.name=experienceJob
abstracto.scheduling.jobs.experienceJob.group=experience
abstracto.scheduling.jobs.experienceJob.clazz=dev.sheldan.abstracto.experience.job.ExperiencePersistingJob
abstracto.scheduling.jobs.experienceJob.standAlone=true
abstracto.scheduling.jobs.experienceJob.active=true
abstracto.scheduling.jobs.experienceJob.cronExpression=30 * * * * ?
abstracto.scheduling.jobs.experienceJob.recovery=false
abstracto.features.experience.enabled=true
abstracto.experience.minExp=10
abstracto.experience.maxExp=25
abstracto.experience.expMultiplier=1
abstracto.experience.maxLvl=200

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="experience-tables/tables.xml" relativeToChangelogFile="true"/>
<include file="experience-seedData/data.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,81 @@
<?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="experienceModule" value="(SELECT id FROM module WHERE name = 'experience')"/>
<property name="experienceFeature" value="(SELECT id FROM feature WHERE key = 'experience')"/>
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="experience-commands">
<insert tableName="command">
<column name="name" value="disableExpForRole"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="disableExpGain"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="enableExpForRole"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="enableExpGain"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="expScale"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="leaderboard"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="listDisabledExperienceRoles"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="rank"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="setExpRole"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="syncExpRoles"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="unSetExpRole"/>
<column name="module_id" valueComputed="${experienceModule}"/>
<column name="feature_id" valueComputed="${experienceFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="experience_level.xml" relativeToChangelogFile="true"/>
<include file="feature.xml" relativeToChangelogFile="true"/>
<include file="module.xml" relativeToChangelogFile="true"/>
<include file="command.xml" relativeToChangelogFile="true"/>
<include file="default_config.xml" relativeToChangelogFile="true"/>
<include file="experience_job.xml" relativeToChangelogFile="true"/>
<include file="default_feature_flag.xml" relativeToChangelogFile="true"/>
</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" >
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="experience_default_config-insert">
<insert tableName="default_config">
<column name="name" value="minExp"/>
<column name="long_value" value="10"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_config">
<column name="name" value="maxExp"/>
<column name="long_value" value="25"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_config">
<column name="name" value="expMultiplier"/>
<column name="double_value" value="1"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,18 @@
<?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="experienceFeature" value="(SELECT id FROM feature WHERE key = 'experience')"/>
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="experience_default_feature_flag-insertion">
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${experienceFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,19 @@
<?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="reminder-job-insert">
<insert tableName="scheduler_job">
<column name="name" value="experienceJob"/>
<column name="group_name" value="experience"/>
<column name="clazz" value="dev.sheldan.abstracto.experience.job.ExperiencePersistingJob"/>
<column name="active" value="true"/>
<column name="cron_expression" value="30 * * * * ?"/>
<column name="recovery" value="false"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,417 @@
<?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="experience_levels-insert">
<insert tableName="experience_level">
<column name="level" value="0"/>
<column name="experience_needed" value="0"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="1"/>
<column name="experience_needed" value="100"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="2"/>
<column name="experience_needed" value="255"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="3"/>
<column name="experience_needed" value="475"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="4"/>
<column name="experience_needed" value="770"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="5"/>
<column name="experience_needed" value="1150"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="6"/>
<column name="experience_needed" value="1625"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="7"/>
<column name="experience_needed" value="2205"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="8"/>
<column name="experience_needed" value="2900"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="9"/>
<column name="experience_needed" value="3720"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="10"/>
<column name="experience_needed" value="4675"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="11"/>
<column name="experience_needed" value="5775"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="12"/>
<column name="experience_needed" value="7030"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="13"/>
<column name="experience_needed" value="8450"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="14"/>
<column name="experience_needed" value="10045"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="15"/>
<column name="experience_needed" value="11825"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="16"/>
<column name="experience_needed" value="13800"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="17"/>
<column name="experience_needed" value="15980"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="18"/>
<column name="experience_needed" value="18375"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="19"/>
<column name="experience_needed" value="20995"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="20"/>
<column name="experience_needed" value="23850"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="21"/>
<column name="experience_needed" value="26950"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="22"/>
<column name="experience_needed" value="30305"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="23"/>
<column name="experience_needed" value="33925"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="24"/>
<column name="experience_needed" value="37820"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="25"/>
<column name="experience_needed" value="42000"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="26"/>
<column name="experience_needed" value="46475"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="27"/>
<column name="experience_needed" value="51255"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="28"/>
<column name="experience_needed" value="56350"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="29"/>
<column name="experience_needed" value="61770"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="30"/>
<column name="experience_needed" value="67525"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="31"/>
<column name="experience_needed" value="73625"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="32"/>
<column name="experience_needed" value="80080"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="33"/>
<column name="experience_needed" value="86900"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="34"/>
<column name="experience_needed" value="94095"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="35"/>
<column name="experience_needed" value="101675"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="36"/>
<column name="experience_needed" value="109650"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="37"/>
<column name="experience_needed" value="118030"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="38"/>
<column name="experience_needed" value="126825"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="39"/>
<column name="experience_needed" value="136045"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="40"/>
<column name="experience_needed" value="145700"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="41"/>
<column name="experience_needed" value="155800"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="42"/>
<column name="experience_needed" value="166355"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="43"/>
<column name="experience_needed" value="177375"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="44"/>
<column name="experience_needed" value="188870"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="45"/>
<column name="experience_needed" value="200850"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="46"/>
<column name="experience_needed" value="213325"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="47"/>
<column name="experience_needed" value="226305"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="48"/>
<column name="experience_needed" value="239800"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="49"/>
<column name="experience_needed" value="253820"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="50"/>
<column name="experience_needed" value="268375"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="51"/>
<column name="experience_needed" value="283475"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="52"/>
<column name="experience_needed" value="299130"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="53"/>
<column name="experience_needed" value="315350"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="54"/>
<column name="experience_needed" value="332145"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="55"/>
<column name="experience_needed" value="349525"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="56"/>
<column name="experience_needed" value="367500"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="57"/>
<column name="experience_needed" value="386080"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="58"/>
<column name="experience_needed" value="405275"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="59"/>
<column name="experience_needed" value="425095"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="60"/>
<column name="experience_needed" value="445550"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="61"/>
<column name="experience_needed" value="466650"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="62"/>
<column name="experience_needed" value="488405"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="63"/>
<column name="experience_needed" value="510825"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="64"/>
<column name="experience_needed" value="533920"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="65"/>
<column name="experience_needed" value="557700"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="66"/>
<column name="experience_needed" value="582175"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="67"/>
<column name="experience_needed" value="607355"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="68"/>
<column name="experience_needed" value="633250"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="69"/>
<column name="experience_needed" value="659870"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="70"/>
<column name="experience_needed" value="687225"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="71"/>
<column name="experience_needed" value="715325"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="72"/>
<column name="experience_needed" value="744180"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="73"/>
<column name="experience_needed" value="773800"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="74"/>
<column name="experience_needed" value="804195"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="75"/>
<column name="experience_needed" value="835375"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="76"/>
<column name="experience_needed" value="867350"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="77"/>
<column name="experience_needed" value="900130"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="78"/>
<column name="experience_needed" value="933725"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="79"/>
<column name="experience_needed" value="968145"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="80"/>
<column name="experience_needed" value="1003400"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="81"/>
<column name="experience_needed" value="1039500"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="82"/>
<column name="experience_needed" value="1076455"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="83"/>
<column name="experience_needed" value="1114275"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="84"/>
<column name="experience_needed" value="1152970"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="85"/>
<column name="experience_needed" value="1192550"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="86"/>
<column name="experience_needed" value="1233025"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="87"/>
<column name="experience_needed" value="1274405"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="88"/>
<column name="experience_needed" value="1316700"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="89"/>
<column name="experience_needed" value="1359920"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="90"/>
<column name="experience_needed" value="1404075"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="91"/>
<column name="experience_needed" value="1449175"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="92"/>
<column name="experience_needed" value="1495230"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="93"/>
<column name="experience_needed" value="1542250"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="94"/>
<column name="experience_needed" value="1590245"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="95"/>
<column name="experience_needed" value="1639225"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="96"/>
<column name="experience_needed" value="1689200"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="97"/>
<column name="experience_needed" value="1740180"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="98"/>
<column name="experience_needed" value="1792175"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="99"/>
<column name="experience_needed" value="1845195"/>
</insert>
<insert tableName="experience_level">
<column name="level" value="100"/>
<column name="experience_needed" value="1899250"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="experience_feature-insertion">
<insert tableName="feature">
<column name="key" value="experience"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="experience-module-insertion">
<insert tableName="module">
<column name="name" value="experience"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,24 @@
<?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="disabled_experience_roles-table">
<createTable tableName="disabled_experience_roles">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="disabled_experience_roles_pkey"/>
</column>
<column name="role_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="disabled_experience_roles-fk_disabled_experience_role_role">
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="disabled_experience_roles" constraintName="fk_disabled_experience_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,19 @@
<?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="experience_level-table">
<createTable tableName="experience_level">
<column name="level" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="experience_level_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience_needed" type="BIGINT"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,37 @@
<?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="experience_role-table">
<createTable tableName="experience_role">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="experience_role_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="level_id" type="INTEGER">
<constraints nullable="false"/>
</column>
<column name="role_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="experience_role-fk_experience_role_level">
<addForeignKeyConstraint baseColumnNames="level_id" baseTableName="experience_role" constraintName="fk_experience_role_level" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="level" referencedTableName="experience_level" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="experience_role-fk_experience_role_role">
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="experience_role" constraintName="fk_experience_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="experience_role-fk_experience_role_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="experience_role" constraintName="fk_experience_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</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="experience_level.xml" relativeToChangelogFile="true"/>
<include file="experience_role.xml" relativeToChangelogFile="true"/>
<include file="user_experience.xml" relativeToChangelogFile="true"/>
<include file="disabled_experience_roles.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,32 @@
<?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="user_experience-table">
<createTable tableName="user_experience">
<column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="user_experience_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience" type="BIGINT"/>
<column name="experience_gain_disabled" type="BOOLEAN"/>
<column name="message_count" type="BIGINT"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience_role_id" type="BIGINT"/>
<column name="level_id" type="INTEGER">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="user_experience-fk_user_experience_level">
<addForeignKeyConstraint baseColumnNames="level_id" baseTableName="user_experience" constraintName="fk_user_experience_level" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="level" referencedTableName="experience_level" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="user_experience-fk_user_experience_role">
<addForeignKeyConstraint baseColumnNames="experience_role_id" baseTableName="user_experience" constraintName="fk_user_experience_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="experience_role" validate="true"/>
</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-experience/collection.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -1,21 +0,0 @@
{
<#macro userDisplay user>
${user.rank} ${user.member.effectiveName} ${user.experience.experience} ${user.experience.currentLevel.level} ${user.experience.messageCount}
</#macro>
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "
<#include "leaderboard_rank_column"> | <#include "leaderboard_name_column"> | <#include "leaderboard_experience_column"> | <#include "leaderboard_level_column"> | <#include "leaderboard_messages_column">
<#list userExperiences as user>
<@userDisplay user=user />
</#list>
<@userDisplay user=userExecuting />
"
}

View File

@@ -1,21 +0,0 @@
{
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"title": {
"title": "<#include "list_disabled_experience_roles_embed_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "
<#list roles as role>
${role.role.asMention}
<#else>
<#include "list_disabled_experience_roles_embed_no_roles">
</#list>
"
}

View File

@@ -1,38 +0,0 @@
{
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "rank_xp_field_title">",
"value": "${rankUser.experience.experience}",
"inline": "true"
},
{
"name": "<#include "rank_level_field_title">",
"value": "${rankUser.experience.currentLevel.level}",
"inline": "true"
},
{
"name": "<#include "rank_messages_field_title">",
"value": "${rankUser.experience.messageCount}",
"inline": "true"
},
{
"name": "<#include "rank_to_next_level_field_title">",
"value": "${experienceToNextLevel}",
"inline": "true"
},
{
"name": "<#include "rank_rank_field_title">",
"value": "${rankUser.rank}",
"inline": "true"
}
]
}

View File

@@ -1,3 +0,0 @@
{
"additionalMessage": "<#include "syncExpRoles_updating_users_label">: ${currentCount}/${totalUserCount}."
}

View File

@@ -1,57 +0,0 @@
package dev.sheldan.abstracto.experience.config;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeatureConfig;
import dev.sheldan.abstracto.test.MockUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.List;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ExperienceConfigListenerTest {
@InjectMocks
private ExperienceConfigListener testUnit;
@Mock
private ExperienceConfig experienceConfig;
@Mock
private ConfigManagementService service;
@Captor
private ArgumentCaptor<Long> configValueCaptor;
@Captor
private ArgumentCaptor<String> configKeyCaptor;
@Test
public void setSettingUp() {
int minExp = 4;
int maxExp = 10;
double expMultiplier = 2;
when(experienceConfig.getMinExp()).thenReturn(minExp);
when(experienceConfig.getMaxExp()).thenReturn(maxExp);
when(experienceConfig.getExpMultiplier()).thenReturn(expMultiplier);
AServer server = MockUtils.getServer();
testUnit.updateServerConfig(server);
verify(service, times(2)).createIfNotExists(eq(server.getId()), configKeyCaptor.capture(), configValueCaptor.capture());
verify(service, times(1)).createIfNotExists(server.getId(), ExperienceFeatureConfig.EXP_MULTIPLIER_KEY, expMultiplier);
List<String> configKeys = configKeyCaptor.getAllValues();
List<Long> configValues = configValueCaptor.getAllValues();
Assert.assertEquals(ExperienceFeatureConfig.MIN_EXP_KEY, configKeys.get(0));
Assert.assertEquals(minExp, configValues.get(0).intValue());
Assert.assertEquals(ExperienceFeatureConfig.MAX_EXP_KEY, configKeys.get(1));
Assert.assertEquals(maxExp, configValues.get(1).intValue());
}
}

View File

@@ -1,54 +0,0 @@
package dev.sheldan.abstracto.experience.config;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeatureConfig;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.List;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ExperienceDefaultConfigListenerTest {
@InjectMocks
private ExperienceDefaultConfigListener testUnit;
@Mock
private ExperienceConfig experienceConfig;
@Mock
private DefaultConfigManagementService service;
@Captor
private ArgumentCaptor<Long> configValueCaptor;
@Captor
private ArgumentCaptor<String> configKeyCaptor;
@Test
public void setSettingUp() {
int minExp = 4;
int maxExp = 10;
double expMultiplier = 2;
when(experienceConfig.getMinExp()).thenReturn(minExp);
when(experienceConfig.getMaxExp()).thenReturn(maxExp);
when(experienceConfig.getExpMultiplier()).thenReturn(expMultiplier);
testUnit.handleContextRefreshEvent(null);
verify(service, times(2)).createDefaultConfig(configKeyCaptor.capture(), configValueCaptor.capture());
verify(service, times(1)).createDefaultConfig(ExperienceFeatureConfig.EXP_MULTIPLIER_KEY, expMultiplier);
List<String> configKeys = configKeyCaptor.getAllValues();
List<Long> configValues = configValueCaptor.getAllValues();
Assert.assertEquals(ExperienceFeatureConfig.MIN_EXP_KEY, configKeys.get(0));
Assert.assertEquals(minExp, configValues.get(0).intValue());
Assert.assertEquals(ExperienceFeatureConfig.MAX_EXP_KEY, configKeys.get(1));
Assert.assertEquals(maxExp, configValues.get(1).intValue());
}
}

View File

@@ -11,6 +11,28 @@
<artifactId>moderation-impl</artifactId> <artifactId>moderation-impl</artifactId>
<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> <dependencies>
<dependency> <dependency>
<groupId>dev.sheldan.abstracto.modules</groupId> <groupId>dev.sheldan.abstracto.modules</groupId>
@@ -31,6 +53,7 @@
<type>test-jar</type> <type>test-jar</type>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </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

@@ -1,10 +0,0 @@
package dev.sheldan.abstracto.moderation.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:moderation.properties")
public class ModerationConfig {
}

View File

@@ -1,26 +0,0 @@
package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.moderation.config.features.WarningDecayFeature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
public class ModerationDefaultConfigListener {
@Autowired
private DefaultConfigManagementService defaultConfigManagementService;
@Value("${abstracto.warnings.warnDecay.days}")
private Long decayDays;
@EventListener
@Transactional
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
defaultConfigManagementService.createDefaultConfig(WarningDecayFeature.DECAY_DAYS_KEY, decayDays);
}
}

View File

@@ -3,6 +3,8 @@ package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.listener.ServerConfigListener; import dev.sheldan.abstracto.core.listener.ServerConfigListener;
import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService; import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.moderation.config.features.WarningDecayFeature;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -13,11 +15,11 @@ public class WarnDecayConfigListener implements ServerConfigListener {
@Autowired @Autowired
private ConfigManagementService configManagementService; private ConfigManagementService configManagementService;
@Value("${abstracto.warnings.warnDecay.days}") @Autowired
private Long decayDays; private DefaultConfigManagementService defaultConfigManagementService;
@Override @Override
public void updateServerConfig(AServer server) { public void updateServerConfig(AServer server) {
configManagementService.createIfNotExists(server.getId(), "decayDays", decayDays); configManagementService.createIfNotExists(server.getId(), WarningDecayFeature.DECAY_DAYS_KEY, defaultConfigManagementService.getDefaultConfig(WarningDecayFeature.DECAY_DAYS_KEY).getLongValue());
} }
} }

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="moderation-tables/tables.xml" relativeToChangelogFile="true"/>
<include file="moderation-seedData/data.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,134 @@
<?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="moderationModule" value="(SELECT id FROM module WHERE name = 'moderation')"/>
<property name="moderationFeature" value="(SELECT id FROM feature WHERE key = 'moderation')"/>
<property name="warningsFeature" value="(SELECT id FROM feature WHERE key = 'warnings')"/>
<property name="loggingFeature" value="(SELECT id FROM feature WHERE key = 'logging')"/>
<property name="mutingFeature" value="(SELECT id FROM feature WHERE key = 'muting')"/>
<property name="warnDecayFeature" value="(SELECT id FROM feature WHERE key = 'warnDecay')"/>
<property name="userNotesFeature" value="(SELECT id FROM feature WHERE key = 'userNotes')"/>
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="moderation_moderation-commands">
<insert tableName="command">
<column name="name" value="ban"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${moderationFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="banId"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${moderationFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="kick"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${moderationFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="purge"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${moderationFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="slowMode"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${moderationFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
<changeSet author="Sheldan" id="moderation_warnings-commands">
<insert tableName="command">
<column name="name" value="deleteWarning"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${warningsFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="decayAllWarnings"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${warningsFeature}"/>
</insert>
<insert tableName="command">
<column name="name" value="myWarnings"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${warningsFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="warn"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${warningsFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="warnings"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${warningsFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
<changeSet author="Sheldan" id="moderation_muting-commands">
<insert tableName="command">
<column name="name" value="mute"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${mutingFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="setMuteRole"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${mutingFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="unMute"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${mutingFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
<changeSet author="Sheldan" id="moderation_warnDecay-commands">
<insert tableName="command">
<column name="name" value="decayWarnings"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${warnDecayFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
<changeSet author="Sheldan" id="moderation_userNotes-commands">
<insert tableName="command">
<column name="name" value="deleteNote"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${userNotesFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="userNote"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${userNotesFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="userNotes"/>
<column name="module_id" valueComputed="${moderationModule}"/>
<column name="feature_id" valueComputed="${userNotesFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,17 @@
<?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="default_config.xml" relativeToChangelogFile="true"/>
<include file="un_mute_job.xml" relativeToChangelogFile="true"/>
<include file="module.xml" relativeToChangelogFile="true"/>
<include file="warn_decay_job.xml" relativeToChangelogFile="true"/>
<include file="feature.xml" relativeToChangelogFile="true"/>
<include file="default_posttarget.xml" relativeToChangelogFile="true"/>
<include file="default_feature_flag.xml" relativeToChangelogFile="true"/>
<include file="command.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,19 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="moderation_default_config-insert">
<insert tableName="default_config">
<column name="name" value="decayDays"/>
<column name="long_value" value="90"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,48 @@
<?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="moderationFeature" value="(SELECT id FROM feature WHERE key = 'moderation')"/>
<property name="warningsFeature" value="(SELECT id FROM feature WHERE key = 'warnings')"/>
<property name="warnDecayFeature" value="(SELECT id FROM feature WHERE key = 'warnDecay')"/>
<property name="loggingFeature" value="(SELECT id FROM feature WHERE key = 'logging')"/>
<property name="mutingFeature" value="(SELECT id FROM feature WHERE key = 'muting')"/>
<property name="userNotesFeature" value="(SELECT id FROM feature WHERE key = 'userNotes')"/>
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="moderation_default_feature_flag-insertion">
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${moderationFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${warningsFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${warnDecayFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${loggingFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${mutingFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${userNotesFeature}" />
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,48 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="moderation_default_posttarget-insertion">
<insert tableName="default_posttarget">
<column name="name" value="joinLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="leaveLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="warnLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="kickLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="banLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="editLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="deleteLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="muteLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="decayLog"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,36 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="moderation_feature-insertion">
<insert tableName="feature">
<column name="key" value="moderation"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="feature">
<column name="key" value="warnings"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="feature">
<column name="key" value="warnDecay"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="feature">
<column name="key" value="logging"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="feature">
<column name="key" value="muting"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="feature">
<column name="key" value="userNotes"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="moderation-module-insertion">
<insert tableName="module">
<column name="name" value="moderation"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,18 @@
<?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="un-mute-job-insert">
<insert tableName="scheduler_job">
<column name="name" value="unMuteJob"/>
<column name="group_name" value="moderation"/>
<column name="clazz" value="dev.sheldan.abstracto.moderation.job.UnMuteJob"/>
<column name="active" value="true"/>
<column name="recovery" value="false"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,19 @@
<?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="warn-decay-job-insert">
<insert tableName="scheduler_job">
<column name="name" value="warnDecayJob"/>
<column name="group_name" value="moderation"/>
<column name="clazz" value="dev.sheldan.abstracto.moderation.job.WarnDecayJob"/>
<column name="active" value="true"/>
<column name="cron_expression" value="0 0 * * * ?"/>
<column name="recovery" value="false"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,51 @@
<?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="mute-table">
<createTable tableName="mute">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mute_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="reason" type="VARCHAR(255)"/>
<column name="trigger_key" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="mute_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="mute_target_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="muted_user" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="muting_channel" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="muting_server" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="mute_ended" type="BOOLEAN"/>
<column name="message_id" type="BIGINT"/>
<column name="muting_user" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_channel">
<addForeignKeyConstraint baseColumnNames="muting_channel" baseTableName="mute" constraintName="fk_mute_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_muting_user">
<addForeignKeyConstraint baseColumnNames="muting_user" baseTableName="mute" constraintName="fk_mute_muting_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_muted_user">
<addForeignKeyConstraint baseColumnNames="muted_user" baseTableName="mute" constraintName="fk_mute_muted_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_muting_server">
<addForeignKeyConstraint baseColumnNames="muting_server" baseTableName="mute" constraintName="fk_mute_muting_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,35 @@
<?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="mute_role-table">
<createTable tableName="mute_role">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mute_role_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="role_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="1593469295954-78">
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="mute_role" constraintName="fk3m21mnle06e53wb4r1x5bfyxc" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="1593469295954-126">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mute_role" constraintName="fk8bveij4p6lnc2fkoascaeb28k" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</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="mute.xml" relativeToChangelogFile="true"/>
<include file="mute_role.xml" relativeToChangelogFile="true"/>
<include file="user_note.xml" relativeToChangelogFile="true"/>
<include file="warning.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,26 @@
<?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="user_note-table">
<createTable tableName="user_note">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="user_note_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="note" type="VARCHAR(2000)"/>
<column name="note_user" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="user_note-fk_user_note_user">
<addForeignKeyConstraint baseColumnNames="note_user" baseTableName="user_note" constraintName="fk_user_note_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,36 @@
<?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="warning-table">
<createTable tableName="warning">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="warning_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="decay_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="decayed" type="BOOLEAN"/>
<column name="reason" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="warn_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="warned_user_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="warning_user_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="warning-fk_warning_warned_user">
<addForeignKeyConstraint baseColumnNames="warned_user_id" baseTableName="warning" constraintName="fk_warning_warned_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="warning-fk_warning_warning_user">
<addForeignKeyConstraint baseColumnNames="warning_user_id" baseTableName="warning" constraintName="fk_warning_warning_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</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-moderation/collection.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -1,23 +0,0 @@
abstracto.postTargets.moderation=joinLog,leaveLog,warnLog,kickLog,banLog,editLog,deleteLog,muteLog,decayLog
abstracto.features.moderation.enabled=false
abstracto.features.warnings.enabled=false
abstracto.features.warnDecay.enabled=false
abstracto.features.logging.enabled=false
abstracto.features.muting.enabled=false
abstracto.features.userNotes.enabled=false
abstracto.warnings.warnDecay.days=90
abstracto.scheduling.jobs.unMuteJob.name=unMuteJob
abstracto.scheduling.jobs.unMuteJob.group=moderation
abstracto.scheduling.jobs.unMuteJob.clazz=dev.sheldan.abstracto.moderation.job.UnMuteJob
abstracto.scheduling.jobs.unMuteJob.standAlone=false
abstracto.scheduling.jobs.unMuteJob.active=true
abstracto.scheduling.jobs.unMuteJob.recovery=false
abstracto.scheduling.jobs.warnDecayJob.name=warnDecayJob
abstracto.scheduling.jobs.warnDecayJob.group=moderation
abstracto.scheduling.jobs.warnDecayJob.clazz=dev.sheldan.abstracto.moderation.job.WarnDecayJob
abstracto.scheduling.jobs.warnDecayJob.standAlone=true
abstracto.scheduling.jobs.warnDecayJob.active=true
abstracto.scheduling.jobs.warnDecayJob.cronExpression=0 0 * * * ?
abstracto.scheduling.jobs.warnDecayJob.recovery=false

View File

@@ -1,32 +0,0 @@
{
"author": {
"name": "${bannedUser.effectiveName}",
"avatar": "${bannedUser.user.effectiveAvatarUrl}"
},
"title": {
"title": "<#include "ban_log_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "ban_log_banned_user_field_title">",
"value": "${bannedUser.effectiveName} ${bannedUser.asMention} (${bannedUser.idLong?c})"
},
{
"name": "<#include "ban_log_banning_user_field_title">",
"value": "${banningUser.effectiveName} ${banningUser.asMention} (${banningUser.idLong?c})"
},
{
"name": "<#include "ban_log_jump_link_field_title">",
"value": "[${messageChannel.name}](${message.jumpUrl})"
},
{
"name": "<#include "ban_log_reason_field_title">",
"value": "${reason}"
}
]
}

View File

@@ -1,28 +0,0 @@
{
"title": {
"title": "<#include "ban_log_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "ban_log_banned_user_field_title">",
"value": "${bannedUserId?c}"
},
{
"name": "<#include "ban_log_banning_user_field_title">",
"value": "${banningUser.effectiveName} ${banningUser.asMention} (${banningUser.idLong?c})"
},
{
"name": "<#include "ban_log_jump_link_field_title">",
"value": "[${messageChannel.name}](${message.jumpUrl})"
},
{
"name": "<#include "ban_log_reason_field_title">",
"value": "${reason}"
}
]
}

View File

@@ -1,32 +0,0 @@
{
"author": {
"name": "${kickedUser.effectiveName}",
"avatar": "${kickedUser.user.effectiveAvatarUrl}"
},
"title": {
"title": "<#include "kick_log_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "kick_log_kicked_user_field_title">",
"value": "${kickedUser.effectiveName} ${kickedUser.asMention} (${kickedUser.idLong?c})"
},
{
"name": "<#include "kick_log_kicking_user_field_title">",
"value": "${kickingUser.effectiveName} ${kickingUser.asMention} (${kickingUser.idLong?c})"
},
{
"name": "<#include "kick_log_jump_link_field_title">",
"value": "[${messageChannel.name}](${message.jumpUrl})"
},
{
"name": "<#include "kick_log_reason_field_title">",
"value": "${reason}"
}
]
}

View File

@@ -1,31 +0,0 @@
{
"author": {
<#if specifiedUser??>
"name": "${specifiedUser.member.effectiveName}",
"avatar": "${specifiedUser.member.user.effectiveAvatarUrl}"
<#else>
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
</#if>
},
"title": {
<#if specifiedUser??>
<#assign user>${specifiedUser.member.effectiveName}</#assign>
"title": "<#include "user_notes_embed_user_title">"
<#else>
"title": "<#include "user_notes_embed_title">"
</#if>
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#list userNotes as note>
<#assign user>${note.fullUser.member.asMention}</#assign>
<#assign noteText>${note.note.note}</#assign>
<#assign noteId>${note.note.id}</#assign>
<#assign date>${formatDate(note.note.created, "yyyy-MM-dd HH:mm:ss")}</#assign>
<#include "user_notes_note_entry"><#else><#include "user_notes_no_notes">
</#list>"
}

View File

@@ -1,44 +0,0 @@
{
"author": {
"name": "${mutedUser.effectiveName}",
"avatar": "${mutedUser.user.effectiveAvatarUrl}"
},
"title": {
"title": "<#include "mute_log_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "mute_log_muted_user_field_title">",
"value": "${mutedUser.effectiveName} ${mutedUser.asMention} (${mutedUser.idLong?c})"
},
{
"name": "<#include "mute_log_muting_user_field_title">",
"value": "${mutingUser.effectiveName} ${mutingUser.asMention} (${mutingUser.idLong?c})"
},
{
"name": "<#include "mute_log_mute_location_field_title">",
"value": "[${messageChannel.name}](${message.jumpUrl})"
},
{
"name": "<#include "mute_log_mute_reason_field_title">",
"value": "${mute.reason}"
},
{
"name": "<#include "mute_log_mute_duration_field_title">",
"value": "${fmtDuration(muteDuration)}"
},
{
"name": "<#include "mute_log_muted_until_field_title">",
"value": "${formatDate(mute.muteTargetDate, "yyyy-MM-dd HH:mm:ss")}"
}
],
"footer": {
"text": "<#include "mute_log_mute_id_footer"> #${mute.id}"
},
"timeStamp": "${mute.muteDate}"
}

View File

@@ -1,55 +0,0 @@
{
<#if unMutedUser?has_content>
"author": {
"name": "${unMutedUser.effectiveName}",
"avatar": "${unMutedUser.user.effectiveAvatarUrl}"
},
</#if>
"title": {
"title": "<#include "unMute_log_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "unMute_log_unmuted_user_field_title">",
<#if unMutedUser?has_content>
"value": "${unMutedUser.effectiveName} ${unMutedUser.asMention} (${unMutedUser.idLong?c})"
<#else>
"value": "<#include "user_left_server"> (${mute.mutedUser.userReference.id?c})"
</#if>
},
{
"name": "<#include "mute_log_muting_user_field_title">",
<#if mutingUser?has_content>
"value": "${mutingUser.effectiveName} ${mutingUser.asMention} (${mutingUser.idLong?c})"
<#else>
"value": "<#include "user_left_server"> (${mute.mutingUser.userReference.id?c})"
</#if>
},
{
"name": "<#include "mute_log_mute_location_field_title">",
"value": "[Link](${messageUrl})"
},
{
"name": "<#include "unMute_log_muted_since_field_title">",
"value": "${formatDate(mute.muteDate, "yyyy-MM-dd HH:mm:ss")}"
},
{
"name": "<#include "mute_log_mute_duration_field_title">",
"value": "${fmtDuration(muteDuration)}"
},
{
"name": "<#include "mute_log_mute_reason_field_title">",
"value": "${mute.reason}"
}
],
"footer": {
"text": "<#include "mute_log_mute_id_footer"> #${mute.id}"
},
"timeStamp": "${unmuteDate}"
}

View File

@@ -1,14 +0,0 @@
{
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
}
<#assign userMention>${member.effectiveName}</#assign>
,"description" :"<#include "myWarnings_with_decay_embed_description">"
</#if>
}

View File

@@ -1 +0,0 @@
The slowmode in channel ${channel.name} has been set to ${channel.slowMode} seconds.

View File

@@ -1,41 +0,0 @@
{
"author": {
"name": "${warnedUser.effectiveName}",
"avatar": "${warnedUser.user.effectiveAvatarUrl}"
},
"title": {
"title": "<#include "warn_log_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"fields": [
{
"name": "<#include "warn_log_warned_user_field_title">",
"value": "${warnedUser.effectiveName} ${warnedUser.asMention} (${warnedUser.idLong?c})"
},
<#if warningUser?has_content>
{
"name": "<#include "warn_log_warning_user_field_title">",
"value": "${warningUser.effectiveName} ${warningUser.asMention} (${warningUser.idLong?c})"
},
</#if>
<#if warning?has_content>
{
"name": "<#include "warn_log_warn_location_field_title">",
"value": "[${messageChannel.name}](${message.jumpUrl})"
},
</#if>
{
"name": "<#include "warn_log_warn_reason_field_title">",
"value": "${reason}"
}
],
"footer": {
<#if warningUser?has_content>
"text": "<#include "warn_log_warn_id_footer"> #${warning.id}"
</#if>
}
}

View File

@@ -1,7 +0,0 @@
{
<#assign warnCount>${warnings?size}</#assign>
"headerText": "<#include "warnings_header_text">",
"items": [
<#list warnings as warning>"<#include "warnings_warn_entry">"<#sep>,</#list>
]
}

View File

@@ -1,11 +0,0 @@
<#assign warnId>${warning.warning.id}</#assign>
<#assign reason>${warning.warning.reason}</#assign>
<#assign warnedUserText><#if warning.warnedUser.member??>${warning.warnedUser.member.asMention}(${warning.warnedUser.member.user.id})<#else>${warning.warnedUser.aUserInAServer.id}</#if></#assign>
<#assign warningUserText><#if warning.warningUser.member??>${warning.warningUser.member.asMention}(${warning.warningUser.member.user.id})<#else>${warning.warningUser.aUserInAServer.id}</#if></#assign>
<#assign warnDate>${formatDate(warning.warning.warnDate, "yyyy-MM-dd HH:mm:ss")}</#assign>
<#include "warnings_warn_entry_text">
<#if warning.warning.decayed>
<#assign decayDate>${formatDate(warning.warning.decayDate, "yyyy-MM-dd HH:mm:ss")}</#assign>
<#include "warnings_warn_is_decayed">
</#if>

View File

@@ -1,12 +0,0 @@
{
"imageUrl": "${imageUrl}",
"fields": [
{
"name": "<#include "messageDeleted_attachment_link_field_title">",
"value": "[<#include "messageDeleted_attachment_link_display_text">](${imageUrl})"
}
],
"footer": {
"text": "<#include "messageDeleted_attachment_footer"> #${counter}"
}
}

View File

@@ -1,22 +0,0 @@
{
"author": {
"name": "${member.effectiveName}#${member.user.discriminator}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"description": "<#include "messageDeleted_description_text">",
"color" : {
"r": 200,
"g": 0,
"b": 0
},
"fields": [
{
"name": "<#include "messageDeleted_original_message_field_title">",
"value": "${cachedMessage.content}"
},
{
"name": "<#include "messageDeleted_message_link_field_title">",
"value": "[${messageChannel.name}](${cachedMessage.messageUrl})"
}
]
}

View File

@@ -1,26 +0,0 @@
{
"author": {
"name": "${member.effectiveName}#${member.user.discriminator}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"description": "<#include "messageEdited_description_text">",
"color" : {
"r": 200,
"g": 0,
"b": 0
},
"fields": [
{
"name": "<#include "messageEdited_original_message_field_title">",
"value": "${messageBefore.content}"
},
{
"name": "<#include "messageEdited_new_message_field_title">",
"value": "${messageAfter.contentRaw}"
},
{
"name": "<#include "messageEdited_link_field_title">",
"value": "[${messageChannel.name}](${messageBefore.messageUrl})"
}
]
}

View File

@@ -1,15 +0,0 @@
{
"title": {
"title": "<#include "warnDecay_title">"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#list warnings as warning>
<#if warning.warnedMember??><#assign warnedUser>${warning.warnedMember.asMention} (${warning.warnedMember.id})</#assign><#else><#assign warnedUser> ${warning.warning.warnedUser.userReference.id?c}</#assign></#if> <#if warning.warningMember??><#assign warningUser> ${warning.warningMember.asMention} (${warning.warningMember.id})</#assign><#else><#assign warningUser>${warning.warning.warningUser.userReference.id?c}</#assign></#if> <#include "warnDecay_log_warn_entry">
<#else>
<#include "warnDecay_log_no_warnings">
</#list>"
}

View File

@@ -79,7 +79,7 @@ public class Mute {
* The channel in which this mute was cast * The channel in which this mute was cast
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "mutingChannel") @JoinColumn(name = "mutingChannel", nullable = false)
private AChannel mutingChannel; private AChannel mutingChannel;
/** /**

View File

@@ -7,7 +7,7 @@ import javax.persistence.*;
import java.time.Instant; import java.time.Instant;
@Entity @Entity
@Table(name="user_notes") @Table(name="user_note")
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor

View File

@@ -11,13 +11,34 @@
<artifactId>modmail-impl</artifactId> <artifactId>modmail-impl</artifactId>
<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> <dependencies>
<dependency> <dependency>
<groupId>dev.sheldan.abstracto.modules</groupId> <groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>modmail-int</artifactId> <artifactId>modmail-int</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </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

@@ -1,33 +0,0 @@
package dev.sheldan.abstracto.modmail.listener;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import static dev.sheldan.abstracto.modmail.service.ModMailThreadServiceBean.MODMAIL_CLOSING_MESSAGE_TEXT;
/**
* This listener is executed when the Spring context starts up and is used to set some default values related
* to mod mail.
*/
@Component
public class ModMailDefaultConfigListener {
@Autowired
private DefaultConfigManagementService defaultConfigManagementService;
@Autowired
private TemplateService templateService;
@EventListener
@Transactional
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
String text = templateService.renderSimpleTemplate("modmail_closing_user_message_description");
defaultConfigManagementService.createDefaultConfig(MODMAIL_CLOSING_MESSAGE_TEXT, text);
}
}

View File

@@ -1,5 +0,0 @@
abstracto.postTargets.modmail=modmailLog,modmailPing
abstracto.emoteNames.readReaction=readReaction
abstracto.defaultEmotes.readReaction=\uD83D\uDC40
abstracto.features.modmail.enabled=false
abstracto.features.modmail.defaultMode=log

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="modMail-tables/tables.xml" relativeToChangelogFile="true"/>
<include file="modMail-seedData/data.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,82 @@
<?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="modmailModule" value="(SELECT id FROM module WHERE name = 'modMail')"/>
<property name="modmailFeature" value="(SELECT id FROM feature WHERE key = 'modmail')"/>
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="modmail_modMail-commands">
<insert tableName="command">
<column name="name" value="anonReply"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="close"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="closeNoLog"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="closeSilently"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="contact"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="removeModMailRole"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="reply"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="setModMailCategory"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="setModMailRole"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="subscribe"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
<insert tableName="command">
<column name="name" value="unSubscribe"/>
<column name="module_id" valueComputed="${modmailModule}"/>
<column name="feature_id" valueComputed="${modmailFeature}"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="default_config.xml" relativeToChangelogFile="true"/>
<include file="module.xml" relativeToChangelogFile="true"/>
<include file="feature.xml" relativeToChangelogFile="true"/>
<include file="default_feature_flag.xml" relativeToChangelogFile="true"/>
<include file="default_posttarget.xml" relativeToChangelogFile="true"/>
<include file="command.xml" relativeToChangelogFile="true"/>
<include file="default_emote.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,18 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="modMailClosingText-insert">
<insert tableName="default_config">
<column name="name" value="modMailClosingText"/>
<column name="string_value" value="Thread has been closed."/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,17 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="modmail_default_emote-insert">
<insert tableName="default_emote">
<column name="emote_key" value="readReaction"/>
<column name="name" value="👀"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,19 @@
<?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="modmailFeature" value="(SELECT id FROM feature WHERE key = 'modmail')"/>
<property name="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="modmaildefau_default_feature_flag-insertion">
<insert tableName="default_feature_flag">
<column name="enabled" value="false"/>
<column name="feature_id" valueComputed="${modmailFeature}" />
<column name="mode" value="log"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,17 @@
<?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="modmail_default_posttarget-insertion">
<insert tableName="default_posttarget">
<column name="name" value="modmailLog"/>
</insert>
<insert tableName="default_posttarget">
<column name="name" value="modmailPing"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="modmail_feature-insertion">
<insert tableName="feature">
<column name="key" value="modmail"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,16 @@
<?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="today" value="(SELECT NOW())"/>
<changeSet author="Sheldan" id="modMail-module-insertion">
<insert tableName="module">
<column name="name" value="modMail"/>
<column name="created" valueComputed="${today}"/>
</insert>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,31 @@
<?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="modmail_messages-table">
<createTable tableName="modmail_messages">
<column name="message_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_messages_pkey"/>
</column>
<column name="anonymous" type="BOOLEAN"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="dm_channel" type="BOOLEAN"/>
<column name="modmail_message_author" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="thread_reference" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_messages-fk_modmail_message_thread">
<addForeignKeyConstraint baseColumnNames="thread_reference" baseTableName="modmail_messages" constraintName="fk_modmail_message_thread" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="modmail_thread" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_messages-fk_modmail_message_author">
<addForeignKeyConstraint baseColumnNames="modmail_message_author" baseTableName="modmail_messages" constraintName="fk_modmail_message_author" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,30 @@
<?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="modmail_roles-table">
<createTable tableName="modmail_roles">
<column autoIncrement="true" name="mod_mail_role_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_roles_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="modmail_role" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="modmail_role_server" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_roles-fk_modmail_role_role">
<addForeignKeyConstraint baseColumnNames="modmail_role" baseTableName="modmail_roles" constraintName="fk_modmail_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_roles-fk_modmail_role_server">
<addForeignKeyConstraint baseColumnNames="modmail_role_server" baseTableName="modmail_roles" constraintName="fk_modmail_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,31 @@
<?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="modmail_subscriber-table">
<createTable tableName="modmail_subscriber">
<column autoIncrement="true" name="subscriber_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_subscriber_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="modmail_thread_subscriber" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="mod_mail_thread" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_subscriber-fk_modmail_thread_subscriber_user">
<addForeignKeyConstraint baseColumnNames="modmail_thread_subscriber" baseTableName="modmail_subscriber" constraintName="fk_modmail_thread_subscriber_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_subscriber-fk_modmail_thread_thread">
<addForeignKeyConstraint baseColumnNames="mod_mail_thread" baseTableName="modmail_subscriber" constraintName="fk_modmail_thread_thread" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="modmail_thread" validate="true"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,38 @@
<?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="modmail_thread-table">
<createTable tableName="modmail_thread">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_thread_pkey"/>
</column>
<column name="closed" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="state" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="modmail_thread_channel" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="modmail_thread_server" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="modmail_user" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_channel">
<addForeignKeyConstraint baseColumnNames="modmail_thread_channel" baseTableName="modmail_thread" constraintName="fk_modmail_thread_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_user">
<addForeignKeyConstraint baseColumnNames="modmail_user" baseTableName="modmail_thread" constraintName="fk_modmail_thread_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_server">
<addForeignKeyConstraint baseColumnNames="modmail_thread_server" baseTableName="modmail_thread" constraintName="fk_modmail_thread_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</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="modmail_threads.xml" relativeToChangelogFile="true"/>
<include file="modmail_messages.xml" relativeToChangelogFile="true"/>
<include file="modmail_subscriber.xml" relativeToChangelogFile="true"/>
<include file="modmail_roles.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.0-modmail/collection.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -1,18 +0,0 @@
{
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "modmail_thread_already_exists">",
"fields": [
{
"name": "<#include "modmail_existing_thread_link_field_title">",
"value": "[<#include "modmail_existing_thread_link_content_display_text">](${threadUrl})"
}
]
}

View File

@@ -1 +0,0 @@
<#assign categoryId>${(error.templateModel['categoryId'])!"0"}</#assign><#include "modmail_category_not_setup_text">

View File

@@ -1,12 +0,0 @@
{
"author": {
"name": "${user.member.effectiveName}",
"avatar": "${user.member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "close_failed_to_delete_text_channel">"
}

View File

@@ -1,12 +0,0 @@
{
"author": {
"name": "${user.member.effectiveName}",
"avatar": "${user.member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "reply_exception_cannot_send_message_to_use">"
}

Some files were not shown because too many files have changed in this diff Show More