mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-26 13:46:19 +00:00
added scheduling support
added remind command added support for parameters with spaces (they are contained by ") fixed support for remainder parameters added maxlength support for parameters added ability to embed templates, to have a text as well moved properties to a more appropriate position added method do parse a duration
This commit is contained in:
@@ -28,10 +28,6 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-oauth2-client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-quartz</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
||||
@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.exception.ConfigurationException;
|
||||
import dev.sheldan.abstracto.core.management.PostTargetManagement;
|
||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||
import dev.sheldan.abstracto.core.models.embed.MessageToSend;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
@@ -83,6 +84,18 @@ public class PostTargetServiceBean implements PostTargetService {
|
||||
return this.sendEmbedInPostTarget(embed, postTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Message> sendEmbedInPostTarget(MessageToSend message, String postTargetName, Long serverId) {
|
||||
PostTarget postTarget = this.getPostTarget(postTargetName, serverId);
|
||||
return this.sendEmbedInPostTarget(message, postTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Message> sendEmbedInPostTarget(MessageToSend message, PostTarget target) {
|
||||
TextChannel textChannelForPostTarget = getTextChannelForPostTarget(target);
|
||||
return textChannelForPostTarget.sendMessage(message.getMessage()).embed(message.getEmbed()).submit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validPostTarget(String name) {
|
||||
List<String> possiblePostTargets = dynamicKeyLoader.getPostTargetsAsList();
|
||||
|
||||
@@ -10,10 +10,10 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.models.listener.MessageEmbeddedModel;
|
||||
import dev.sheldan.abstracto.core.service.Bot;
|
||||
import dev.sheldan.abstracto.core.service.MessageCache;
|
||||
import dev.sheldan.abstracto.core.models.embed.MessageToSend;
|
||||
import dev.sheldan.abstracto.templating.TemplateService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -91,8 +91,8 @@ public class MessageEmbedListener extends ListenerAdapter {
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void createEmbedAndPostEmbed(@Nonnull GuildMessageReceivedEvent event, CachedMessage message) {
|
||||
MessageEmbeddedModel messageEmbeddedModel = buildTemplateParameter(event, message);
|
||||
MessageEmbed embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
|
||||
event.getChannel().sendMessage(embed).queue();
|
||||
MessageToSend embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
|
||||
event.getChannel().sendMessage(embed.getMessage()).embed(embed.getEmbed()).queue();
|
||||
}
|
||||
|
||||
private MessageEmbeddedModel buildTemplateParameter(GuildMessageReceivedEvent event, CachedMessage embeddedMessage) {
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
spring.datasource.url=jdbc:postgresql://localhost:5432/abstracto
|
||||
spring.datasource.username= abstracto
|
||||
spring.datasource.password= abstracto
|
||||
spring.jpa.hibernate.default_schema=abstracto
|
||||
spring.jpa.show-sql = false
|
||||
|
||||
spring.jpa.hibernate.ddl-auto = update
|
||||
spring.jpa.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
|
||||
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
|
||||
log4j.logger.org.hibernate.SQL=info
|
||||
log4j.logger.org.hibernate.type.descriptor.sql=trace
|
||||
log4j.logger.org.hibernate.type=trace
|
||||
log4j.logger.dev.sheldan=info
|
||||
|
||||
spring.cache.cache-names=messages
|
||||
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
|
||||
|
||||
abstracto.startup.synchronize=true
|
||||
|
||||
abstracto.parameter.lowerBound=50
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.core;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
||||
public class Constants {
|
||||
|
||||
@Value("${abstracto.parameter.lowerBound}")
|
||||
public static int PARAMETER_LIMIT = 0;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package dev.sheldan.abstracto.core.models;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class AServerAChannelAUser {
|
||||
private AServer guild;
|
||||
private AChannel channel;
|
||||
private AUserInAServer aUserInAServer;
|
||||
private AUser user;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class MessageToSend {
|
||||
private MessageEmbed embed;
|
||||
private String message;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||
import dev.sheldan.abstracto.core.models.embed.MessageToSend;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
|
||||
@@ -12,6 +13,8 @@ public interface PostTargetService {
|
||||
CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTarget target);
|
||||
CompletableFuture<Message> sendTextInPostTarget(String text, String postTargetName, Long serverId);
|
||||
CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, String postTargetName, Long serverId);
|
||||
CompletableFuture<Message> sendEmbedInPostTarget(MessageToSend message, String postTargetName, Long serverId);
|
||||
CompletableFuture<Message> sendEmbedInPostTarget(MessageToSend message, PostTarget target);
|
||||
boolean validPostTarget(String name);
|
||||
List<String> getAvailablePostTargets();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package dev.sheldan.abstracto.core.utils;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ParseUtils {
|
||||
|
||||
private static Pattern messageRegex = Pattern.compile("(?<number>\\d+)(?<unit>[ywdhms]+)");
|
||||
|
||||
public static Duration parseDuration(String textToParseFrom) {
|
||||
Matcher matcher = ParseUtils.messageRegex.matcher(textToParseFrom);
|
||||
Duration start = Duration.ZERO;
|
||||
while(matcher.find()) {
|
||||
String unit = matcher.group("unit");
|
||||
String number = matcher.group("number");
|
||||
long parsed = Long.parseLong(number);
|
||||
switch (unit) {
|
||||
case "w": start = start.plus(Duration.ofDays(parsed * 7)); break;
|
||||
case "d": start = start.plus(Duration.ofDays(parsed)); break;
|
||||
case "h": start = start.plus(Duration.ofHours(parsed)); break;
|
||||
case "m": start = start.plus(Duration.ofMinutes(parsed)); break;
|
||||
case "s": start = start.plus(Duration.ofSeconds(parsed)); break;
|
||||
}
|
||||
}
|
||||
return start;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package dev.sheldan.abstracto.core.utils;
|
||||
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class ParseUtilsTest {
|
||||
|
||||
@Test
|
||||
public void oneDay() {
|
||||
Duration duration = ParseUtils.parseDuration("1d");
|
||||
assertEquals(Duration.ofDays(1), duration);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void twoWeeks() {
|
||||
Duration duration = ParseUtils.parseDuration("2w");
|
||||
assertEquals(Duration.ofDays(14), duration);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aDayWithMinutes() {
|
||||
Duration duration = ParseUtils.parseDuration("1d3m");
|
||||
assertEquals(Duration.ofDays(1).plus(Duration.ofMinutes(3)), duration);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void allTimeFormats() {
|
||||
Duration duration = ParseUtils.parseDuration("2w3d4h2m1s");
|
||||
assertEquals(Duration.ofDays(17).plus(Duration.ofHours(4)).plus(Duration.ofMinutes(2)).plus(Duration.ofSeconds(1)), duration);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void overFlowingTimeFormats() {
|
||||
Duration duration = ParseUtils.parseDuration("70s");
|
||||
assertEquals(Duration.ofMinutes(1).plus(Duration.ofSeconds(10)), duration);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user