Skip to content

Commit 6aee3ba

Browse files
committed
fix: improve role refresh handling and make it work
1 parent 8192fdf commit 6aee3ba

File tree

5 files changed

+395
-244
lines changed

5 files changed

+395
-244
lines changed

application/src/main/java/org/togetherjava/tjbot/Application.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
66
import net.dv8tion.jda.api.exceptions.InvalidTokenException;
77
import net.dv8tion.jda.api.requests.GatewayIntent;
8-
import net.dv8tion.jda.api.utils.ChunkingFilter;
9-
import net.dv8tion.jda.api.utils.MemberCachePolicy;
108
import org.slf4j.Logger;
119
import org.slf4j.LoggerFactory;
1210

@@ -85,8 +83,6 @@ public static void runBot(Config config) {
8583
Database database = new Database("jdbc:sqlite:" + databasePath.toAbsolutePath());
8684

8785
JDA jda = JDABuilder.createDefault(config.getToken())
88-
.setChunkingFilter(ChunkingFilter.ALL)
89-
.setMemberCachePolicy(MemberCachePolicy.ALL)
9086
.enableIntents(GatewayIntent.GUILD_MEMBERS, GatewayIntent.MESSAGE_CONTENT)
9187
.build();
9288

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import org.togetherjava.tjbot.features.bookmarks.BookmarksSystem;
1616
import org.togetherjava.tjbot.features.bookmarks.LeftoverBookmarksCleanupRoutine;
1717
import org.togetherjava.tjbot.features.bookmarks.LeftoverBookmarksListener;
18+
import org.togetherjava.tjbot.features.cakeday.CakeDayListener;
1819
import org.togetherjava.tjbot.features.cakeday.CakeDayRoutine;
20+
import org.togetherjava.tjbot.features.cakeday.CakeDayService;
1921
import org.togetherjava.tjbot.features.chatgpt.ChatGptCommand;
2022
import org.togetherjava.tjbot.features.chatgpt.ChatGptService;
2123
import org.togetherjava.tjbot.features.code.CodeMessageAutoDetection;
@@ -116,6 +118,7 @@ public static Collection<Feature> createFeatures(JDA jda, Database database, Con
116118
new CodeMessageHandler(blacklistConfig.special(), jshellEval);
117119
ChatGptService chatGptService = new ChatGptService(config);
118120
HelpSystemHelper helpSystemHelper = new HelpSystemHelper(config, database, chatGptService);
121+
CakeDayService cakeDayService = new CakeDayService(config, database);
119122
HelpThreadLifecycleListener helpThreadLifecycleListener =
120123
new HelpThreadLifecycleListener(helpSystemHelper, database);
121124

@@ -136,7 +139,7 @@ public static Collection<Feature> createFeatures(JDA jda, Database database, Con
136139
features.add(new LeftoverBookmarksCleanupRoutine(bookmarksSystem));
137140
features.add(new MarkHelpThreadCloseInDBRoutine(database, helpThreadLifecycleListener));
138141
features.add(new MemberCountDisplayRoutine(config));
139-
features.add(new CakeDayRoutine(config, database));
142+
features.add(new CakeDayRoutine(cakeDayService));
140143
features.add(new RSSHandlerRoutine(config, database));
141144

142145
// Message receivers
@@ -158,6 +161,7 @@ public static Collection<Feature> createFeatures(JDA jda, Database database, Con
158161
features.add(new GuildLeaveCloseThreadListener(config));
159162
features.add(new LeftoverBookmarksListener(bookmarksSystem));
160163
features.add(new HelpThreadCreatedListener(helpSystemHelper));
164+
features.add(new CakeDayListener(cakeDayService));
161165
features.add(new HelpThreadLifecycleListener(helpSystemHelper, database));
162166

163167
// Message context commands
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package org.togetherjava.tjbot.features.cakeday;
2+
3+
import net.dv8tion.jda.api.entities.Guild;
4+
import net.dv8tion.jda.api.entities.Member;
5+
import net.dv8tion.jda.api.entities.User;
6+
import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent;
7+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
8+
import net.dv8tion.jda.api.hooks.ListenerAdapter;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
import org.togetherjava.tjbot.db.generated.tables.records.CakeDaysRecord;
12+
import org.togetherjava.tjbot.features.EventReceiver;
13+
14+
import java.util.Optional;
15+
16+
/**
17+
* A listener class responsible for handling cake day related events.
18+
*/
19+
public class CakeDayListener extends ListenerAdapter implements EventReceiver {
20+
21+
private final CakeDayService cakeDayService;
22+
23+
/**
24+
* Constructs a new CakeDayListener with the given {@link CakeDayService}.
25+
*
26+
* @param cakeDayService the {@link CakeDayService} to be used by this listener
27+
*/
28+
public CakeDayListener(CakeDayService cakeDayService) {
29+
this.cakeDayService = cakeDayService;
30+
}
31+
32+
/**
33+
* Handles the event of a message being received in a guild.
34+
* <p>
35+
* It caches the user's cake day and inserts the member's cake day into the database if not
36+
* already present.
37+
*
38+
* @param event the {@link MessageReceivedEvent} representing the message received
39+
*/
40+
@Override
41+
public void onMessageReceived(@NotNull MessageReceivedEvent event) {
42+
User author = event.getAuthor();
43+
Member member = event.getMember();
44+
long authorId = author.getIdLong();
45+
long guildId = event.getGuild().getIdLong();
46+
47+
if (member == null || author.isBot() || author.isSystem()) {
48+
return;
49+
}
50+
51+
52+
if (cakeDayService.hasMemberCakeDayToday(member)) {
53+
cakeDayService.addCakeDayRole(member);
54+
return;
55+
}
56+
57+
if (cakeDayService.isUserCached(author)) {
58+
return;
59+
}
60+
61+
cakeDayService.addToCache(author);
62+
Optional<CakeDaysRecord> cakeDaysRecord =
63+
cakeDayService.findUserCakeDayFromDatabase(authorId);
64+
if (cakeDaysRecord.isPresent()) {
65+
return;
66+
}
67+
68+
cakeDayService.insertMemberCakeDayToDatabase(member, guildId);
69+
}
70+
71+
/**
72+
* Handles the event of a guild member being removed from the guild. It removes the user's cake
73+
* day information from the database if present.
74+
*
75+
* @param event the {@link GuildMemberRemoveEvent} representing the member removal event
76+
*/
77+
@Override
78+
public void onGuildMemberRemove(GuildMemberRemoveEvent event) {
79+
User user = event.getUser();
80+
Guild guild = event.getGuild();
81+
82+
cakeDayService.handleUserLeft(user, guild);
83+
}
84+
}

0 commit comments

Comments
 (0)