From d398f4f1a05db97b8dd225fdd0c8c5c92d40cb0e Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Wed, 12 Jun 2024 00:35:41 +0900 Subject: [PATCH] add JDA activation codes with graalvm native image configures --- .gitignore | 2 + .idea/modules/chzzk_bot.main.iml | 1 + build.gradle.kts | 18 +++++++ inc.env | 2 + reflect-config.json | 6 +++ src/main/kotlin/space/mori/chzzk_bot/Main.kt | 12 ++++- .../space/mori/chzzk_bot/discord/Discord.kt | 48 +++++++++++++++++++ 7 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 inc.env create mode 100644 reflect-config.json create mode 100644 src/main/kotlin/space/mori/chzzk_bot/discord/Discord.kt diff --git a/.gitignore b/.gitignore index 37bfd8f..60d5397 100644 --- a/.gitignore +++ b/.gitignore @@ -241,4 +241,6 @@ gradle-app.setting # Java heap dump *.hprof +.env + # End of https://www.toptal.com/developers/gitignore/api/macos,windows,linux,kotlin,gradle,intellij \ No newline at end of file diff --git a/.idea/modules/chzzk_bot.main.iml b/.idea/modules/chzzk_bot.main.iml index b4c8ac5..cdeb8a2 100644 --- a/.idea/modules/chzzk_bot.main.iml +++ b/.idea/modules/chzzk_bot.main.iml @@ -3,6 +3,7 @@ + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index a0e7909..125e64e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,11 +14,23 @@ java { sourceCompatibility = JavaVersion.VERSION_21 } +kotlin { + jvmToolchain(21) +} + application { mainClass.set("${"${project.group}.${project.name}".lowercase()}.MainKt") } graalvmNative { + agent { + trackReflectionMetadata.set(true) + + metadataCopy { + outputDirectories.add("src/main/resources/META-INF/native-image") + mergeWithExisting.set(true) + } + } binaries { binaries.all { resources.autodetect() @@ -28,6 +40,9 @@ graalvmNative { sharedLibrary.set(false) } } + metadataRepository { + enabled.set(true) + } } repositories { @@ -41,6 +56,9 @@ dependencies { } // https://mvnrepository.com/artifact/io.github.R2turnTrue/chzzk4j implementation("io.github.R2turnTrue:chzzk4j:0.0.7") + implementation("ch.qos.logback:logback-classic:1.4.14") + + implementation("io.github.cdimascio:dotenv-kotlin:6.4.1") kotlin("stdlib-jdk8") } diff --git a/inc.env b/inc.env new file mode 100644 index 0000000..d9061ae --- /dev/null +++ b/inc.env @@ -0,0 +1,2 @@ +DISCORD_TOKEN= +GUILD_ID \ No newline at end of file diff --git a/reflect-config.json b/reflect-config.json new file mode 100644 index 0000000..4e0cad1 --- /dev/null +++ b/reflect-config.json @@ -0,0 +1,6 @@ +[ + { + "name": "net.dv8tion.jda.api.entities.Guild[]", + "unsafeAllocated": true + } +] \ No newline at end of file diff --git a/src/main/kotlin/space/mori/chzzk_bot/Main.kt b/src/main/kotlin/space/mori/chzzk_bot/Main.kt index f3b43ca..087bfc4 100644 --- a/src/main/kotlin/space/mori/chzzk_bot/Main.kt +++ b/src/main/kotlin/space/mori/chzzk_bot/Main.kt @@ -1,5 +1,15 @@ package space.mori.chzzk_bot +import io.github.cdimascio.dotenv.dotenv +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import space.mori.chzzk_bot.discord.Discord + +val dotenv = dotenv() +val logger: Logger = LoggerFactory.getLogger("main") + fun main(args: Array) { - println(args.joinToString("/")) + val discord = Discord() + + discord.enable() } \ No newline at end of file diff --git a/src/main/kotlin/space/mori/chzzk_bot/discord/Discord.kt b/src/main/kotlin/space/mori/chzzk_bot/discord/Discord.kt new file mode 100644 index 0000000..1e6776a --- /dev/null +++ b/src/main/kotlin/space/mori/chzzk_bot/discord/Discord.kt @@ -0,0 +1,48 @@ +package space.mori.chzzk_bot.discord + +import net.dv8tion.jda.api.JDA +import net.dv8tion.jda.api.JDABuilder +import net.dv8tion.jda.api.entities.Activity +import net.dv8tion.jda.api.entities.Guild +import net.dv8tion.jda.api.interactions.commands.build.Commands +import space.mori.chzzk_bot.dotenv +import space.mori.chzzk_bot.logger +import kotlin.concurrent.thread + +class Discord { + lateinit var bot: JDA + var guild: Guild? = null + + internal fun enable() { + try { + val thread = thread { + bot = JDABuilder.createDefault(dotenv["DISCORD_TOKEN"]) + .setActivity(Activity.playing("치지직 보는중")) + .build().awaitReady() + + guild = bot.getGuildById(dotenv["GUILD_ID"]) + + bot.updateCommands().addCommands( + Commands.slash("ping", "Pong!") + ).queue() + + if (guild == null) { + logger.info("No guild found!") + this.disable() + } + } + } catch(e: Exception) { + logger.info("Could not enable Discord!") + logger.debug(e.stackTraceToString()) + } + } + + internal fun disable() { + try { + bot.shutdown() + } catch(e: Exception) { + logger.info("Error while shutting down Discord!") + logger.debug(e.stackTraceToString()) + } + } +} \ No newline at end of file