Skip to content

Commit 9c19a62

Browse files
committed
Added MemberCounter Routine
1 parent 2148821 commit 9c19a62

File tree

4 files changed

+55
-4
lines changed

4 files changed

+55
-4
lines changed

application/config.json.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,6 @@
110110
"special": [
111111
]
112112
},
113+
"memberCountCategoryName": "Info",
113114
"selectRolesChannelPattern": "select-your-roles"
114115
}

application/src/main/java/org/togetherjava/tjbot/config/Config.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public final class Config {
4545
private final FeatureBlacklistConfig featureBlacklistConfig;
4646
private final String selectRolesChannelPattern;
4747

48+
private final String memberCountCategoryName;
49+
4850
@SuppressWarnings("ConstructorWithTooManyParameters")
4951
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
5052
private Config(@JsonProperty(value = "token", required = true) String token,
@@ -86,6 +88,7 @@ private Config(@JsonProperty(value = "token", required = true) String token,
8688
@JsonProperty(value = "openaiApiKey", required = true) String openaiApiKey,
8789
@JsonProperty(value = "sourceCodeBaseUrl", required = true) String sourceCodeBaseUrl,
8890
@JsonProperty(value = "jshell", required = true) JShellConfig jshell,
91+
@JsonProperty(value = "memberCountCategoryName") String memberCountCategoryName,
8992
@JsonProperty(value = "helperPruneConfig",
9093
required = true) HelperPruneConfig helperPruneConfig,
9194
@JsonProperty(value = "featureBlacklist",
@@ -96,6 +99,7 @@ private Config(@JsonProperty(value = "token", required = true) String token,
9699
this.githubApiKey = Objects.requireNonNull(githubApiKey);
97100
this.databasePath = Objects.requireNonNull(databasePath);
98101
this.projectWebsite = Objects.requireNonNull(projectWebsite);
102+
this.memberCountCategoryName = memberCountCategoryName;
99103
this.discordGuildInvite = Objects.requireNonNull(discordGuildInvite);
100104
this.modAuditLogChannelPattern = Objects.requireNonNull(modAuditLogChannelPattern);
101105
this.modMailChannelPattern = Objects.requireNonNull(modMailChannelPattern);
@@ -405,4 +409,13 @@ public FeatureBlacklistConfig getFeatureBlacklistConfig() {
405409
public String getSelectRolesChannelPattern() {
406410
return selectRolesChannelPattern;
407411
}
412+
413+
/**
414+
* Gets the categories by this name to showcase the total member count of the server.
415+
*
416+
* @return the categories name types
417+
*/
418+
public String getMemberCountCategoryName() {
419+
return memberCountCategoryName;
420+
}
408421
}

application/src/main/java/org/togetherjava/tjbot/features/Features.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import org.togetherjava.tjbot.config.FeatureBlacklist;
99
import org.togetherjava.tjbot.config.FeatureBlacklistConfig;
1010
import org.togetherjava.tjbot.db.Database;
11-
import org.togetherjava.tjbot.features.basic.PingCommand;
12-
import org.togetherjava.tjbot.features.basic.RoleSelectCommand;
13-
import org.togetherjava.tjbot.features.basic.SlashCommandEducator;
14-
import org.togetherjava.tjbot.features.basic.SuggestionsUpDownVoter;
11+
import org.togetherjava.tjbot.features.basic.*;
1512
import org.togetherjava.tjbot.features.bookmarks.BookmarksCommand;
1613
import org.togetherjava.tjbot.features.bookmarks.BookmarksSystem;
1714
import org.togetherjava.tjbot.features.bookmarks.LeftoverBookmarksCleanupRoutine;
@@ -109,6 +106,7 @@ public static Collection<Feature> createFeatures(JDA jda, Database database, Con
109106
.add(new AutoPruneHelperRoutine(config, helpSystemHelper, modAuditLogWriter, database));
110107
features.add(new HelpThreadAutoArchiver(helpSystemHelper));
111108
features.add(new LeftoverBookmarksCleanupRoutine(bookmarksSystem));
109+
features.add(new MemberCounter(config));
112110

113111
// Message receivers
114112
features.add(new TopHelpersMessageListener(database, config));
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.togetherjava.tjbot.features.basic;
2+
3+
import net.dv8tion.jda.api.JDA;
4+
import net.dv8tion.jda.api.entities.Guild;
5+
6+
import org.togetherjava.tjbot.config.Config;
7+
import org.togetherjava.tjbot.features.Routine;
8+
9+
import java.util.List;
10+
import java.util.concurrent.TimeUnit;
11+
12+
public class MemberCounter implements Routine {
13+
private final String wordsInCategory;
14+
15+
public MemberCounter(Config config) {
16+
this.wordsInCategory = config.getMemberCountCategoryName();
17+
}
18+
19+
@Override
20+
public Schedule createSchedule() {
21+
return new Schedule(ScheduleMode.FIXED_RATE, 0, 12, TimeUnit.HOURS);
22+
}
23+
24+
@Override
25+
public void runRoutine(JDA jda) {
26+
jda.getGuilds()
27+
.stream()
28+
.map(Guild::getCategories)
29+
.flatMap(List::stream)
30+
.filter(cat -> cat.getName().contains(wordsInCategory))
31+
.forEach(category -> {
32+
int totalMemberCount = category.getGuild().getMemberCount();
33+
String basename = category.getName();
34+
category.getManager()
35+
.setName("%s - %d Members".formatted(basename, totalMemberCount))
36+
.queue();
37+
});
38+
}
39+
}

0 commit comments

Comments
 (0)