Skip to content

Commit e961445

Browse files
committed
Added MemberCounter Routine
1 parent 2148821 commit e961445

File tree

4 files changed

+65
-4
lines changed

4 files changed

+65
-4
lines changed

application/config.json.template

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,7 @@
110110
"special": [
111111
]
112112
},
113+
"memberCountCategoryName": "Info",
114+
"updateMemberCountEveryHour", "12",
113115
"selectRolesChannelPattern": "select-your-roles"
114116
}

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public final class Config {
4444
private final HelperPruneConfig helperPruneConfig;
4545
private final FeatureBlacklistConfig featureBlacklistConfig;
4646
private final String selectRolesChannelPattern;
47+
private final String updateMemberCountEveryHour;
48+
private final String memberCountCategoryName;
4749

4850
@SuppressWarnings("ConstructorWithTooManyParameters")
4951
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
@@ -86,6 +88,8 @@ 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,
92+
@JsonProperty(value = "updateMemberCountEveryHour") String updateMemberCountEveryHour,
8993
@JsonProperty(value = "helperPruneConfig",
9094
required = true) HelperPruneConfig helperPruneConfig,
9195
@JsonProperty(value = "featureBlacklist",
@@ -96,6 +100,8 @@ private Config(@JsonProperty(value = "token", required = true) String token,
96100
this.githubApiKey = Objects.requireNonNull(githubApiKey);
97101
this.databasePath = Objects.requireNonNull(databasePath);
98102
this.projectWebsite = Objects.requireNonNull(projectWebsite);
103+
this.memberCountCategoryName = memberCountCategoryName;
104+
this.updateMemberCountEveryHour = updateMemberCountEveryHour;
99105
this.discordGuildInvite = Objects.requireNonNull(discordGuildInvite);
100106
this.modAuditLogChannelPattern = Objects.requireNonNull(modAuditLogChannelPattern);
101107
this.modMailChannelPattern = Objects.requireNonNull(modMailChannelPattern);
@@ -405,4 +411,17 @@ public FeatureBlacklistConfig getFeatureBlacklistConfig() {
405411
public String getSelectRolesChannelPattern() {
406412
return selectRolesChannelPattern;
407413
}
414+
415+
/**
416+
* Gets the categories by this name to showcase the total member count of the server.
417+
*
418+
* @return the categories name types
419+
*/
420+
public String getMemberCountCategoryName() {
421+
return memberCountCategoryName;
422+
}
423+
424+
public String getupdateMemberCountEveryHour() {
425+
return updateMemberCountEveryHour;
426+
}
408427
}

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 MemberCountDisplayRoutine(config));
112110

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

0 commit comments

Comments
 (0)