mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-05-02 00:32:19 +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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -62,10 +64,11 @@ public class HoneyPotRoleAddedListener implements RoleAddedListener {
|
|||||||
}
|
}
|
||||||
if(roleId.equals(model.getRoleId())) {
|
if(roleId.equals(model.getRoleId())) {
|
||||||
Integer levelToSkipBan = configService.getLongValueOrConfigDefault(HoneyPotFeatureConfig.HONEYPOT_IGNORED_LEVEL, model.getServerId()).intValue();
|
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) {
|
if(allowed) {
|
||||||
log.info("User {} in server {} has at least level {} and will not get banned by honey pot.",
|
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);
|
model.getTargetUser().getUserId(), model.getTargetUser().getServerId(), levelToSkipBan, amountOfSecondsToIgnore);
|
||||||
} else {
|
} else {
|
||||||
log.info("Banning user {} in guild {} due to role {}.", model.getTargetUser().getUserId(), model.getTargetUser().getServerId(), model.getRoleId());
|
log.info("Banning user {} in guild {} due to role {}.", model.getTargetUser().getUserId(), model.getTargetUser().getServerId(), model.getRoleId());
|
||||||
HoneyPotReasonModel reasonModel = HoneyPotReasonModel
|
HoneyPotReasonModel reasonModel = HoneyPotReasonModel
|
||||||
@@ -102,6 +105,12 @@ public class HoneyPotRoleAddedListener implements RoleAddedListener {
|
|||||||
return SystemCondition.Result.isSuccessful(result);
|
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
|
@Override
|
||||||
public FeatureDefinition getFeature() {
|
public FeatureDefinition getFeature() {
|
||||||
return ModerationFeatureDefinition.HONEYPOT;
|
return ModerationFeatureDefinition.HONEYPOT;
|
||||||
|
|||||||
@@ -98,8 +98,11 @@ abstracto.featureModes.notifyMemberWarningDecays.enabled=true
|
|||||||
abstracto.systemConfigs.honeypotRoleId.name=honeypotRoleId
|
abstracto.systemConfigs.honeypotRoleId.name=honeypotRoleId
|
||||||
abstracto.systemConfigs.honeypotRoleId.longValue=0
|
abstracto.systemConfigs.honeypotRoleId.longValue=0
|
||||||
|
|
||||||
abstracto.systemConfigs.honeyPotIgnoredLevel.name=honeyPotIgnoredLevel
|
abstracto.systemConfigs.honeypotIgnoredLevel.name=honeypotIgnoredLevel
|
||||||
abstracto.systemConfigs.honeyPotIgnoredLevel.longValue=100
|
abstracto.systemConfigs.honeypotIgnoredLevel.longValue=100
|
||||||
|
|
||||||
|
abstracto.systemConfigs.honeypotIgnoredJoinDurationSeconds.name=honeypotIgnoredJoinDurationSeconds
|
||||||
|
abstracto.systemConfigs.honeypotIgnoredJoinDurationSeconds.longValue=86400
|
||||||
|
|
||||||
abstracto.featureFlags.honeypot.featureName=honeypot
|
abstracto.featureFlags.honeypot.featureName=honeypot
|
||||||
abstracto.featureFlags.honeypot.enabled=false
|
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_ROLE_ID = "honeypotRoleId";
|
||||||
public static final String HONEYPOT_IGNORED_LEVEL = "honeypotIgnoredLevel";
|
public static final String HONEYPOT_IGNORED_LEVEL = "honeypotIgnoredLevel";
|
||||||
|
public static final String HONEYPOT_IGNORED_JOIN_DURATION_SECONDS = "honeypotIgnoredJoinDurationSeconds";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FeatureDefinition getFeature() {
|
public FeatureDefinition getFeature() {
|
||||||
@@ -20,6 +21,6 @@ public class HoneyPotFeatureConfig implements FeatureConfig {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getRequiredSystemConfigKeys() {
|
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