Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 15 additions & 16 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.*
plugins {
java
id("com.github.johnrengelman.shadow") version "8.1.1"
id("org.springframework.boot") version "3.5.0"
id("org.springframework.boot") version "4.0.1"
id("io.spring.dependency-management") version "1.1.7"
id("org.graalvm.buildtools.native") version "0.10.6"
id("org.graalvm.buildtools.native") version "0.11.3"
checkstyle
}

java {
sourceCompatibility = JavaVersion.VERSION_25
targetCompatibility = JavaVersion.VERSION_25
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}

group = "net.discordjug"
Expand All @@ -27,22 +28,24 @@ repositories {
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
compileOnly("com.google.code.findbugs:jsr305:3.0.2")
compileOnly("org.jetbrains:annotations:26.0.2")

// DIH4JDA (Command Framework) & JDA
implementation("com.github.DynxstyGIT:DIH4JDA:a64b5a9dc5")
implementation("net.dv8tion:JDA:5.5.1") {
implementation("com.github.jasonlessenich:DIH4JDA:1.7.0")
//implementation("xyz.dynxsty:dih4jda:1.7.0")
implementation("net.dv8tion:JDA:6.2.0") {
exclude(module = "opus-java")
}

// Caffeine (Caching Library)
implementation("com.github.ben-manes.caffeine:caffeine:3.2.0")
implementation("com.github.ben-manes.caffeine:caffeine:3.2.2")

implementation("com.google.code.gson:gson:2.13.1")
implementation("org.yaml:snakeyaml:2.4")
implementation("com.google.re2j:re2j:1.8")
implementation("commons-validator:commons-validator:1.9.0")
implementation("commons-validator:commons-validator:1.10.0")

implementation("com.mashape.unirest:unirest-java:1.4.9")

Expand All @@ -60,20 +63,16 @@ dependencies {
testAnnotationProcessor("org.projectlombok:lombok:1.18.38")

// Sentry
implementation("io.sentry:sentry:8.13.2")
implementation("io.sentry:sentry:8.20.0")

// Spring
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-webmvc")
implementation("org.springframework.boot:spring-boot-starter-data-jdbc")

//required for registering native hints
implementation("org.jetbrains.kotlin:kotlin-reflect")
}

configurations {
all {
exclude(group = "commons-logging", module = "commons-logging")
}

implementation("org.slf4j:jcl-over-slf4j")
}

tasks.withType<Jar> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package net.discordjug.javabot;

import java.nio.channels.Channel;

import club.minnced.discord.webhook.send.WebhookEmbed;
import com.zaxxer.hikari.HikariConfig;
import net.discordjug.javabot.data.config.BotConfig;
Expand All @@ -16,19 +14,8 @@
import net.discordjug.javabot.data.config.guild.QOTWConfig;
import net.discordjug.javabot.data.config.guild.ServerLockConfig;
import net.discordjug.javabot.data.config.guild.StarboardConfig;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.ScheduledEvent;
import net.dv8tion.jda.api.entities.ThreadMember;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.channel.forums.ForumTag;
import net.dv8tion.jda.api.entities.emoji.RichCustomEmoji;
import net.dv8tion.jda.api.entities.sticker.GuildSticker;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.managers.AudioManager;
import net.dv8tion.jda.internal.entities.GuildVoiceStateImpl;
import net.dv8tion.jda.internal.entities.MemberPresenceImpl;
import net.dv8tion.jda.internal.requests.restaction.PermOverrideData;
import org.h2.server.TcpServer;
import org.springframework.aot.hint.MemberCategory;
Expand All @@ -49,8 +36,6 @@
BotConfig.class, GuildConfig.class, GuildConfigItem.class, SystemsConfig.class, ApiConfig.class,
HelpConfig.class, MessageCacheConfig.class, MetricsConfig.class, ModerationConfig.class, QOTWConfig.class, ServerLockConfig.class, StarboardConfig.class,

//ensure JDA can create necessary caches
User[].class, Guild[].class, Member[].class, Role[].class, Channel[].class, AudioManager[].class, ScheduledEvent[].class, ThreadMember[].class, ForumTag[].class, RichCustomEmoji[].class, GuildSticker[].class, MemberPresenceImpl[].class,
//needs to be serialized for channel managers etc
PermOverrideData.class,

Expand Down
61 changes: 0 additions & 61 deletions src/main/java/net/discordjug/javabot/api/TomcatConfig.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand;
import net.discordjug.javabot.data.config.BotConfig;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.interactions.InteractionContextType;
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandGroupData;
Expand All @@ -27,7 +28,7 @@ public DbAdminCommand(BotConfig botConfig, ExportSchemaSubcommand exportSchemaSu
setRegistrationType(RegistrationType.GUILD);
setCommandData(Commands.slash("db-admin", "(ADMIN ONLY) Administrative Commands for managing the bot's database.")
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(Permission.MANAGE_SERVER))
.setGuildOnly(true)
.setContexts(InteractionContextType.GUILD)
);
addSubcommands(exportSchemaSubcommand, exportTableSubcommand, migrationsListSubcommand, migrateSubcommand, quickMigrateSubcommand);
addSubcommandGroups(SubcommandGroup.of(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package net.discordjug.javabot.data.h2db.commands;

import net.dv8tion.jda.api.modals.Modal;
import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand;
import xyz.dynxsty.dih4jda.interactions.components.ModalHandler;
import net.discordjug.javabot.annotations.AutoDetectableComponentHandler;
import net.discordjug.javabot.data.config.SystemsConfig;
import net.discordjug.javabot.util.ExceptionLogger;
import net.discordjug.javabot.util.Responses;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.components.label.Label;
import net.dv8tion.jda.api.components.textinput.TextInput;
import net.dv8tion.jda.api.components.textinput.TextInputStyle;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.modals.Modal;
import net.dv8tion.jda.api.interactions.components.text.TextInput;
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
import net.dv8tion.jda.api.interactions.modals.ModalMapping;

import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -105,7 +105,7 @@ public void handleModal(@NotNull ModalInteractionEvent event, List<ModalMapping>
}

private @NotNull Modal buildQuickMigrateModal() {
TextInput sqlInput = TextInput.create("sql", "SQL-Statement (H2)", TextInputStyle.PARAGRAPH)
TextInput sqlInput = TextInput.create("sql", TextInputStyle.PARAGRAPH)
.setPlaceholder("""
CREATE TABLE my_table (
thread_id BIGINT PRIMARY KEY,
Expand All @@ -114,12 +114,12 @@ CREATE TABLE my_table (
""")
.setRequired(true)
.build();
TextInput confirmInput = TextInput.create("confirmation", "Confirmation", TextInputStyle.SHORT)
TextInput confirmInput = TextInput.create("confirmation", TextInputStyle.SHORT)
.setPlaceholder("Type 'CONFIRM' to confirm this action")
.setRequired(true)
.build();
return Modal.create("quick-migrate", "Quick Migrate")
.addComponents(ActionRow.of(sqlInput), ActionRow.of(confirmInput))
.addComponents(Label.of("SQL-Statement (H2)", sqlInput), Label.of("Confirmation", confirmInput))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
package net.discordjug.javabot.data.h2db.message_cache;

import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.discordjug.javabot.data.config.BotConfig;
import net.discordjug.javabot.data.config.guild.MessageCacheConfig;
import net.discordjug.javabot.data.h2db.message_cache.dao.MessageCacheRepository;
import net.discordjug.javabot.data.h2db.message_cache.model.CachedMessage;
import net.discordjug.javabot.systems.user_commands.IdCalculatorCommand;
import net.discordjug.javabot.util.ExceptionLogger;
import net.discordjug.javabot.util.Responses;
import net.discordjug.javabot.util.TimeUtils;
import net.discordjug.javabot.util.UserUtils;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.Message.Attachment;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.requests.restaction.MessageCreateAction;
import net.dv8tion.jda.api.utils.FileUpload;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URI;
Expand All @@ -21,29 +41,6 @@
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.discordjug.javabot.data.config.BotConfig;
import net.discordjug.javabot.data.config.guild.MessageCacheConfig;
import net.discordjug.javabot.data.h2db.message_cache.dao.MessageCacheRepository;
import net.discordjug.javabot.data.h2db.message_cache.model.CachedMessage;
import net.discordjug.javabot.systems.user_commands.IdCalculatorCommand;
import net.discordjug.javabot.util.ExceptionLogger;
import net.discordjug.javabot.util.Responses;
import net.discordjug.javabot.util.TimeUtils;
import net.discordjug.javabot.util.UserUtils;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.Message.Attachment;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.UserSnowflake;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.requests.restaction.MessageCreateAction;
import net.dv8tion.jda.api.utils.FileUpload;

/**
* Listens for Incoming Messages and stores them in the Message Cache.
*/
Expand Down Expand Up @@ -128,7 +125,7 @@ public void sendUpdatedMessageToLog(Message updated, CachedMessage before) {
if (updated.getContentRaw().trim().equals(before.getMessageContent()) && updated.getAttachments().size() == before.getAttachments().size()) return;
MessageCreateAction action = config.getMessageCacheLogChannel()
.sendMessageEmbeds(buildMessageEditEmbed(updated.getGuild(), updated.getAuthor(), updated.getChannel(), before, updated))
.setActionRow(Button.link(updated.getJumpUrl(), "Jump to Message"));
.addComponents(ActionRow.of(Button.link(updated.getJumpUrl(), "Jump to Message")));
if (before.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH || updated.getContentRaw().length() > MessageEmbed.VALUE_MAX_LENGTH) {
action.addFiles(FileUpload.fromData(buildEditedMessageFile(updated.getAuthor(), before, updated), before.getMessageId() + ".txt"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
import net.discordjug.javabot.util.ExceptionLogger;
import net.discordjug.javabot.util.InteractionUtils;
import net.discordjug.javabot.util.StringUtils;
import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.components.buttons.Button;

import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -37,7 +38,7 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
if (!content.getFirst().isBlank() && !content.getSecond().isBlank()) {
event.getMessage().reply(String.format("```%s\n%s\n```", content.getSecond(), StringUtils.standardSanitizer().compute(content.getFirst())))
.setAllowedMentions(List.of())
.setActionRow(InteractionUtils.createDeleteButton(event.getAuthor().getIdLong()), Button.link(matcher.group(), "View on GitHub"))
.addComponents(ActionRow.of(InteractionUtils.createDeleteButton(event.getAuthor().getIdLong()), Button.link(matcher.group(), "View on GitHub")))
.queue();
}
}
Expand All @@ -56,7 +57,7 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
String[] segments = Arrays.copyOfRange(arr, 3, arr.length);
// The file name, split by "."
String[] file = segments[segments.length - 1].split("\\.");
Integer[] lines = Arrays.stream(file[1].split("L"))
Integer[] lines = Arrays.stream(file[file.length-1].split("L"))
.map(line -> line.replace("-", ""))
.filter(line -> line.matches("-?\\d+")) // check if the given link is a number
.map(Integer::valueOf).sorted().toArray(Integer[]::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import net.discordjug.javabot.data.config.guild.ModerationConfig;
import net.discordjug.javabot.util.InteractionUtils;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.entities.UserSnowflake;
import net.dv8tion.jda.api.entities.channel.ChannelType;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
Expand Down Expand Up @@ -78,7 +79,7 @@ public void onChannelCreate(ChannelCreateEvent event) {
.setDescription("Since only one open post is allowed per user, older posts have been closed")
.setColor(Color.YELLOW)
.build())
.addActionRow(InteractionUtils.createDeleteButton(post.getOwnerIdLong()))
.addComponents(ActionRow.of(InteractionUtils.createDeleteButton(post.getOwnerIdLong())))
.queue();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.discordjug.javabot.data.config.BotConfig;
import net.discordjug.javabot.data.config.guild.QOTWConfig;
import net.discordjug.javabot.util.InteractionUtils;
import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.entities.channel.ChannelType;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
Expand Down Expand Up @@ -35,7 +36,7 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
Please keep in mind that messages **over 2000 characters** get split in half due to webhook limitations.
If you want to make sure that your submission is properly formatted, split your message into smaller chunks instead.""",
event.getAuthor().getAsMention())
.setActionRow(InteractionUtils.createDeleteButton(event.getAuthor().getIdLong()))
.addComponents(ActionRow.of(InteractionUtils.createDeleteButton(event.getAuthor().getIdLong())))
.queue();
}
}
Expand Down
Loading