[AB-xxx] adding check to limit the join duration of users being banned by honeypot

This commit is contained in:
Sheldan
2024-02-09 23:17:12 +01:00
parent 1689fcdae9
commit 11914d1be5
3 changed files with 19 additions and 6 deletions

View File

@@ -23,6 +23,8 @@ import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;
@@ -62,10 +64,11 @@ public class HoneyPotRoleAddedListener implements RoleAddedListener {
}
if(roleId.equals(model.getRoleId())) {
Integer levelToSkipBan = configService.getLongValueOrConfigDefault(HoneyPotFeatureConfig.HONEYPOT_IGNORED_LEVEL, model.getServerId()).intValue();
boolean allowed = userHasLevel(model.getTargetMember(), levelToSkipBan);
Long amountOfSecondsToIgnore = configService.getLongValueOrConfigDefault(HoneyPotFeatureConfig.HONEYPOT_IGNORED_JOIN_DURATION_SECONDS, model.getServerId());
boolean allowed = userHasLevel(model.getTargetMember(), levelToSkipBan) || userJoinedLongerThanSeconds(model.getTargetMember(), amountOfSecondsToIgnore);
if(allowed) {
log.info("User {} in server {} has at least level {} and will not get banned by honey pot.",
model.getTargetUser().getUserId(), model.getTargetUser().getServerId(), levelToSkipBan);
log.info("User {} in server {} has at least level {} or joined more than {} seconds ago and will not get banned by honeypot.",
model.getTargetUser().getUserId(), model.getTargetUser().getServerId(), levelToSkipBan, amountOfSecondsToIgnore);
} else {
log.info("Banning user {} in guild {} due to role {}.", model.getTargetUser().getUserId(), model.getTargetUser().getServerId(), model.getRoleId());
HoneyPotReasonModel reasonModel = HoneyPotReasonModel
@@ -102,6 +105,12 @@ public class HoneyPotRoleAddedListener implements RoleAddedListener {
return SystemCondition.Result.isSuccessful(result);
}
private boolean userJoinedLongerThanSeconds(Member member, Long seconds) {
log.info("Checking if member {} joined the server more than {} seconds ago.", member.getIdLong(), seconds);
// the incorrectness of timejoined should not matter, we chunk anyway
return member.getTimeJoined().toInstant().isBefore(Instant.now().minus(seconds, ChronoUnit.SECONDS));
}
@Override
public FeatureDefinition getFeature() {
return ModerationFeatureDefinition.HONEYPOT;

View File

@@ -98,8 +98,11 @@ abstracto.featureModes.notifyMemberWarningDecays.enabled=true
abstracto.systemConfigs.honeypotRoleId.name=honeypotRoleId
abstracto.systemConfigs.honeypotRoleId.longValue=0
abstracto.systemConfigs.honeyPotIgnoredLevel.name=honeyPotIgnoredLevel
abstracto.systemConfigs.honeyPotIgnoredLevel.longValue=100
abstracto.systemConfigs.honeypotIgnoredLevel.name=honeypotIgnoredLevel
abstracto.systemConfigs.honeypotIgnoredLevel.longValue=100
abstracto.systemConfigs.honeypotIgnoredJoinDurationSeconds.name=honeypotIgnoredJoinDurationSeconds
abstracto.systemConfigs.honeypotIgnoredJoinDurationSeconds.longValue=86400
abstracto.featureFlags.honeypot.featureName=honeypot
abstracto.featureFlags.honeypot.enabled=false

View File

@@ -12,6 +12,7 @@ public class HoneyPotFeatureConfig implements FeatureConfig {
public static final String HONEYPOT_ROLE_ID = "honeypotRoleId";
public static final String HONEYPOT_IGNORED_LEVEL = "honeypotIgnoredLevel";
public static final String HONEYPOT_IGNORED_JOIN_DURATION_SECONDS = "honeypotIgnoredJoinDurationSeconds";
@Override
public FeatureDefinition getFeature() {
@@ -20,6 +21,6 @@ public class HoneyPotFeatureConfig implements FeatureConfig {
@Override
public List<String> getRequiredSystemConfigKeys() {
return Arrays.asList(HONEYPOT_ROLE_ID, HONEYPOT_IGNORED_LEVEL);
return Arrays.asList(HONEYPOT_ROLE_ID, HONEYPOT_IGNORED_LEVEL, HONEYPOT_IGNORED_JOIN_DURATION_SECONDS);
}
}