9
9
import org .slf4j .LoggerFactory ;
10
10
11
11
import org .togetherjava .tjbot .config .Config ;
12
+ import org .togetherjava .tjbot .config .HelperPruneConfig ;
12
13
import org .togetherjava .tjbot .db .Database ;
13
14
import org .togetherjava .tjbot .features .Routine ;
14
15
import org .togetherjava .tjbot .features .moderation .audit .ModAuditLogWriter ;
31
32
public final class AutoPruneHelperRoutine implements Routine {
32
33
private static final Logger logger = LoggerFactory .getLogger (AutoPruneHelperRoutine .class );
33
34
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 ;
39
40
40
41
private final HelpSystemHelper helper ;
41
42
private final ModAuditLogWriter modAuditLogWriter ;
@@ -56,6 +57,13 @@ public AutoPruneHelperRoutine(Config config, HelpSystemHelper helper,
56
57
this .helper = helper ;
57
58
this .modAuditLogWriter = modAuditLogWriter ;
58
59
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 ();
59
67
}
60
68
61
69
@ Override
@@ -93,7 +101,7 @@ private void pruneRoleIfFull(Role role, ForumChannel helpForum, Instant when) {
93
101
}
94
102
95
103
private boolean isRoleFull (Collection <?> members ) {
96
- return members .size () >= ROLE_FULL_THRESHOLD ;
104
+ return members .size () >= roleFullThreshold ;
97
105
}
98
106
99
107
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
103
111
104
112
List <Member > membersToPrune = membersShuffled .stream ()
105
113
.filter (member -> isMemberInactive (member , when ))
106
- .limit (PRUNE_MEMBER_AMOUNT )
114
+ .limit (pruneMemberAmount )
107
115
.toList ();
108
- if (membersToPrune .size () < PRUNE_MEMBER_AMOUNT ) {
116
+ if (membersToPrune .size () < pruneMemberAmount ) {
109
117
warnModsAbout (
110
118
"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."
111
119
.formatted (role .getName (), members .size (), membersToPrune .size ()),
112
120
role .getGuild ());
113
121
}
114
- if (members .size () - membersToPrune .size () >= ROLE_FULL_LIMIT ) {
122
+ if (members .size () - membersToPrune .size () >= roleFullLimit ) {
115
123
warnModsAbout (
116
124
"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 ),
118
126
role .getGuild ());
119
127
}
120
128
@@ -126,14 +134,14 @@ private void pruneRole(Role role, List<? extends Member> members, ForumChannel h
126
134
private boolean isMemberInactive (Member member , Instant when ) {
127
135
if (member .hasTimeJoined ()) {
128
136
Instant memberJoined = member .getTimeJoined ().toInstant ();
129
- if (Duration .between (memberJoined , when ).toDays () <= RECENTLY_JOINED_DAYS ) {
137
+ if (Duration .between (memberJoined , when ).toDays () <= recentlyJoinedDays ) {
130
138
// New users are protected from purging to not immediately kick them out of the role
131
139
// again
132
140
return false ;
133
141
}
134
142
}
135
143
136
- Instant latestActiveMoment = when .minus (INACTIVE_AFTER );
144
+ Instant latestActiveMoment = when .minus (inactiveAfter );
137
145
138
146
// Has no recent help message
139
147
return database .read (context -> context .fetchCount (HELP_CHANNEL_MESSAGES ,
0 commit comments