99import org .slf4j .LoggerFactory ;
1010
1111import org .togetherjava .tjbot .config .Config ;
12+ import org .togetherjava .tjbot .config .HelperPruneConfig ;
1213import org .togetherjava .tjbot .db .Database ;
1314import org .togetherjava .tjbot .features .Routine ;
1415import org .togetherjava .tjbot .features .moderation .audit .ModAuditLogWriter ;
3132public final class AutoPruneHelperRoutine implements Routine {
3233 private static final Logger logger = LoggerFactory .getLogger (AutoPruneHelperRoutine .class );
3334
34- private static final int ROLE_FULL_LIMIT = 100 ;
35- private static final int ROLE_FULL_THRESHOLD = 95 ;
36- private static final int PRUNE_MEMBER_AMOUNT = 7 ;
37- private static final Period INACTIVE_AFTER = Period . ofDays ( 90 ) ;
38- private static final int RECENTLY_JOINED_DAYS = 4 ;
35+ private final int roleFullLimit ;
36+ private final int roleFullThreshold ;
37+ private final int pruneMemberAmount ;
38+ private final Period inactiveAfter ;
39+ private final int recentlyJoinedDays ;
3940
4041 private final HelpSystemHelper helper ;
4142 private final ModAuditLogWriter modAuditLogWriter ;
@@ -56,6 +57,13 @@ public AutoPruneHelperRoutine(Config config, HelpSystemHelper helper,
5657 this .helper = helper ;
5758 this .modAuditLogWriter = modAuditLogWriter ;
5859 this .database = database ;
60+
61+ HelperPruneConfig helperPruneConfig = config .getHelperPruneConfig ();
62+ roleFullLimit = helperPruneConfig .roleFullLimit ();
63+ roleFullThreshold = helperPruneConfig .roleFullThreshold ();
64+ pruneMemberAmount = helperPruneConfig .pruneMemberAmount ();
65+ inactiveAfter = Period .ofDays (helperPruneConfig .inactivateAfterDays ());
66+ recentlyJoinedDays = helperPruneConfig .recentlyJoinedDays ();
5967 }
6068
6169 @ Override
@@ -93,7 +101,7 @@ private void pruneRoleIfFull(Role role, ForumChannel helpForum, Instant when) {
93101 }
94102
95103 private boolean isRoleFull (Collection <?> members ) {
96- return members .size () >= ROLE_FULL_THRESHOLD ;
104+ return members .size () >= roleFullThreshold ;
97105 }
98106
99107 private void pruneRole (Role role , List <? extends Member > members , ForumChannel helpForum ,
@@ -103,18 +111,18 @@ private void pruneRole(Role role, List<? extends Member> members, ForumChannel h
103111
104112 List <Member > membersToPrune = membersShuffled .stream ()
105113 .filter (member -> isMemberInactive (member , when ))
106- .limit (PRUNE_MEMBER_AMOUNT )
114+ .limit (pruneMemberAmount )
107115 .toList ();
108- if (membersToPrune .size () < PRUNE_MEMBER_AMOUNT ) {
116+ if (membersToPrune .size () < pruneMemberAmount ) {
109117 warnModsAbout (
110118 "Attempting to prune helpers from role **%s** (%d members), but only found %d inactive users. That is less than expected, the category might eventually grow beyond the limit."
111119 .formatted (role .getName (), members .size (), membersToPrune .size ()),
112120 role .getGuild ());
113121 }
114- if (members .size () - membersToPrune .size () >= ROLE_FULL_LIMIT ) {
122+ if (members .size () - membersToPrune .size () >= roleFullLimit ) {
115123 warnModsAbout (
116124 "The helper role **%s** went beyond its member limit (%d), despite automatic pruning. It will not function correctly anymore. Please manually prune some users."
117- .formatted (role .getName (), ROLE_FULL_LIMIT ),
125+ .formatted (role .getName (), roleFullLimit ),
118126 role .getGuild ());
119127 }
120128
@@ -126,14 +134,14 @@ private void pruneRole(Role role, List<? extends Member> members, ForumChannel h
126134 private boolean isMemberInactive (Member member , Instant when ) {
127135 if (member .hasTimeJoined ()) {
128136 Instant memberJoined = member .getTimeJoined ().toInstant ();
129- if (Duration .between (memberJoined , when ).toDays () <= RECENTLY_JOINED_DAYS ) {
137+ if (Duration .between (memberJoined , when ).toDays () <= recentlyJoinedDays ) {
130138 // New users are protected from purging to not immediately kick them out of the role
131139 // again
132140 return false ;
133141 }
134142 }
135143
136- Instant latestActiveMoment = when .minus (INACTIVE_AFTER );
144+ Instant latestActiveMoment = when .minus (inactiveAfter );
137145
138146 // Has no recent help message
139147 return database .read (context -> context .fetchCount (HELP_CHANNEL_MESSAGES ,
0 commit comments