[AB-322] adding possibility to define a max age in days for messages to be eligible for stars

This commit is contained in:
Sheldan
2021-08-14 09:45:25 +02:00
parent d01e46a9a6
commit 3ed1f0c54a
5 changed files with 37 additions and 0 deletions

View File

@@ -7,9 +7,11 @@ import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReactions;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.starboard.config.StarboardFeatureConfig;
import dev.sheldan.abstracto.starboard.model.database.StarboardPost;
import dev.sheldan.abstracto.starboard.service.StarboardService;
import dev.sheldan.abstracto.starboard.service.management.StarboardPostManagementService;
@@ -19,6 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -52,6 +56,9 @@ public abstract class StarboardListener {
@Autowired
protected MetricService metricService;
@Autowired
private ConfigService configService;
public static final String STARBOARD_STARS = "starboard.stars";
public static final String STARBOARD_POSTS = "starboard.posts";
public static final String STAR_ACTION = "action";
@@ -69,6 +76,11 @@ public abstract class StarboardListener {
.build();
protected void handleStarboardPostChange(CachedMessage message, CachedReactions reaction, ServerUser userReacting, boolean adding) {
Long starMaxDays = configService.getLongValueOrConfigDefault(StarboardFeatureConfig.STAR_MAX_DAYS_CONFIG_KEY, message.getServerId());
if(message.getTimeCreated().isBefore(Instant.now().minus(starMaxDays, ChronoUnit.DAYS))) {
log.info("Post {} in channel {} in guild {} is beyond the configured max day amount of {} - ignoring.", message.getMessageId(), message.getChannelId(), message.getServerId(), starMaxDays);
return;
}
Optional<StarboardPost> starboardPostOptional = starboardPostManagementService.findByMessageId(message.getMessageId());
boolean starboardPostExists = starboardPostOptional.isPresent();
if(starboardPostExists && starboardPostOptional.get().isIgnored()) {

View File

@@ -13,6 +13,9 @@ abstracto.systemConfigs.starLvl4.longValue=17
abstracto.systemConfigs.starLvls.name=starLvls
abstracto.systemConfigs.starLvls.longValue=4
abstracto.systemConfigs.starMaxDays.name=starMaxDays
abstracto.systemConfigs.starMaxDays.longValue=7
abstracto.featureFlags.starboard.featureName=starboard
abstracto.featureFlags.starboard.enabled=false

View File

@@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReactions;
import dev.sheldan.abstracto.core.models.database.*;
import dev.sheldan.abstracto.core.models.listener.ReactionAddedModel;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
@@ -26,6 +27,7 @@ import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import java.time.Instant;
import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -53,6 +55,9 @@ public class StarAddedListenerTest {
@Mock
private UserInServerManagementService userInServerManagementService;
@Mock
private ConfigService configService;
@Mock
private EmoteService emoteService;
@@ -117,6 +122,8 @@ public class StarAddedListenerTest {
when(member.getUser()).thenReturn(user);
when(model.getMemberReacting()).thenReturn(member);
when(user.isBot()).thenReturn(false);
when(configService.getLongValueOrConfigDefault(StarboardFeatureConfig.STAR_MAX_DAYS_CONFIG_KEY, SERVER_ID)).thenReturn(1L);
when(cachedMessage.getTimeCreated()).thenReturn(Instant.now());
}
@Test

View File

@@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReactions;
import dev.sheldan.abstracto.core.models.database.*;
import dev.sheldan.abstracto.core.models.listener.ReactionRemovedModel;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
@@ -16,13 +17,16 @@ import dev.sheldan.abstracto.starboard.service.StarboardService;
import dev.sheldan.abstracto.starboard.service.management.StarboardPostManagementService;
import dev.sheldan.abstracto.starboard.service.management.StarboardPostReactorManagementService;
import net.dv8tion.jda.api.entities.MessageReaction;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -51,6 +55,9 @@ public class StarRemovedListenerTest {
@Mock
private UserInServerManagementService userInServerManagementService;
@Mock
private ConfigService configService;
@Mock
private EmoteService emoteService;
@@ -104,6 +111,12 @@ public class StarRemovedListenerTest {
private static final Long AUTHOR_ID = 4L;
private static final Long USER_ACTING_ID = 7L;
@Before
public void setup() {
when(configService.getLongValueOrConfigDefault(StarboardFeatureConfig.STAR_MAX_DAYS_CONFIG_KEY, SERVER_ID)).thenReturn(1L);
when(cachedMessage.getTimeCreated()).thenReturn(Instant.now());
}
@Test
public void testAuthorRemovingReaction() {
when(cachedAuthor.getAuthorId()).thenReturn(AUTHOR_ID);

View File

@@ -19,6 +19,7 @@ public class StarboardFeatureConfig implements FeatureConfig {
public static final String STAR_BADGE_EMOTE_PREFIX = "starboardBadge";
public static final String STAR_LEVELS_CONFIG_KEY = "starLvls";
public static final String STAR_EMOTE = "star";
public static final String STAR_MAX_DAYS_CONFIG_KEY = "starMaxDays";
@Autowired
private DefaultConfigManagementService defaultConfigManagementService;
@@ -40,6 +41,7 @@ public class StarboardFeatureConfig implements FeatureConfig {
for(int i = maxLevels; i > 0; i--) {
configKeys.add(StarboardFeatureConfig.STAR_LVL_CONFIG_PREFIX + i);
}
configKeys.add(STAR_MAX_DAYS_CONFIG_KEY);
return configKeys;
}