mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-08 10:31:01 +00:00
[AB-xxx] adding check to limit the join duration of users being banned by honeypot
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user