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