diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java index 4506b8f22..05ded0f45 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java @@ -25,4 +25,12 @@ public class EmbedField { */ private Boolean inline; private Boolean forceNewMessage; + /** + * this will actively limit the length, not create another field + */ + private Integer valueLengthLimit; + /** + * this will actively limit the length, not create another field + */ + private Integer nameLengthLimit; } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/MetaEmbedConfiguration.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/MetaEmbedConfiguration.java index fe605687d..84bbb74b5 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/MetaEmbedConfiguration.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/MetaEmbedConfiguration.java @@ -8,8 +8,11 @@ import lombok.Setter; @Setter @Builder public class MetaEmbedConfiguration { - private Long additionalMessageLengthLimit; - private Long messageLimit; + private Integer additionalMessageLengthLimit; + private Integer additionalMessageSplitLength; + private Integer descriptionMessageLengthLimit; + private Integer messageLimit; + private boolean preventEmptyEmbed; private boolean allowsRoleMention; diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java index 021ee977d..7eba800c4 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java @@ -78,6 +78,14 @@ public class TemplateServiceBean implements TemplateService { EmbedConfiguration embedConfiguration = gson.fromJson(embedConfig, EmbedConfiguration.class); List embedBuilders = new ArrayList<>(); embedBuilders.add(new EmbedBuilder()); + if(embedConfiguration.getMetaConfig() != null && + embedConfiguration.getDescription() != null && + embedConfiguration.getMetaConfig().getDescriptionMessageLengthLimit() != null && + embedConfiguration.getDescription().length() > embedConfiguration.getMetaConfig().getDescriptionMessageLengthLimit()) + { + embedConfiguration.setDescription(embedConfiguration.getDescription().substring(0, + embedConfiguration.getMetaConfig().getDescriptionMessageLengthLimit())); + } String description = embedConfiguration.getDescription(); if (description != null) { handleEmbedDescription(embedBuilders, description); @@ -121,11 +129,20 @@ public class TemplateServiceBean implements TemplateService { } List messages = new ArrayList<>(); + if( + embedConfiguration.getMetaConfig() != null && + embedConfiguration.getMetaConfig().getAdditionalMessageLengthLimit() != null && + embedConfiguration.getAdditionalMessage().length() > embedConfiguration.getMetaConfig().getAdditionalMessageLengthLimit() + ) { + embedConfiguration.setAdditionalMessage(embedConfiguration.getAdditionalMessage().substring(0, embedConfiguration.getMetaConfig().getAdditionalMessageLengthLimit())); + } + + String additionalMessage = embedConfiguration.getAdditionalMessage(); if(additionalMessage != null) { Long segmentLimit = embedConfiguration.getMetaConfig() != null - && embedConfiguration.getMetaConfig().getAdditionalMessageLengthLimit() != null ? - embedConfiguration.getMetaConfig().getAdditionalMessageLengthLimit() : + && embedConfiguration.getMetaConfig().getAdditionalMessageSplitLength() != null ? + embedConfiguration.getMetaConfig().getAdditionalMessageSplitLength() : Long.valueOf(Message.MAX_CONTENT_LENGTH); if(additionalMessage.length() > segmentLimit) { int segmentStart = 0; @@ -257,6 +274,15 @@ public class TemplateServiceBean implements TemplateService { // and we need to insert the "first" element last, so it actually gets the correct field index comparator = comparator.thenComparing(additionalEmbedField -> additionalEmbedField.innerFieldIndex).reversed(); TreeSet toInsert = new TreeSet<>(comparator); + + configuration.getFields().forEach(embedField -> { + if(embedField.getValueLengthLimit() != null && embedField.getValueLengthLimit() < embedField.getValue().length()) { + embedField.setValue(embedField.getValue().substring(0, embedField.getValueLengthLimit())); + } + if(embedField.getNameLengthLimit() != null && embedField.getNameLengthLimit() < embedField.getName().length()) { + embedField.setName(embedField.getName().substring(0, embedField.getNameLengthLimit())); + } + }); for (int i = 0; i < configuration.getFields().size(); i++) { EmbedField field = configuration.getFields().get(i); if (field != null && field.getValue() != null && field.getValue().length() > MessageEmbed.VALUE_MAX_LENGTH) { diff --git a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBeanTest.java b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBeanTest.java index b9490eff7..1f937138e 100644 --- a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBeanTest.java +++ b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBeanTest.java @@ -101,9 +101,9 @@ public class TemplateServiceBeanTest { EmbedConfiguration config = Mockito.mock(EmbedConfiguration.class); MetaEmbedConfiguration metaConfig = Mockito.mock(MetaEmbedConfiguration.class); when(config.getMetaConfig()).thenReturn(metaConfig); - when(metaConfig.getAdditionalMessageLengthLimit()).thenReturn(2000L); + when(metaConfig.getAdditionalMessageSplitLength()).thenReturn(2000); when(config.getAdditionalMessage()).thenReturn(additionalMessage); - when(metaConfig.getMessageLimit()).thenReturn(5L); + when(metaConfig.getMessageLimit()).thenReturn(5); when(configuration.getTemplate(getEmbedTemplateKey(), null, SERVER_ID, null, true, false)).thenReturn(new Template(getEmbedTemplateKey(), templateContent, getNonMockedConfiguration())); when(gson.fromJson(templateContent, EmbedConfiguration.class)).thenReturn(config); MessageToSend messageToSend = templateServiceBean.renderEmbedTemplate(TEMPLATE_KEY, new Object()); @@ -121,9 +121,9 @@ public class TemplateServiceBeanTest { EmbedConfiguration config = Mockito.mock(EmbedConfiguration.class); MetaEmbedConfiguration metaConfig = Mockito.mock(MetaEmbedConfiguration.class); when(config.getMetaConfig()).thenReturn(metaConfig); - when(metaConfig.getAdditionalMessageLengthLimit()).thenReturn(2000L); + when(metaConfig.getAdditionalMessageSplitLength()).thenReturn(2000); when(config.getAdditionalMessage()).thenReturn(additionalMessage); - when(metaConfig.getMessageLimit()).thenReturn(1L); + when(metaConfig.getMessageLimit()).thenReturn(1); when(configuration.getTemplate(getEmbedTemplateKey(), null, SERVER_ID, null, true, false)).thenReturn(new Template(getEmbedTemplateKey(), templateContent, getNonMockedConfiguration())); when(gson.fromJson(templateContent, EmbedConfiguration.class)).thenReturn(config); MessageToSend messageToSend = templateServiceBean.renderEmbedTemplate(TEMPLATE_KEY, new Object()); @@ -140,8 +140,8 @@ public class TemplateServiceBeanTest { EmbedConfiguration config = Mockito.mock(EmbedConfiguration.class); MetaEmbedConfiguration metaConfig = Mockito.mock(MetaEmbedConfiguration.class); when(config.getMetaConfig()).thenReturn(metaConfig); - when(metaConfig.getAdditionalMessageLengthLimit()).thenReturn(500L); - when(metaConfig.getMessageLimit()).thenReturn(5L); + when(metaConfig.getAdditionalMessageSplitLength()).thenReturn(500); + when(metaConfig.getMessageLimit()).thenReturn(5); when(config.getAdditionalMessage()).thenReturn(additionalMessage); when(configuration.getTemplate(getEmbedTemplateKey(), null, SERVER_ID, null, true, false)).thenReturn(new Template(getEmbedTemplateKey(), templateContent, getNonMockedConfiguration())); when(gson.fromJson(templateContent, EmbedConfiguration.class)).thenReturn(config);