diff --git a/src/main/java/com/eternalcode/discordapp/DiscordApp.java b/src/main/java/com/eternalcode/discordapp/DiscordApp.java index 3d4effea..69c77c04 100644 --- a/src/main/java/com/eternalcode/discordapp/DiscordApp.java +++ b/src/main/java/com/eternalcode/discordapp/DiscordApp.java @@ -29,10 +29,6 @@ import com.eternalcode.discordapp.leveling.experience.ExperienceService; import com.eternalcode.discordapp.leveling.experience.listener.ExperienceMessageListener; import com.eternalcode.discordapp.leveling.experience.listener.ExperienceReactionListener; -import com.eternalcode.discordapp.leveling.games.CodeGameAnswerController; -import com.eternalcode.discordapp.leveling.games.CodeGameConfiguration; -import com.eternalcode.discordapp.leveling.games.CodeImageGameData; -import com.eternalcode.discordapp.leveling.games.GenerateImageWithCodeTask; import com.eternalcode.discordapp.leveling.leaderboard.LeaderboardButtonController; import com.eternalcode.discordapp.leveling.leaderboard.LeaderboardCommand; import com.eternalcode.discordapp.leveling.leaderboard.LeaderboardService; @@ -46,6 +42,11 @@ import com.jagrosh.jdautilities.command.CommandClient; import com.jagrosh.jdautilities.command.CommandClientBuilder; import io.sentry.Sentry; +import java.io.File; +import java.sql.SQLException; +import java.time.Duration; +import java.util.EnumSet; +import java.util.Timer; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Activity; @@ -57,12 +58,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.sql.SQLException; -import java.time.Duration; -import java.util.EnumSet; -import java.util.Timer; - public class DiscordApp { private static final Logger LOGGER = LoggerFactory.getLogger(DiscordApp.class); @@ -79,12 +74,6 @@ public static void main(String... args) throws InterruptedException { DatabaseConfig databaseConfig = configManager.load(new DatabaseConfig()); ExperienceConfig experienceConfig = configManager.load(new ExperienceConfig()); LevelConfig levelConfig = configManager.load(new LevelConfig()); - CodeGameConfiguration codeGameConfiguration = configManager.load(new CodeGameConfiguration()); - - ConfigManager data = new ConfigManager("data"); - CodeImageGameData codeImageGameData = data.load(new CodeImageGameData()); - - if (!config.sentryDsn.isEmpty()) { Sentry.init(options -> { @@ -159,9 +148,6 @@ public static void main(String... args) throws InterruptedException { // Message filter new FilterMessageEmbedController(filterService), - // Experience games - new CodeGameAnswerController(codeImageGameData, codeGameConfiguration, data, experienceService), - // leaderboard new LeaderboardButtonController(leaderboardService) ) @@ -184,6 +170,5 @@ public static void main(String... args) throws InterruptedException { Timer timer = new Timer(); timer.schedule(new GuildStatisticsTask(guildStatisticsService), 0, Duration.ofMinutes(5L).toMillis()); timer.schedule(new GitHubReviewTask(gitHubReviewService, jda), 0, Duration.ofMinutes(15L).toMillis()); - timer.schedule(new GenerateImageWithCodeTask(codeImageGameData, codeGameConfiguration, jda, data), 0, Duration.ofMinutes(codeGameConfiguration.timeToNextQuestion).toMillis()); } } diff --git a/src/main/java/com/eternalcode/discordapp/leveling/games/CodeGameAnswerController.java b/src/main/java/com/eternalcode/discordapp/leveling/games/CodeGameAnswerController.java deleted file mode 100644 index b83e87dd..00000000 --- a/src/main/java/com/eternalcode/discordapp/leveling/games/CodeGameAnswerController.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.eternalcode.discordapp.leveling.games; - -import com.eternalcode.discordapp.config.ConfigManager; -import com.eternalcode.discordapp.leveling.experience.ExperienceService; -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.events.message.MessageReceivedEvent; -import net.dv8tion.jda.api.hooks.ListenerAdapter; -import panda.utilities.text.Formatter; - -import java.awt.Color; -import java.time.Duration; -import java.time.Instant; -import java.util.Random; -import java.util.function.LongSupplier; - -public class CodeGameAnswerController extends ListenerAdapter { - - private static final Random RANDOM_CODE = new Random(); - - private final CodeImageGameData codeImageGameData; - private final CodeGameConfiguration codeGameConfiguration; - private final ConfigManager configManager; - private final ExperienceService experienceService; - - public CodeGameAnswerController(CodeImageGameData codeImageGameData, CodeGameConfiguration codeGameConfiguration, ConfigManager configManager, ExperienceService experienceService) { - this.codeImageGameData = codeImageGameData; - this.codeGameConfiguration = codeGameConfiguration; - this.configManager = configManager; - this.experienceService = experienceService; - } - - @Override - public void onMessageReceived(MessageReceivedEvent event) { - if (event.isWebhookMessage() || event.getAuthor().isBot()) { - return; - } - - LongSupplier channelId = () -> event.getChannel().getIdLong(); - - if (channelId.getAsLong() != this.codeGameConfiguration.channelId) { - return; - } - - if (!this.codeImageGameData.gameActive) { - return; - } - - if (this.codeImageGameData.isUsed) { - return; - } - - if (event.getMessage().getContentRaw().equalsIgnoreCase(this.codeImageGameData.code)) { - this.codeImageGameData.isUsed = true; - this.codeImageGameData.gameActive = false; - this.configManager.save(this.codeImageGameData); - - int points = RANDOM_CODE.nextInt(this.codeGameConfiguration.maxPoints) + 1; - Instant now = Instant.now(); - long timeDifferenceMinutes = Duration.between(this.codeImageGameData.lastUpdated, now).toMinutes(); - - Formatter formatter = new Formatter() - .register("{winner}", event.getAuthor().getAsMention()) - .register("{points}", points) - .register("{time}", timeDifferenceMinutes); - - EmbedBuilder embedBuilder = new EmbedBuilder() - .setTitle(this.codeGameConfiguration.embedSettings.title) - .setColor(Color.decode(this.codeGameConfiguration.embedSettings.color)) - .setDescription(formatter.format(this.codeGameConfiguration.embedSettings.description)) - .setFooter(this.codeGameConfiguration.embedSettings.footer); - - - this.experienceService.modifyPoints(event.getAuthor().getIdLong(), points, true, channelId) - .whenComplete((experience, throwable) -> { - if (throwable != null) { - throwable.printStackTrace(); - } - }); - - event.getChannel().sendMessageEmbeds(embedBuilder.build()).queue(); - } - } -} diff --git a/src/main/java/com/eternalcode/discordapp/leveling/games/CodeGameConfiguration.java b/src/main/java/com/eternalcode/discordapp/leveling/games/CodeGameConfiguration.java deleted file mode 100644 index dbf8638f..00000000 --- a/src/main/java/com/eternalcode/discordapp/leveling/games/CodeGameConfiguration.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.eternalcode.discordapp.leveling.games; - -import com.eternalcode.discordapp.config.CdnConfig; -import net.dzikoysk.cdn.entity.Contextual; -import net.dzikoysk.cdn.entity.Description; -import net.dzikoysk.cdn.source.Resource; -import net.dzikoysk.cdn.source.Source; - -import java.io.File; - -public class CodeGameConfiguration implements CdnConfig { - - @Description("# Channel id where the game will be played") - public Long channelId = 0L; - - @Description("# Maximum points to win - default: 10") - public int maxPoints = 10; - - @Description("# The time in minutes to generate new code - default: 5") - public int timeToNextQuestion = 5; - - @Description("# The text in message with code") - public String codeText = "The code is: "; - - @Description("# Winner message settings") - public EmbedSettings embedSettings = new EmbedSettings(); - - @Contextual - public static class EmbedSettings { - @Description("# Settings of the win embed") - @Description("# Title of the embed") - public String title = "Winner!"; - - @Description("# Description of the embed") - @Description("# Placeholders: ") - @Description("# {winner} - The winner of the game") - @Description("# {points} - The points of the winner") - @Description("# {time} - The time of the game") - public String description = """ - The winner is: {winner} - Points: {points} - Time: {time} minutes"""; - - @Description("# Color of the embed") - public String color = "#00ff00"; - - @Description("# Footer of the embed") - public String footer = "Code game"; - } - - @Override - public Resource resource(File folder) { - return Source.of(folder, "games" + File.separator + "code.yml"); - } -} diff --git a/src/main/java/com/eternalcode/discordapp/leveling/games/CodeImageGameData.java b/src/main/java/com/eternalcode/discordapp/leveling/games/CodeImageGameData.java deleted file mode 100644 index 61593d7f..00000000 --- a/src/main/java/com/eternalcode/discordapp/leveling/games/CodeImageGameData.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.eternalcode.discordapp.leveling.games; - -import com.eternalcode.discordapp.config.CdnConfig; -import net.dzikoysk.cdn.source.Resource; -import net.dzikoysk.cdn.source.Source; - -import java.io.File; -import java.time.Instant; - -public class CodeImageGameData implements CdnConfig { - public String code = ""; - - public Instant lastUpdated = Instant.now(); - - public boolean isUsed = false; - - public boolean gameActive = false; - - @Override - public Resource resource(File folder) { - return Source.of(folder, "games" + File.separator + "imageCode.dat"); - } -} diff --git a/src/main/java/com/eternalcode/discordapp/leveling/games/GenerateImageWithCodeTask.java b/src/main/java/com/eternalcode/discordapp/leveling/games/GenerateImageWithCodeTask.java deleted file mode 100644 index 800afe8a..00000000 --- a/src/main/java/com/eternalcode/discordapp/leveling/games/GenerateImageWithCodeTask.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.eternalcode.discordapp.leveling.games; - -import com.eternalcode.discordapp.config.ConfigManager; -import io.sentry.Sentry; -import net.dv8tion.jda.api.JDA; -import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; -import net.dv8tion.jda.api.utils.FileUpload; -import org.apache.commons.lang3.RandomStringUtils; - -import javax.imageio.ImageIO; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.time.Instant; -import java.util.TimerTask; - -public class GenerateImageWithCodeTask extends TimerTask { - - private final CodeImageGameData codeImageGameData; - private final CodeGameConfiguration codeGameConfiguration; - private final JDA jda; - private final ConfigManager dataManager; - - public GenerateImageWithCodeTask(CodeImageGameData codeImageGameData, CodeGameConfiguration codeGameConfiguration, JDA jda, ConfigManager dataManager) { - this.codeImageGameData = codeImageGameData; - this.codeGameConfiguration = codeGameConfiguration; - this.jda = jda; - this.dataManager = dataManager; - } - - @Override - public void run() { - BufferedImage image = this.generateCodeImage(); - this.sendCodeImageMessage(image); - } - - private BufferedImage generateCodeImage() { - String code = RandomStringUtils.randomAlphanumeric(6); - boolean isUsed = false; - boolean gameActive = true; - Instant lastUpdated = Instant.now(); - - this.codeImageGameData.code = code; - this.codeImageGameData.isUsed = isUsed; - this.codeImageGameData.gameActive = gameActive; - this.codeImageGameData.lastUpdated = lastUpdated; - this.dataManager.save(this.codeImageGameData); - - BufferedImage image = new BufferedImage(128, 128, BufferedImage.TYPE_INT_RGB); - Graphics2D graphics = image.createGraphics(); - - graphics.setColor(Color.WHITE); - graphics.fillRect(0, 0, image.getWidth(), image.getHeight()); - - Font font = new Font("Arial", Font.BOLD, 24); - graphics.setFont(font); - graphics.setColor(Color.BLACK); - - FontMetrics fontMetrics = graphics.getFontMetrics(); - int x = (image.getWidth() - fontMetrics.stringWidth(code)) / 2; - int y = (image.getHeight() - fontMetrics.getHeight()) / 2 + fontMetrics.getAscent(); - - graphics.drawString(code, x, y); - graphics.dispose(); - - return image; - } - - private void sendCodeImageMessage(BufferedImage image) { - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - - try { - ImageIO.write(image, "png", byteArrayOutputStream); - } - catch (IOException exception) { - Sentry.captureException(exception); - exception.printStackTrace(); - return; - } - - TextChannel channel = this.jda.getTextChannelById(this.codeGameConfiguration.channelId); - if (channel != null) { - FileUpload fileUpload = FileUpload.fromData(byteArrayOutputStream.toByteArray(), "game.png"); - channel.sendMessage(this.codeGameConfiguration.codeText) - .addFiles(fileUpload) - .queue(); - } - } - -} diff --git a/src/main/java/com/eternalcode/discordapp/review/GitHubReviewTask.java b/src/main/java/com/eternalcode/discordapp/review/GitHubReviewTask.java index e6c69ae2..082a7d51 100644 --- a/src/main/java/com/eternalcode/discordapp/review/GitHubReviewTask.java +++ b/src/main/java/com/eternalcode/discordapp/review/GitHubReviewTask.java @@ -20,7 +20,6 @@ public void run() { try { this.gitHubReviewService.archiveMergedPullRequest(this.jda); this.gitHubReviewService.mentionReviewersOnAllReviewChannels(this.jda); - System.out.println("GitHub review task executed"); } catch (Exception exception) { Sentry.captureException(exception);