give up graalvm native image.

This commit is contained in:
dalbodeule 2024-06-14 12:40:30 +09:00
parent ceb730a933
commit 5a3cdbd45a
No known key found for this signature in database
GPG Key ID: EFA860D069C9FA65
17 changed files with 41 additions and 858 deletions

View File

@ -46,6 +46,7 @@ jobs:
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2
with: with:
context: . context: .
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true push: true
tags: | tags: |
${{ secrets.DOCKER_USERNAME }}/chzzkbot:${{ env.DATETIME }} ${{ secrets.DOCKER_USERNAME }}/chzzkbot:${{ env.DATETIME }}

View File

@ -1,5 +1,5 @@
# Stage 1: Build the executable with GraalVM # Stage 1: Build the JAR file
FROM gradle:jdk-21-and-22-graal as build FROM gradle:jdk21 as build
WORKDIR /app WORKDIR /app
@ -8,20 +8,16 @@ COPY build.gradle.kts settings.gradle.kts gradlew gradle.properties ./
COPY gradle gradle COPY gradle gradle
COPY src src COPY src src
# Build the project # Build the project using Gradle
RUN gradle nativeCompile RUN ./gradlew build
# Stage 2: Create a minimal Docker image and add the binary # Stage 2: Run the JAR file using JDK 21
FROM alpine:3.13 FROM openjdk:21-jdk
WORKDIR /app WORKDIR /app
# https://stackoverflow.com/a/77779723/11516704 # Copy the JAR file from the build stage
RUN apk add gcompat COPY --from=build /app/build/libs/*.jar app.jar
# Copy the executable from the build stage
COPY --from=build /app/build/native/nativeCompile/chzzk_bot .
COPY --from=build /app/build/native/nativeCompile/libjsound.so .
# Set the entry point # Set the entry point
ENTRYPOINT ["./chzzk_bot"] ENTRYPOINT ["java", "-jar", "app.jar"]

View File

@ -1,3 +1,5 @@
import org.graalvm.buildtools.gradle.tasks.BuildNativeImageTask
plugins { plugins {
val kotlinVersion = "2.0.0" val kotlinVersion = "2.0.0"
@ -104,3 +106,15 @@ tasks.withType<Jar> {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
} }
tasks.register<JavaExec>("generateReflectConfig") {
group = "build"
description = "Generate GraalVM reflection configuration using agent"
mainClass = application.mainClass
classpath = sourceSets["main"].runtimeClasspath
jvmArgs(
"-agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image"
)
}

View File

@ -1,5 +0,0 @@
#!/bin/bash
export RUN_AGENT=true
./gradlew -Pagent run
./gradlew metadataCopy --task run --dir src/main/resources/META-INF/native-image

View File

@ -3,33 +3,9 @@ package space.mori.chzzk_bot.discord
import net.dv8tion.jda.api.JDA import net.dv8tion.jda.api.JDA
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent
import net.dv8tion.jda.api.interactions.commands.build.CommandData import net.dv8tion.jda.api.interactions.commands.build.CommandData
import org.reflections.Reflections
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class Command
interface CommandInterface { interface CommandInterface {
val name: String val name: String
fun run(event: SlashCommandInteractionEvent, bot: JDA): Unit fun run(event: SlashCommandInteractionEvent, bot: JDA): Unit
val command: CommandData val command: CommandData
} }
fun getCommands(): List<CommandInterface> {
val commandList = mutableListOf<CommandInterface>()
val packageName = "space.mori.chzzk_bot.discord.commands"
val reflections = Reflections(packageName)
val annotatedClasses = reflections.getTypesAnnotatedWith(Command::class.java)
for(clazz in annotatedClasses) {
val obj = clazz.kotlin.objectInstance
if(obj is CommandInterface) {
commandList.add(obj)
} else {
throw IllegalStateException("${clazz.name} is not a CommandInterface")
}
}
return commandList.toList()
}

View File

@ -8,17 +8,26 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve
import net.dv8tion.jda.api.hooks.ListenerAdapter import net.dv8tion.jda.api.hooks.ListenerAdapter
import space.mori.chzzk_bot.dotenv import space.mori.chzzk_bot.dotenv
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.discord.commands.*
class Discord: ListenerAdapter() { class Discord: ListenerAdapter() {
private lateinit var bot: JDA private lateinit var bot: JDA
private var guild: Guild? = null private var guild: Guild? = null
private val logger = LoggerFactory.getLogger(this::class.java) private val logger = LoggerFactory.getLogger(this::class.java)
private val commands = getCommands() private val commands = listOf(
AddCommand,
PingCommand,
RegisterCommand,
RemoveCommand,
UpdateCommand,
)
override fun onSlashCommandInteraction(event: SlashCommandInteractionEvent) { override fun onSlashCommandInteraction(event: SlashCommandInteractionEvent) {
event.deferReply().queue() event.deferReply().queue()
commands.find { it.name == event.name }?.run(event, bot) val handler = commands.find { it.name == event.name }
logger.debug("Handler: ${handler?.name ?: "undefined"} command")
handler?.run(event, bot)
} }
internal fun enable() { internal fun enable() {
@ -33,7 +42,10 @@ class Discord: ListenerAdapter() {
bot.updateCommands() bot.updateCommands()
.addCommands(* commands.map { it.command }.toTypedArray()) .addCommands(* commands.map { it.command }.toTypedArray())
.onSuccess { logger.info("Command update success!") } .onSuccess {
logger.info("Command update success!")
logger.debug("Command list: ${commands.joinToString("/ ") { it.name }}")
}
.queue() .queue()

View File

@ -8,12 +8,10 @@ import net.dv8tion.jda.api.interactions.commands.build.OptionData
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chzzk.ChzzkHandler
import space.mori.chzzk_bot.chzzk.Connector import space.mori.chzzk_bot.chzzk.Connector
import space.mori.chzzk_bot.discord.Command
import space.mori.chzzk_bot.discord.CommandInterface import space.mori.chzzk_bot.discord.CommandInterface
import space.mori.chzzk_bot.services.CommandService import space.mori.chzzk_bot.services.CommandService
import space.mori.chzzk_bot.services.UserService import space.mori.chzzk_bot.services.UserService
@Command
object AddCommand : CommandInterface { object AddCommand : CommandInterface {
private val logger = LoggerFactory.getLogger(this::class.java) private val logger = LoggerFactory.getLogger(this::class.java)
override val name: String = "add" override val name: String = "add"

View File

@ -4,11 +4,9 @@ import net.dv8tion.jda.api.JDA
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent
import net.dv8tion.jda.api.interactions.commands.build.Commands import net.dv8tion.jda.api.interactions.commands.build.Commands
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.discord.Command
import space.mori.chzzk_bot.discord.CommandInterface import space.mori.chzzk_bot.discord.CommandInterface
@Command() object PingCommand: CommandInterface {
object Ping: CommandInterface {
private val logger = LoggerFactory.getLogger(this::class.java) private val logger = LoggerFactory.getLogger(this::class.java)
override val name = "ping" override val name = "ping"
override val command = Commands.slash(name, "봇이 살아있을까요?") override val command = Commands.slash(name, "봇이 살아있을까요?")

View File

@ -8,12 +8,10 @@ import net.dv8tion.jda.api.interactions.commands.build.OptionData
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chzzk.ChzzkHandler
import space.mori.chzzk_bot.chzzk.Connector import space.mori.chzzk_bot.chzzk.Connector
import space.mori.chzzk_bot.discord.Command
import space.mori.chzzk_bot.discord.CommandInterface import space.mori.chzzk_bot.discord.CommandInterface
import space.mori.chzzk_bot.services.UserService import space.mori.chzzk_bot.services.UserService
@Command object RegisterCommand: CommandInterface {
object Register: CommandInterface {
private val logger = LoggerFactory.getLogger(this::class.java) private val logger = LoggerFactory.getLogger(this::class.java)
override val name = "register" override val name = "register"
override val command = Commands.slash(name, "치지직 계정을 등록합니다.") override val command = Commands.slash(name, "치지직 계정을 등록합니다.")

View File

@ -8,12 +8,10 @@ import net.dv8tion.jda.api.interactions.commands.build.OptionData
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chzzk.ChzzkHandler
import space.mori.chzzk_bot.chzzk.Connector import space.mori.chzzk_bot.chzzk.Connector
import space.mori.chzzk_bot.discord.Command
import space.mori.chzzk_bot.discord.CommandInterface import space.mori.chzzk_bot.discord.CommandInterface
import space.mori.chzzk_bot.services.CommandService import space.mori.chzzk_bot.services.CommandService
import space.mori.chzzk_bot.services.UserService import space.mori.chzzk_bot.services.UserService
@Command
object RemoveCommand : CommandInterface { object RemoveCommand : CommandInterface {
private val logger = LoggerFactory.getLogger(this::class.java) private val logger = LoggerFactory.getLogger(this::class.java)
override val name: String = "remove" override val name: String = "remove"

View File

@ -8,13 +8,10 @@ import net.dv8tion.jda.api.interactions.commands.build.OptionData
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chzzk.ChzzkHandler
import space.mori.chzzk_bot.chzzk.Connector import space.mori.chzzk_bot.chzzk.Connector
import space.mori.chzzk_bot.discord.Command
import space.mori.chzzk_bot.discord.CommandInterface import space.mori.chzzk_bot.discord.CommandInterface
import space.mori.chzzk_bot.services.CommandService import space.mori.chzzk_bot.services.CommandService
import space.mori.chzzk_bot.services.UserService import space.mori.chzzk_bot.services.UserService
import xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannel
@Command
object UpdateCommand : CommandInterface { object UpdateCommand : CommandInterface {
private val logger = LoggerFactory.getLogger(this::class.java) private val logger = LoggerFactory.getLogger(this::class.java)
override val name: String = "update" override val name: String = "update"

View File

@ -1,18 +0,0 @@
[
{
"name":"java.lang.Boolean",
"methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
},
{
"name":"java.lang.String",
"methods":[{"name":"lastIndexOf","parameterTypes":["int"] }, {"name":"substring","parameterTypes":["int"] }]
},
{
"name":"java.lang.System",
"methods":[{"name":"getProperty","parameterTypes":["java.lang.String"] }, {"name":"setProperty","parameterTypes":["java.lang.String","java.lang.String"] }]
},
{
"name":"space.mori.chzzk_bot.MainKt",
"methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }]
}
]

View File

@ -1,7 +0,0 @@
[
{
"type":"agent-extracted",
"classes":[
]
}
]

View File

@ -1,5 +0,0 @@
[
{
"interfaces":["java.sql.Connection"]
}
]

View File

@ -1,707 +0,0 @@
[
{
"name":"[B"
},
{
"name":"[Lcom.fasterxml.jackson.databind.AbstractTypeResolver;"
},
{
"name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;"
},
{
"name":"[Ljava.lang.Object;"
},
{
"name":"[Ljava.lang.String;"
},
{
"name":"[Ljava.sql.Statement;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.Guild;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.Member;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.Role;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.ScheduledEvent;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.User;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.emoji.RichCustomEmoji;"
},
{
"name":"[Lnet.dv8tion.jda.api.entities.sticker.GuildSticker;"
},
{
"name":"[Lnet.dv8tion.jda.api.managers.AudioManager;"
},
{
"name":"[Lsun.security.pkcs.SignerInfo;"
},
{
"name":"android.os.Build$VERSION"
},
{
"name":"apple.security.AppleProvider",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.BasicConfigurator",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.encoder.PatternLayoutEncoder",
"queryAllPublicMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.filter.ThresholdFilter",
"queryAllPublicMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"setLevel","parameterTypes":["java.lang.String"] }]
},
{
"name":"ch.qos.logback.classic.joran.SerializedModelConfigurator",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.pattern.DateConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.pattern.LevelConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.pattern.LineSeparatorConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.pattern.LoggerConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.pattern.MessageConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.pattern.ThreadConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.classic.util.DefaultJoranConfigurator",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.core.ConsoleAppender",
"queryAllPublicMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"ch.qos.logback.core.OutputStreamAppender",
"methods":[{"name":"setEncoder","parameterTypes":["ch.qos.logback.core.encoder.Encoder"] }]
},
{
"name":"ch.qos.logback.core.UnsynchronizedAppenderBase",
"methods":[{"name":"addFilter","parameterTypes":["ch.qos.logback.core.filter.Filter"] }]
},
{
"name":"ch.qos.logback.core.encoder.Encoder",
"methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
},
{
"name":"ch.qos.logback.core.encoder.LayoutWrappingEncoder",
"methods":[{"name":"setParent","parameterTypes":["ch.qos.logback.core.spi.ContextAware"] }]
},
{
"name":"ch.qos.logback.core.filter.Filter",
"methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
},
{
"name":"ch.qos.logback.core.pattern.PatternLayoutEncoderBase",
"methods":[{"name":"setPattern","parameterTypes":["java.lang.String"] }]
},
{
"name":"ch.qos.logback.core.spi.ContextAware",
"methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
},
{
"name":"com.fasterxml.jackson.databind.ext.Java7SupportImpl",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.AESCipher$General",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.ARCFOURCipher",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.ChaCha20Cipher$ChaCha20Poly1305",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.DESCipher",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.DESedeCipher",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.DHParameters",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.GaloisCounterMode$AESGCM",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.HmacCore$HmacSHA256",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.HmacCore$HmacSHA384",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.TlsKeyMaterialGenerator",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.TlsMasterSecretGenerator",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.crypto.provider.TlsPrfGenerator$V12",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"com.zaxxer.hikari.HikariConfig",
"allDeclaredFields":true,
"queryAllPublicMethods":true,
"methods":[{"name":"getAllowPoolSuspension","parameterTypes":[] }, {"name":"getAutoCommit","parameterTypes":[] }, {"name":"getCatalog","parameterTypes":[] }, {"name":"getConnectionInitSql","parameterTypes":[] }, {"name":"getConnectionTestQuery","parameterTypes":[] }, {"name":"getConnectionTimeout","parameterTypes":[] }, {"name":"getDataSource","parameterTypes":[] }, {"name":"getDataSourceClassName","parameterTypes":[] }, {"name":"getDataSourceJNDI","parameterTypes":[] }, {"name":"getDataSourceProperties","parameterTypes":[] }, {"name":"getDriverClassName","parameterTypes":[] }, {"name":"getExceptionOverrideClassName","parameterTypes":[] }, {"name":"getHealthCheckProperties","parameterTypes":[] }, {"name":"getHealthCheckRegistry","parameterTypes":[] }, {"name":"getIdleTimeout","parameterTypes":[] }, {"name":"getInitializationFailTimeout","parameterTypes":[] }, {"name":"getIsolateInternalQueries","parameterTypes":[] }, {"name":"getJdbcUrl","parameterTypes":[] }, {"name":"getKeepaliveTime","parameterTypes":[] }, {"name":"getLeakDetectionThreshold","parameterTypes":[] }, {"name":"getMaxLifetime","parameterTypes":[] }, {"name":"getMaximumPoolSize","parameterTypes":[] }, {"name":"getMetricRegistry","parameterTypes":[] }, {"name":"getMetricsTrackerFactory","parameterTypes":[] }, {"name":"getMinimumIdle","parameterTypes":[] }, {"name":"getPassword","parameterTypes":[] }, {"name":"getPoolName","parameterTypes":[] }, {"name":"getReadOnly","parameterTypes":[] }, {"name":"getRegisterMbeans","parameterTypes":[] }, {"name":"getScheduledExecutor","parameterTypes":[] }, {"name":"getSchema","parameterTypes":[] }, {"name":"getThreadFactory","parameterTypes":[] }, {"name":"getTransactionIsolation","parameterTypes":[] }, {"name":"getUsername","parameterTypes":[] }, {"name":"getValidationTimeout","parameterTypes":[] }, {"name":"isAllowPoolSuspension","parameterTypes":[] }, {"name":"isAutoCommit","parameterTypes":[] }, {"name":"isIsolateInternalQueries","parameterTypes":[] }, {"name":"isReadOnly","parameterTypes":[] }, {"name":"isRegisterMbeans","parameterTypes":[] }, {"name":"setAllowPoolSuspension","parameterTypes":["boolean"] }, {"name":"setAutoCommit","parameterTypes":["boolean"] }, {"name":"setCatalog","parameterTypes":["java.lang.String"] }, {"name":"setClass","parameterTypes":["java.lang.Class"] }, {"name":"setConnectionInitSql","parameterTypes":["java.lang.String"] }, {"name":"setConnectionTestQuery","parameterTypes":["java.lang.String"] }, {"name":"setConnectionTimeout","parameterTypes":["long"] }, {"name":"setDataSource","parameterTypes":["javax.sql.DataSource"] }, {"name":"setDataSourceClassName","parameterTypes":["java.lang.String"] }, {"name":"setDataSourceJNDI","parameterTypes":["java.lang.String"] }, {"name":"setDataSourceProperties","parameterTypes":["java.util.Properties"] }, {"name":"setDriverClassName","parameterTypes":["java.lang.String"] }, {"name":"setExceptionOverrideClassName","parameterTypes":["java.lang.String"] }, {"name":"setHealthCheckProperties","parameterTypes":["java.util.Properties"] }, {"name":"setHealthCheckRegistry","parameterTypes":["java.lang.Object"] }, {"name":"setIdleTimeout","parameterTypes":["long"] }, {"name":"setInitializationFailTimeout","parameterTypes":["long"] }, {"name":"setIsolateInternalQueries","parameterTypes":["boolean"] }, {"name":"setJdbcUrl","parameterTypes":["java.lang.String"] }, {"name":"setKeepaliveTime","parameterTypes":["long"] }, {"name":"setLeakDetectionThreshold","parameterTypes":["long"] }, {"name":"setMaxLifetime","parameterTypes":["long"] }, {"name":"setMaximumPoolSize","parameterTypes":["int"] }, {"name":"setMetricRegistry","parameterTypes":["java.lang.Object"] }, {"name":"setMetricsTrackerFactory","parameterTypes":["com.zaxxer.hikari.metrics.MetricsTrackerFactory"] }, {"name":"setMinimumIdle","parameterTypes":["int"] }, {"name":"setPassword","parameterTypes":["java.lang.String"] }, {"name":"setPoolName","parameterTypes":["java.lang.String"] }, {"name":"setReadOnly","parameterTypes":["boolean"] }, {"name":"setRegisterMbeans","parameterTypes":["boolean"] }, {"name":"setScheduledExecutor","parameterTypes":["java.util.concurrent.ScheduledExecutorService"] }, {"name":"setSchema","parameterTypes":["java.lang.String"] }, {"name":"setThreadFactory","parameterTypes":["java.util.concurrent.ThreadFactory"] }, {"name":"setTransactionIsolation","parameterTypes":["java.lang.String"] }, {"name":"setUsername","parameterTypes":["java.lang.String"] }, {"name":"setValidationTimeout","parameterTypes":["long"] }]
},
{
"name":"com.zaxxer.hikari.pool.PoolBase",
"fields":[{"name":"catalog"}]
},
{
"name":"com.zaxxer.hikari.pool.PoolEntry",
"fields":[{"name":"state"}]
},
{
"name":"java.io.FilePermission"
},
{
"name":"java.lang.Class",
"methods":[{"name":"getPermittedSubclasses","parameterTypes":[] }, {"name":"getRecordComponents","parameterTypes":[] }, {"name":"isRecord","parameterTypes":[] }, {"name":"isSealed","parameterTypes":[] }]
},
{
"name":"java.lang.ClassValue"
},
{
"name":"java.lang.Module"
},
{
"name":"java.lang.Object"
},
{
"name":"java.lang.RuntimePermission"
},
{
"name":"java.lang.String"
},
{
"name":"java.lang.StringBuilder"
},
{
"name":"java.lang.Thread",
"fields":[{"name":"threadLocalRandomProbe"}]
},
{
"name":"java.lang.invoke.CallSite"
},
{
"name":"java.lang.reflect.RecordComponent",
"methods":[{"name":"getName","parameterTypes":[] }, {"name":"getType","parameterTypes":[] }]
},
{
"name":"java.net.NetPermission"
},
{
"name":"java.net.SocketPermission"
},
{
"name":"java.net.URLPermission",
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String"] }]
},
{
"name":"java.nio.Buffer"
},
{
"name":"java.security.AlgorithmParametersSpi"
},
{
"name":"java.security.AllPermission"
},
{
"name":"java.security.KeyStoreSpi"
},
{
"name":"java.security.SecureRandomParameters"
},
{
"name":"java.security.SecurityPermission"
},
{
"name":"java.security.interfaces.ECPrivateKey"
},
{
"name":"java.security.interfaces.ECPublicKey"
},
{
"name":"java.security.interfaces.RSAPrivateKey"
},
{
"name":"java.security.interfaces.RSAPublicKey"
},
{
"name":"java.sql.Date"
},
{
"name":"java.sql.ResultSet"
},
{
"name":"java.sql.SQLException",
"fields":[{"name":"next"}]
},
{
"name":"java.util.Date"
},
{
"name":"java.util.List",
"methods":[{"name":"copyOf","parameterTypes":["java.util.Collection"] }]
},
{
"name":"java.util.Optional",
"methods":[{"name":"isEmpty","parameterTypes":[] }]
},
{
"name":"java.util.PropertyPermission"
},
{
"name":"java.util.concurrent.ForkJoinTask",
"fields":[{"name":"aux"}, {"name":"status"}]
},
{
"name":"java.util.concurrent.atomic.AtomicBoolean",
"fields":[{"name":"value"}]
},
{
"name":"java.util.concurrent.atomic.AtomicReference",
"fields":[{"name":"value"}]
},
{
"name":"java.util.concurrent.atomic.Striped64",
"fields":[{"name":"base"}, {"name":"cellsBusy"}]
},
{
"name":"java.util.function.Function"
},
{
"name":"java.util.zip.DeflaterInputStream"
},
{
"name":"javax.net.ssl.SNIHostName",
"methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
},
{
"name":"javax.net.ssl.SSLParameters",
"methods":[{"name":"setServerNames","parameterTypes":["java.util.List"] }]
},
{
"name":"javax.security.auth.x500.X500Principal",
"fields":[{"name":"thisX500Name"}],
"methods":[{"name":"<init>","parameterTypes":["sun.security.x509.X500Name"] }]
},
{
"name":"javax.smartcardio.CardPermission"
},
{
"name":"jdk.internal.misc.Unsafe"
},
{
"name":"kotlin.Any"
},
{
"name":"kotlin.Boolean"
},
{
"name":"kotlin.Int"
},
{
"name":"kotlin.Metadata",
"queryAllDeclaredMethods":true,
"methods":[{"name":"bv","parameterTypes":[] }, {"name":"d1","parameterTypes":[] }, {"name":"d2","parameterTypes":[] }, {"name":"k","parameterTypes":[] }, {"name":"mv","parameterTypes":[] }, {"name":"pn","parameterTypes":[] }, {"name":"xi","parameterTypes":[] }, {"name":"xs","parameterTypes":[] }]
},
{
"name":"kotlin.SafePublicationLazyImpl",
"fields":[{"name":"_value"}]
},
{
"name":"kotlin.String"
},
{
"name":"kotlin.Unit"
},
{
"name":"kotlin.jvm.internal.DefaultConstructorMarker"
},
{
"name":"kotlin.reflect.jvm.internal.ReflectionFactoryImpl",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"kotlin.reflect.jvm.internal.impl.resolve.scopes.DescriptorKindFilter",
"allPublicFields":true
},
{
"name":"kotlinx.coroutines.CancellableContinuationImpl",
"fields":[{"name":"_decisionAndIndex$volatile"}, {"name":"_parentHandle$volatile"}, {"name":"_state$volatile"}]
},
{
"name":"kotlinx.coroutines.CompletedExceptionally",
"fields":[{"name":"_handled$volatile"}]
},
{
"name":"kotlinx.coroutines.EventLoopImplBase",
"fields":[{"name":"_delayed$volatile"}, {"name":"_isCompleted$volatile"}, {"name":"_queue$volatile"}]
},
{
"name":"kotlinx.coroutines.JobSupport",
"fields":[{"name":"_parentHandle$volatile"}, {"name":"_state$volatile"}]
},
{
"name":"kotlinx.coroutines.JobSupport$Finishing",
"fields":[{"name":"_exceptionsHolder$volatile"}, {"name":"_isCompleting$volatile"}, {"name":"_rootCause$volatile"}]
},
{
"name":"kotlinx.coroutines.internal.DispatchedContinuation",
"fields":[{"name":"_reusableCancellableContinuation$volatile"}]
},
{
"name":"kotlinx.coroutines.internal.LimitedDispatcher",
"fields":[{"name":"runningWorkers$volatile"}]
},
{
"name":"kotlinx.coroutines.internal.LockFreeLinkedListNode",
"fields":[{"name":"_next$volatile"}, {"name":"_prev$volatile"}, {"name":"_removedRef$volatile"}]
},
{
"name":"kotlinx.coroutines.internal.LockFreeTaskQueue",
"fields":[{"name":"_cur$volatile"}]
},
{
"name":"kotlinx.coroutines.internal.LockFreeTaskQueueCore",
"fields":[{"name":"_next$volatile"}, {"name":"_state$volatile"}]
},
{
"name":"kotlinx.coroutines.internal.ThreadSafeHeap",
"fields":[{"name":"_size$volatile"}]
},
{
"name":"kotlinx.coroutines.scheduling.CoroutineScheduler",
"fields":[{"name":"_isTerminated$volatile"}, {"name":"controlState$volatile"}, {"name":"parkedWorkersStack$volatile"}]
},
{
"name":"net.dv8tion.jda.api.hooks.ListenerAdapter",
"methods":[{"name":"onGatewayPing","parameterTypes":["net.dv8tion.jda.api.events.GatewayPingEvent"] }, {"name":"onGenericGuild","parameterTypes":["net.dv8tion.jda.api.events.guild.GenericGuildEvent"] }, {"name":"onGenericSession","parameterTypes":["net.dv8tion.jda.api.events.session.GenericSessionEvent"] }, {"name":"onGuildReady","parameterTypes":["net.dv8tion.jda.api.events.guild.GuildReadyEvent"] }, {"name":"onHttpRequest","parameterTypes":["net.dv8tion.jda.api.events.http.HttpRequestEvent"] }, {"name":"onReady","parameterTypes":["net.dv8tion.jda.api.events.session.ReadyEvent"] }, {"name":"onSessionDisconnect","parameterTypes":["net.dv8tion.jda.api.events.session.SessionDisconnectEvent"] }, {"name":"onSessionResume","parameterTypes":["net.dv8tion.jda.api.events.session.SessionResumeEvent"] }, {"name":"onShutdown","parameterTypes":["net.dv8tion.jda.api.events.session.ShutdownEvent"] }, {"name":"onStatusChange","parameterTypes":["net.dv8tion.jda.api.events.StatusChangeEvent"] }]
},
{
"name":"net.dv8tion.jda.internal.utils.FallbackLogger",
"methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
},
{
"name":"org.jetbrains.exposed.dao.id.EntityID"
},
{
"name":"org.jetbrains.exposed.sql.ColumnType",
"methods":[{"name":"getNullable","parameterTypes":[] }, {"name":"setNullable","parameterTypes":["boolean"] }]
},
{
"name":"org.jetbrains.exposed.sql.IColumnType"
},
{
"name":"org.jetbrains.exposed.sql.IntegerColumnType",
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"getNullable","parameterTypes":[] }, {"name":"setNullable","parameterTypes":["boolean"] }]
},
{
"name":"org.jetbrains.exposed.sql.statements.api.PreparedStatementApi"
},
{
"name":"org.mariadb.jdbc.Configuration",
"allDeclaredFields":true
},
{
"name":"org.mariadb.jdbc.Configuration$Builder",
"allDeclaredFields":true
},
{
"name":"org.mariadb.jdbc.Driver",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"org.slf4j.LoggerFactory"
},
{
"name":"org.slf4j.spi.SLF4JServiceProvider"
},
{
"name":"space.mori.chzzk_bot.discord.CommandInterface"
},
{
"name":"space.mori.chzzk_bot.discord.commands.AddCommand",
"fields":[{"name":"INSTANCE"}]
},
{
"name":"space.mori.chzzk_bot.discord.commands.Ping",
"fields":[{"name":"INSTANCE"}]
},
{
"name":"space.mori.chzzk_bot.discord.commands.Register",
"fields":[{"name":"INSTANCE"}]
},
{
"name":"space.mori.chzzk_bot.discord.commands.RemoveCommand",
"fields":[{"name":"INSTANCE"}]
},
{
"name":"space.mori.chzzk_bot.discord.commands.UpdateCommand",
"fields":[{"name":"INSTANCE"}]
},
{
"name":"space.mori.chzzk_bot.models.Command",
"methods":[{"name":"<init>","parameterTypes":["org.jetbrains.exposed.dao.id.EntityID"] }]
},
{
"name":"space.mori.chzzk_bot.models.User",
"methods":[{"name":"<init>","parameterTypes":["org.jetbrains.exposed.dao.id.EntityID"] }]
},
{
"name":"sun.security.pkcs12.PKCS12KeyStore",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.pkcs12.PKCS12KeyStore$DualFormatPKCS12",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.DSA$SHA224withDSA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.DSA$SHA256withDSA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.JavaKeyStore$DualFormatJKS",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.JavaKeyStore$JKS",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.NativePRNG",
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"<init>","parameterTypes":["java.security.SecureRandomParameters"] }]
},
{
"name":"sun.security.provider.SHA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.SHA2$SHA224",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.SHA2$SHA256",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.SHA5$SHA384",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.SHA5$SHA512",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.X509Factory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.provider.certpath.PKIXCertPathValidator",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.PSSParameters",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.RSAKeyFactory$Legacy",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.RSAPSSSignature",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.RSASignature$SHA1withRSA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.RSASignature$SHA224withRSA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.RSASignature$SHA256withRSA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.rsa.RSASignature$SHA384withRSA",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.ssl.KeyManagerFactoryImpl$SunX509",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.ssl.SSLContextImpl$DefaultSSLContext",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.ssl.SSLContextImpl$TLS12Context",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.ssl.SSLContextImpl$TLSContext",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.ssl.TrustManagerFactoryImpl$PKIXFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"sun.security.util.ObjectIdentifier"
},
{
"name":"sun.security.x509.AuthorityInfoAccessExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.AuthorityKeyIdentifierExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.BasicConstraintsExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.CRLDistributionPointsExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.CertificateExtensions"
},
{
"name":"sun.security.x509.CertificatePoliciesExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.ExtendedKeyUsageExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.IssuerAlternativeNameExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.KeyUsageExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.NetscapeCertTypeExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.PrivateKeyUsageExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.SubjectAlternativeNameExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"sun.security.x509.SubjectKeyIdentifierExtension",
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.chat.WsMessageBase",
"allDeclaredFields":true
},
{
"name":"xyz.r2turntrue.chzzk4j.chat.WsMessageClientboundConnected",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.chat.WsMessageClientboundConnected$Body",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.chat.WsMessageServerboundConnect",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.chat.WsMessageServerboundConnect$Body",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.types.ChzzkUser",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannel",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannelFollowingData",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannelPersonalData",
"allDeclaredFields":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"xyz.r2turntrue.chzzk4j.types.channel.ChzzkPartialChannel",
"allDeclaredFields":true
}
]

View File

@ -1,55 +0,0 @@
{
"resources":{
"includes":[{
"pattern":"\\QMETA-INF/services/ch.qos.logback.classic.spi.Configurator\\E"
}, {
"pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
}, {
"pattern":"\\QMETA-INF/services/java.net.spi.InetAddressResolverProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/java.net.spi.URLStreamHandlerProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/java.sql.Driver\\E"
}, {
"pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/javax.xml.parsers.SAXParserFactory\\E"
}, {
"pattern":"\\QMETA-INF/services/kotlin.reflect.jvm.internal.impl.resolve.ExternalOverridabilityCondition\\E"
}, {
"pattern":"\\QMETA-INF/services/kotlin.reflect.jvm.internal.impl.util.ModuleVisibilityHelper\\E"
}, {
"pattern":"\\QMETA-INF/services/org.jetbrains.exposed.dao.id.EntityIDFactory\\E"
}, {
"pattern":"\\QMETA-INF/services/org.jetbrains.exposed.sql.DatabaseConnectionAutoRegistration\\E"
}, {
"pattern":"\\QMETA-INF/services/org.jetbrains.exposed.sql.statements.GlobalStatementInterceptor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.mariadb.jdbc.plugin.Codec\\E"
}, {
"pattern":"\\QMETA-INF/services/org.slf4j.spi.SLF4JServiceProvider\\E"
}, {
"pattern":"\\Qkotlin/kotlin.kotlin_builtins\\E"
}, {
"pattern":"\\Qlogback-test.scmo\\E"
}, {
"pattern":"\\Qlogback-test.xml\\E"
}, {
"pattern":"\\Qlogback.scmo\\E"
}, {
"pattern":"\\Qlogback.xml\\E"
}, {
"pattern":"\\Qmariadb.properties\\E"
}, {
"pattern":"\\Qspace/mori/chzzk_bot/discord/commands\\E"
}, {
"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfc.nrm\\E"
}, {
"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfkc.nrm\\E"
}, {
"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E"
}, {
"pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E"
}]},
"bundles":[]
}

View File

@ -1,8 +0,0 @@
{
"types":[
],
"lambdaCapturingTypes":[
],
"proxies":[
]
}