From b1f181e2927ea48be1f6cad4a60e76993e3d5189 Mon Sep 17 00:00:00 2001 From: Arshadul Monir Date: Fri, 6 Feb 2026 14:39:08 -0500 Subject: [PATCH 1/3] 697: Added repository function to get DiscordClub by guildId 697: Added repository function to get DiscordClub by guildId --- .../discord/club/DiscordClubRepository.java | 3 ++ .../club/DiscordClubSqlRepository.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubRepository.java b/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubRepository.java index 082208e66..c3b685f58 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubRepository.java +++ b/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubRepository.java @@ -4,6 +4,7 @@ import java.util.Optional; import org.patinanetwork.codebloom.common.db.models.discord.DiscordClub; + public interface DiscordClubRepository { /** * Creates a new DiscordClub in the database. @@ -36,4 +37,6 @@ public interface DiscordClubRepository { boolean updateDiscordClubById(DiscordClub discordClub); boolean deleteDiscordClubById(String id); + + Optional getDiscordClubByGuildId(String guildId); } diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubSqlRepository.java b/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubSqlRepository.java index 610aae292..0506fb158 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubSqlRepository.java +++ b/src/main/java/org/patinanetwork/codebloom/common/db/repos/discord/club/DiscordClubSqlRepository.java @@ -174,4 +174,32 @@ public List getAllActiveDiscordClubs() { } return result; } + + @Override + public Optional getDiscordClubByGuildId(String guildId) { + String sql = """ + SELECT + dc.* + FROM + "DiscordClub" dc + INNER JOIN + "DiscordClubMetadata" dcm + ON + dc.id = dcm."discordClubId" + WHERE + dcm."guildId" = :guildId + """; + try (Connection conn = ds.getConnection(); + NamedPreparedStatement stmt = new NamedPreparedStatement(conn, sql)) { + stmt.setObject("guildId", guildId); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return Optional.of(parseResultSetTDiscordClub(rs)); + } + } + } catch (SQLException e) { + throw new RuntimeException("Failed to get DiscordClub by guildId", e); + } + return Optional.empty(); + } } From 3bdba0ca00f6b2df53c44589891257b3e29cf840 Mon Sep 17 00:00:00 2001 From: Arshadul Monir Date: Fri, 6 Feb 2026 23:35:50 -0500 Subject: [PATCH 2/3] 697: Added leaderboard command to discord bot --- .../common/components/DiscordClubManager.java | 89 +++++++++++++++++++ .../codebloom/jda/JDAEventListener.java | 23 +++++ 2 files changed, 112 insertions(+) diff --git a/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java b/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java index 196eb1af9..46eaa8b64 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java +++ b/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java @@ -245,4 +245,93 @@ public void sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs() { var discordClubs = discordClubRepository.getAllActiveDiscordClubs(); discordClubs.forEach(this::sendWeeklyLeaderboardUpdateDiscordMessage); } + + public void sendWeeklyLeaderboardUpdateDiscordMessageForClub(String guildId) { + System.out.println("working"); + DiscordClub club = discordClubRepository.getDiscordClubByGuildId(guildId).get(); + var latestLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); + + LeaderboardFilterOptions options = LeaderboardFilterGenerator.builderWithTag(club.getTag()) + .page(1) + .pageSize(5) + .build(); + + List users = LeaderboardUtils.filterUsersWithPoints( + leaderboardRepository.getLeaderboardUsersById(latestLeaderboard.getId(), options)); + + Leaderboard currentLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); + + LocalDateTime shouldExpireByTime = Optional.ofNullable(currentLeaderboard.getShouldExpireBy()) + .orElse(StandardizedLocalDateTime.now()); + + Duration remaining = Duration.between(StandardizedLocalDateTime.now(), shouldExpireByTime); + + long daysLeft = remaining.toDays(); + long hoursLeft = remaining.toHours() % 24; + long minutesLeft = remaining.toMinutes() % 60; + + String description = String.format( + """ + Dear %s users, + + Here is a weekly update on the LeetCode leaderboard for our very own members! + + 🥇- <@%s> - %s pts + 🥈- <@%s> - %s pts + 🥉- <@%s> - %s pts + + To view the rest of the members, visit the website or check out the image embedded in this message! + + Just as a reminder, there's %d day(s), %d hour(s), and %d minute(s) left until the leaderboard closes, so keep grinding! + + View the full leaderboard for %s users at https://codebloom.patinanetwork.org/leaderboard?%s=true + + + See you next week! + + Beep boop, + Codebloom + <%s> + """, + club.getName(), + getUser(users, 0).map(UserWithScore::getDiscordId).orElse("N/A"), + getUser(users, 0) + .map(UserWithScore::getTotalScore) + .map(String::valueOf) + .orElse("N/A"), + getUser(users, 1).map(UserWithScore::getDiscordId).orElse("N/A"), + getUser(users, 1) + .map(UserWithScore::getTotalScore) + .map(String::valueOf) + .orElse("N/A"), + getUser(users, 2).map(UserWithScore::getDiscordId).orElse("N/A"), + getUser(users, 2) + .map(UserWithScore::getTotalScore) + .map(String::valueOf) + .orElse("N/A"), + daysLeft, + hoursLeft, + minutesLeft, + club.getName(), + club.getTag().name().toLowerCase(), + serverUrlUtils.getUrl()); + + var channelId = club.getDiscordClubMetadata().flatMap(DiscordClubMetadata::getLeaderboardChannelId); + + if (guildId.isEmpty() || channelId.isEmpty()) { + log.error("club {} is skipped because of missing metadata", club.getName()); + return; + } + + jdaClient.sendEmbedWithImages(EmbeddedImagesMessageOptions.builder() + .guildId(Long.valueOf(guildId)) + .channelId(Long.valueOf(channelId.get())) + .description(description) + .title("%s - Weekly Leaderboard Update for %s" + .formatted(currentLeaderboard.getName(), club.getName())) + .footerText("Codebloom - LeetCode Leaderboard for %s".formatted(club.getName())) + .footerIcon("%s/favicon.ico".formatted(serverUrlUtils.getUrl())) + .color(new Color(69, 129, 103)) + .build()); + } } diff --git a/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java b/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java index 0a80e5988..41e484ba8 100644 --- a/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java +++ b/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java @@ -1,14 +1,37 @@ package org.patinanetwork.codebloom.jda; +import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.events.session.ReadyEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.springframework.stereotype.Component; +import org.patinanetwork.codebloom.common.components.DiscordClubManager; /** Do not remove this. JDA requires at least one listener in order to function. */ @Component public class JDAEventListener extends ListenerAdapter { + private final DiscordClubManager discordClubManager; + + public JDAEventListener(final DiscordClubManager discordClubManager) { + this.discordClubManager = discordClubManager; + } + public void say(final SlashCommandInteractionEvent event, final String content) { event.reply(content).queue(); // This requires no permissions! } + + @Override + public void onReady(final ReadyEvent event) { + for (Guild guild: event.getJDA().getGuilds()) { + guild.upsertCommand("leaderboard", "Shows the current weekly leaderboard").queue(); + } + } + + @Override + public void onSlashCommandInteraction(final SlashCommandInteractionEvent event) { + if (event.getName().equals("leaderboard")) { + discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageForClub(event.getGuild().getId()); + } + } } From 9a5a2044df5d8d99c0d63bd71f7880454fda951f Mon Sep 17 00:00:00 2001 From: Tahmid Ahmed Date: Sat, 7 Feb 2026 00:23:42 -0500 Subject: [PATCH 3/3] 697: Clean up JDA initialization logic & invert dependency logic so that JDAEventListener takes JDA and registers it (so after initial JDA creation) --- .../CustomAuthenticationSuccessHandler.java | 2 +- .../common/components/DiscordClubManager.java | 112 +++++++++--------- ...Initializer.java => JDAClientManager.java} | 13 +- .../codebloom/jda/JDAEventListener.java | 16 ++- .../codebloom/jda/client/JDAClient.java | 38 +----- .../components/DiscordClubManagerTest.java | 12 -- .../common/db/repos/BaseRepositoryTest.java | 4 +- .../codebloom/config/NoJdaRequired.java | 4 +- 8 files changed, 80 insertions(+), 121 deletions(-) rename src/main/java/org/patinanetwork/codebloom/jda/{JDAInitializer.java => JDAClientManager.java} (77%) diff --git a/src/main/java/org/patinanetwork/codebloom/api/auth/security/CustomAuthenticationSuccessHandler.java b/src/main/java/org/patinanetwork/codebloom/api/auth/security/CustomAuthenticationSuccessHandler.java index 8a9fedf93..698a43f61 100644 --- a/src/main/java/org/patinanetwork/codebloom/api/auth/security/CustomAuthenticationSuccessHandler.java +++ b/src/main/java/org/patinanetwork/codebloom/api/auth/security/CustomAuthenticationSuccessHandler.java @@ -70,7 +70,7 @@ public CustomAuthenticationSuccessHandler( this.sessionRepository = sessionRepository; this.leaderboardRepository = leaderboardRepository; this.discordClubRepository = discordClubRepository; - this.jdaClient = jdaClient.connect(); + this.jdaClient = jdaClient; this.userTagRepository = userTagRepository; this.leetcodeClient = throttledLeetcodeClient; } diff --git a/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java b/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java index 46eaa8b64..0db931def 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java +++ b/src/main/java/org/patinanetwork/codebloom/common/components/DiscordClubManager.java @@ -64,7 +64,6 @@ private Optional getUser(final List users, final i */ private void sendLeaderboardCompletedDiscordMessage(final DiscordClub club) { log.info("Connecting to JDA client..."); - jdaClient.connect(); try { var latestLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); @@ -143,7 +142,6 @@ private void sendLeaderboardCompletedDiscordMessage(final DiscordClub club) { private void sendWeeklyLeaderboardUpdateDiscordMessage(final DiscordClub club) { log.info("Connecting to JDA client..."); - jdaClient.connect(); try { var latestLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); @@ -248,30 +246,31 @@ public void sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs() { public void sendWeeklyLeaderboardUpdateDiscordMessageForClub(String guildId) { System.out.println("working"); - DiscordClub club = discordClubRepository.getDiscordClubByGuildId(guildId).get(); + DiscordClub club = + discordClubRepository.getDiscordClubByGuildId(guildId).get(); var latestLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); - LeaderboardFilterOptions options = LeaderboardFilterGenerator.builderWithTag(club.getTag()) - .page(1) - .pageSize(5) - .build(); + LeaderboardFilterOptions options = LeaderboardFilterGenerator.builderWithTag(club.getTag()) + .page(1) + .pageSize(5) + .build(); - List users = LeaderboardUtils.filterUsersWithPoints( - leaderboardRepository.getLeaderboardUsersById(latestLeaderboard.getId(), options)); + List users = LeaderboardUtils.filterUsersWithPoints( + leaderboardRepository.getLeaderboardUsersById(latestLeaderboard.getId(), options)); - Leaderboard currentLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); + Leaderboard currentLeaderboard = leaderboardRepository.getRecentLeaderboardMetadata(); - LocalDateTime shouldExpireByTime = Optional.ofNullable(currentLeaderboard.getShouldExpireBy()) - .orElse(StandardizedLocalDateTime.now()); + LocalDateTime shouldExpireByTime = + Optional.ofNullable(currentLeaderboard.getShouldExpireBy()).orElse(StandardizedLocalDateTime.now()); - Duration remaining = Duration.between(StandardizedLocalDateTime.now(), shouldExpireByTime); + Duration remaining = Duration.between(StandardizedLocalDateTime.now(), shouldExpireByTime); - long daysLeft = remaining.toDays(); - long hoursLeft = remaining.toHours() % 24; - long minutesLeft = remaining.toMinutes() % 60; + long daysLeft = remaining.toDays(); + long hoursLeft = remaining.toHours() % 24; + long minutesLeft = remaining.toMinutes() % 60; - String description = String.format( - """ + String description = String.format( + """ Dear %s users, Here is a weekly update on the LeetCode leaderboard for our very own members! @@ -293,45 +292,44 @@ public void sendWeeklyLeaderboardUpdateDiscordMessageForClub(String guildId) { Codebloom <%s> """, - club.getName(), - getUser(users, 0).map(UserWithScore::getDiscordId).orElse("N/A"), - getUser(users, 0) - .map(UserWithScore::getTotalScore) - .map(String::valueOf) - .orElse("N/A"), - getUser(users, 1).map(UserWithScore::getDiscordId).orElse("N/A"), - getUser(users, 1) - .map(UserWithScore::getTotalScore) - .map(String::valueOf) - .orElse("N/A"), - getUser(users, 2).map(UserWithScore::getDiscordId).orElse("N/A"), - getUser(users, 2) - .map(UserWithScore::getTotalScore) - .map(String::valueOf) - .orElse("N/A"), - daysLeft, - hoursLeft, - minutesLeft, - club.getName(), - club.getTag().name().toLowerCase(), - serverUrlUtils.getUrl()); - - var channelId = club.getDiscordClubMetadata().flatMap(DiscordClubMetadata::getLeaderboardChannelId); - - if (guildId.isEmpty() || channelId.isEmpty()) { - log.error("club {} is skipped because of missing metadata", club.getName()); - return; - } + club.getName(), + getUser(users, 0).map(UserWithScore::getDiscordId).orElse("N/A"), + getUser(users, 0) + .map(UserWithScore::getTotalScore) + .map(String::valueOf) + .orElse("N/A"), + getUser(users, 1).map(UserWithScore::getDiscordId).orElse("N/A"), + getUser(users, 1) + .map(UserWithScore::getTotalScore) + .map(String::valueOf) + .orElse("N/A"), + getUser(users, 2).map(UserWithScore::getDiscordId).orElse("N/A"), + getUser(users, 2) + .map(UserWithScore::getTotalScore) + .map(String::valueOf) + .orElse("N/A"), + daysLeft, + hoursLeft, + minutesLeft, + club.getName(), + club.getTag().name().toLowerCase(), + serverUrlUtils.getUrl()); + + var channelId = club.getDiscordClubMetadata().flatMap(DiscordClubMetadata::getLeaderboardChannelId); + + if (guildId.isEmpty() || channelId.isEmpty()) { + log.error("club {} is skipped because of missing metadata", club.getName()); + return; + } - jdaClient.sendEmbedWithImages(EmbeddedImagesMessageOptions.builder() - .guildId(Long.valueOf(guildId)) - .channelId(Long.valueOf(channelId.get())) - .description(description) - .title("%s - Weekly Leaderboard Update for %s" - .formatted(currentLeaderboard.getName(), club.getName())) - .footerText("Codebloom - LeetCode Leaderboard for %s".formatted(club.getName())) - .footerIcon("%s/favicon.ico".formatted(serverUrlUtils.getUrl())) - .color(new Color(69, 129, 103)) - .build()); + jdaClient.sendEmbedWithImages(EmbeddedImagesMessageOptions.builder() + .guildId(Long.valueOf(guildId)) + .channelId(Long.valueOf(channelId.get())) + .description(description) + .title("%s - Weekly Leaderboard Update for %s".formatted(currentLeaderboard.getName(), club.getName())) + .footerText("Codebloom - LeetCode Leaderboard for %s".formatted(club.getName())) + .footerIcon("%s/favicon.ico".formatted(serverUrlUtils.getUrl())) + .color(new Color(69, 129, 103)) + .build()); } } diff --git a/src/main/java/org/patinanetwork/codebloom/jda/JDAInitializer.java b/src/main/java/org/patinanetwork/codebloom/jda/JDAClientManager.java similarity index 77% rename from src/main/java/org/patinanetwork/codebloom/jda/JDAInitializer.java rename to src/main/java/org/patinanetwork/codebloom/jda/JDAClientManager.java index 667560054..a85ee8143 100644 --- a/src/main/java/org/patinanetwork/codebloom/jda/JDAInitializer.java +++ b/src/main/java/org/patinanetwork/codebloom/jda/JDAClientManager.java @@ -8,7 +8,6 @@ import net.dv8tion.jda.api.utils.MemberCachePolicy; import org.patinanetwork.codebloom.jda.properties.JDAProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; /** @@ -17,25 +16,23 @@ */ @Component @EnableConfigurationProperties(JDAProperties.class) -public class JDAInitializer { +public class JDAClientManager { - @Getter private final JDAProperties jdaProperties; - private final JDAEventListener jdaEventListener; + @Getter + private final JDA client; - public JDAInitializer(final JDAProperties jdaProperties, final JDAEventListener jdaEventListener) { + public JDAClientManager(final JDAProperties jdaProperties) throws InterruptedException { this.jdaProperties = jdaProperties; - this.jdaEventListener = jdaEventListener; + this.client = initializeJda(); } - @Bean public JDA initializeJda() throws InterruptedException { final JDA jda = JDABuilder.createDefault(jdaProperties.getToken()) .enableIntents(GatewayIntent.GUILD_MEMBERS) .setChunkingFilter(ChunkingFilter.ALL) .setMemberCachePolicy(MemberCachePolicy.ALL) - .addEventListeners(jdaEventListener) .build(); jda.awaitReady(); diff --git a/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java b/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java index 41e484ba8..3ced04bad 100644 --- a/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java +++ b/src/main/java/org/patinanetwork/codebloom/jda/JDAEventListener.java @@ -1,20 +1,24 @@ package org.patinanetwork.codebloom.jda; +import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.session.ReadyEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import org.springframework.stereotype.Component; import org.patinanetwork.codebloom.common.components.DiscordClubManager; +import org.springframework.stereotype.Component; /** Do not remove this. JDA requires at least one listener in order to function. */ @Component public class JDAEventListener extends ListenerAdapter { private final DiscordClubManager discordClubManager; + private final JDA client; - public JDAEventListener(final DiscordClubManager discordClubManager) { + public JDAEventListener(final DiscordClubManager discordClubManager, final JDAClientManager clientManager) { this.discordClubManager = discordClubManager; + this.client = clientManager.getClient(); + client.addEventListener(this); } public void say(final SlashCommandInteractionEvent event, final String content) { @@ -23,15 +27,17 @@ public void say(final SlashCommandInteractionEvent event, final String content) @Override public void onReady(final ReadyEvent event) { - for (Guild guild: event.getJDA().getGuilds()) { - guild.upsertCommand("leaderboard", "Shows the current weekly leaderboard").queue(); + for (Guild guild : event.getJDA().getGuilds()) { + guild.upsertCommand("leaderboard", "Shows the current weekly leaderboard") + .queue(); } } @Override public void onSlashCommandInteraction(final SlashCommandInteractionEvent event) { if (event.getName().equals("leaderboard")) { - discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageForClub(event.getGuild().getId()); + discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageForClub( + event.getGuild().getId()); } } } diff --git a/src/main/java/org/patinanetwork/codebloom/jda/client/JDAClient.java b/src/main/java/org/patinanetwork/codebloom/jda/client/JDAClient.java index 93b155d02..7cca855cd 100644 --- a/src/main/java/org/patinanetwork/codebloom/jda/client/JDAClient.java +++ b/src/main/java/org/patinanetwork/codebloom/jda/client/JDAClient.java @@ -12,7 +12,7 @@ import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; import net.dv8tion.jda.api.utils.FileUpload; -import org.patinanetwork.codebloom.jda.JDAInitializer; +import org.patinanetwork.codebloom.jda.JDAClientManager; import org.patinanetwork.codebloom.jda.client.options.EmbeddedImagesMessageOptions; import org.patinanetwork.codebloom.jda.client.options.EmbeddedMessageOptions; import org.patinanetwork.codebloom.jda.properties.patina.JDAPatinaProperties; @@ -32,8 +32,7 @@ }) public class JDAClient { - private final JDAInitializer jdaInitializer; - private JDA jda; + private final JDA jda; @Getter private final JDAPatinaProperties jdaPatinaProperties; @@ -45,48 +44,22 @@ public class JDAClient { private final JDALogReportingProperties jdaLogReportingProperties; JDAClient( - final JDAInitializer jdaInitializer, + final JDAClientManager jdaClientManager, final JDAPatinaProperties jdaPatinaProperties, final JDAErrorReportingProperties jdaReportingProperties, final JDALogReportingProperties jdaLogReportingProperties) { - this.jdaInitializer = jdaInitializer; + this.jda = jdaClientManager.getClient(); this.jdaPatinaProperties = jdaPatinaProperties; this.jdaErrorReportingProperties = jdaReportingProperties; this.jdaLogReportingProperties = jdaLogReportingProperties; } - private void isJdaReadyOrThrow() { - if (jda == null) { - throw new RuntimeException("You must call connect() first."); - } - - try { - jda.awaitReady(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.error("Something went wrong when awaiting JDA", e); - throw new RuntimeException("Something went wrong when awaiting JDA", e); - } - } - - /** Initializes the JDAClient. Returns the client object on completion. */ - public JDAClient connect() { - try { - jda = jdaInitializer.initializeJda(); - return this; - } catch (InterruptedException e) { - throw new RuntimeException("Failed to initialize JDA client", e); - } - } - public List getGuilds() { - isJdaReadyOrThrow(); return jda.getGuilds(); } public Guild getGuildById(final long guildId) { String guildIdString = String.valueOf(guildId); - isJdaReadyOrThrow(); return jda.getGuilds().stream() .filter(g -> g.getId().equals(guildIdString)) .findFirst() @@ -94,7 +67,6 @@ public Guild getGuildById(final long guildId) { } public List getMemberListByGuildId(final String guildId) { - isJdaReadyOrThrow(); List guilds = jda.getGuilds(); Optional optionalGuild = @@ -113,7 +85,6 @@ public List getMemberListByGuildId(final String guildId) { *

Check EmbeddedMessageOptions for details on what is supported. */ public void sendEmbedWithImage(final EmbeddedMessageOptions options) { - isJdaReadyOrThrow(); Guild guild = getGuildById(options.getGuildId()); if (guild == null) { log.error("Guild does not exist."); @@ -147,7 +118,6 @@ public void sendEmbedWithImage(final EmbeddedMessageOptions options) { } public void sendEmbedWithImages(final EmbeddedImagesMessageOptions options) { - isJdaReadyOrThrow(); Guild guild = getGuildById(options.getGuildId()); if (guild == null) { log.error("Guild does not exist."); diff --git a/src/test/java/org/patinanetwork/codebloom/common/components/DiscordClubManagerTest.java b/src/test/java/org/patinanetwork/codebloom/common/components/DiscordClubManagerTest.java index ce22ea8d3..c42e4ddd8 100644 --- a/src/test/java/org/patinanetwork/codebloom/common/components/DiscordClubManagerTest.java +++ b/src/test/java/org/patinanetwork/codebloom/common/components/DiscordClubManagerTest.java @@ -66,7 +66,6 @@ void testSendLeaderboardCompletedDiscordMessageToAllClubsSuccess() { discordClubManager.sendLeaderboardCompletedDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -77,7 +76,6 @@ void testSendLeaderboardCompletedDiscordMessageToAllClubsEmptyClubList() { discordClubManager.sendLeaderboardCompletedDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient, never()).connect(); verify(jdaClient, never()).sendEmbedWithImages(any()); } @@ -92,7 +90,6 @@ void testSendLeaderboardCompletedDiscordMessageToAllClubsMultipleClubs() { discordClubManager.sendLeaderboardCompletedDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient, times(2)).connect(); verify(jdaClient, times(2)).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -105,7 +102,6 @@ void testSendLeaderboardCompletedDiscordMessageMissingGuildId() { discordClubManager.sendLeaderboardCompletedDiscordMessageToAllClubs(); - verify(jdaClient).connect(); verify(jdaClient, never()).sendEmbedWithImages(any()); } @@ -119,7 +115,6 @@ void testSendWeeklyLeaderboardUpdateDiscordMessageToAllClubsSuccess() { discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -130,7 +125,6 @@ void testSendWeeklyLeaderboardUpdateDiscordMessageToAllClubsEmptyClubList() { discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient, never()).connect(); verify(jdaClient, never()).sendEmbedWithImages(any()); } @@ -143,7 +137,6 @@ void testSendWeeklyLeaderboardUpdateDiscordMessageMissingChannelId() { discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs(); - verify(jdaClient).connect(); verify(jdaClient, never()).sendEmbedWithImages(any()); } @@ -157,7 +150,6 @@ void testSendWeeklyLeaderboardUpdateWithoutExpiration() { discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -171,7 +163,6 @@ void testSendLeaderboardCompletedDiscordMessageFiltersZeroPointUsers() { discordClubManager.sendLeaderboardCompletedDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -185,7 +176,6 @@ void testSendLeaderboardCompletedDiscordMessageAllUsersHaveZeroPoints() { discordClubManager.sendLeaderboardCompletedDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -199,7 +189,6 @@ void testSendWeeklyLeaderboardUpdateDiscordMessageFiltersZeroPointUsers() { discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } @@ -213,7 +202,6 @@ void testSendWeeklyLeaderboardUpdateDiscordMessageAllUsersHaveZeroPoints() { discordClubManager.sendWeeklyLeaderboardUpdateDiscordMessageToAllClubs(); verify(discordClubRepository).getAllActiveDiscordClubs(); - verify(jdaClient).connect(); verify(jdaClient).sendEmbedWithImages(any(EmbeddedImagesMessageOptions.class)); } diff --git a/src/test/java/org/patinanetwork/codebloom/common/db/repos/BaseRepositoryTest.java b/src/test/java/org/patinanetwork/codebloom/common/db/repos/BaseRepositoryTest.java index 4b9b76dec..c3ee54818 100644 --- a/src/test/java/org/patinanetwork/codebloom/common/db/repos/BaseRepositoryTest.java +++ b/src/test/java/org/patinanetwork/codebloom/common/db/repos/BaseRepositoryTest.java @@ -2,7 +2,7 @@ import org.patinanetwork.codebloom.common.email.client.codebloom.OfficialCodebloomEmail; import org.patinanetwork.codebloom.common.email.client.github.GithubOAuthEmail; -import org.patinanetwork.codebloom.jda.JDAInitializer; +import org.patinanetwork.codebloom.jda.JDAClientManager; import org.springframework.test.context.bean.override.mockito.MockitoBean; /** @@ -13,7 +13,7 @@ public class BaseRepositoryTest { @MockitoBean - private JDAInitializer jdaInitializer; + private JDAClientManager jdaInitializer; @MockitoBean private OfficialCodebloomEmail codebloomEmail; diff --git a/src/test/java/org/patinanetwork/codebloom/config/NoJdaRequired.java b/src/test/java/org/patinanetwork/codebloom/config/NoJdaRequired.java index 5889f7501..7c927dc15 100644 --- a/src/test/java/org/patinanetwork/codebloom/config/NoJdaRequired.java +++ b/src/test/java/org/patinanetwork/codebloom/config/NoJdaRequired.java @@ -1,6 +1,6 @@ package org.patinanetwork.codebloom.config; -import org.patinanetwork.codebloom.jda.JDAInitializer; +import org.patinanetwork.codebloom.jda.JDAClientManager; import org.springframework.test.context.bean.override.mockito.MockitoBean; /** @@ -13,5 +13,5 @@ public class NoJdaRequired { @MockitoBean - private JDAInitializer jdaInitializer; + private JDAClientManager jdaInitializer; }