diff --git a/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/MappingsExtension.kt b/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/MappingsExtension.kt index eee0bd96c0..6c7596d307 100644 --- a/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/MappingsExtension.kt +++ b/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/MappingsExtension.kt @@ -280,7 +280,7 @@ class MappingsExtension : Extension() { slashCommand( "mcp", "MCP", - McpNamespaceReplacement, + MCPNamespace, ::MCPArguments ) @@ -540,7 +540,7 @@ class MappingsExtension : Extension() { "feather" -> FeatherNamespace "hashed-mojang" -> MojangHashedNamespace "legacy-yarn" -> LegacyYarnNamespace - "mcp" -> McpNamespaceReplacement + "mcp" -> MCPNamespace "mojang" -> MojangNamespace "plasma" -> PlasmaNamespace "quilt-mappings" -> QuiltMappingsNamespace @@ -847,8 +847,18 @@ class MappingsExtension : Extension() { MappingsProvider.empty(arguments.namespace) } + val defaultVersion = version + ?: arguments.namespace.defaultVersion + + if (defaultVersion == null) { + respond { + content = translate("command.mapping.nodefault", arguments.namespace.id) + } + return@withContext + } + provider.injectDefaultVersion( - arguments.namespace.getProvider(version ?: arguments.namespace.defaultVersion) + arguments.namespace.getProvider(defaultVersion) ) sentry.breadcrumb(BreadcrumbType.Info) { diff --git a/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/arguments/MCPArguments.kt b/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/arguments/MCPArguments.kt index 74b6022196..e117ce2151 100644 --- a/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/arguments/MCPArguments.kt +++ b/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/arguments/MCPArguments.kt @@ -6,8 +6,8 @@ package com.kotlindiscord.kord.extensions.modules.extra.mappings.arguments -import com.kotlindiscord.kord.extensions.modules.extra.mappings.utils.McpNamespaceReplacement +import me.shedaniel.linkie.namespaces.MCPNamespace /** Arguments for MCP mappings lookup commands. **/ @Suppress("UndocumentedPublicProperty") -class MCPArguments : MappingArguments(McpNamespaceReplacement) +class MCPArguments : MappingArguments(MCPNamespace) diff --git a/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/utils/McpNamespaceReplacement.kt b/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/utils/McpNamespaceReplacement.kt deleted file mode 100644 index e26f899b4e..0000000000 --- a/extra-modules/extra-mappings/src/main/kotlin/com/kotlindiscord/kord/extensions/modules/extra/mappings/utils/McpNamespaceReplacement.kt +++ /dev/null @@ -1,186 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -package com.kotlindiscord.kord.extensions.modules.extra.mappings.utils - -import kotlinx.serialization.builtins.MapSerializer -import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive -import me.shedaniel.linkie.MappingsBuilder -import me.shedaniel.linkie.MappingsSource -import me.shedaniel.linkie.Namespace -import me.shedaniel.linkie.namespaces.MCPNamespace -import me.shedaniel.linkie.namespaces.MCPNamespace.MCPVersion -import me.shedaniel.linkie.parser.apply -import me.shedaniel.linkie.parser.srg -import me.shedaniel.linkie.parser.tsrg -import me.shedaniel.linkie.utils.* -import java.net.URL - -/** - * A replacement for Linkie's default [MCPNamespace], - * which fixes issues due to [mcp export servers](http://export.mcpbot.bspk.rs) - * being down indefinitely. - */ -object McpNamespaceReplacement : Namespace("mcp") { - private const val forgeMaven = "http://maven.minecraftforge.net/de/oceanlabs/mcp" - private const val mcpArchive = "https://raw.githubusercontent.com/ModCoderPack/MCPMappingsArchive/master" - private val mcpConfigSnapshots = mutableMapOf>() - private val newMcpVersions = mutableMapOf() - - init { - buildSupplier { - cached() - - buildVersions { - versionsSeq(::getAllBotVersions) - uuid { "$it-${mcpConfigSnapshots[it.toVersion()]?.maxOrNull()!!}" } - - buildMappings(name = "MCP") { - val latestSnapshot = mcpConfigSnapshots[it.toVersion()]?.maxOrNull()!! - @Suppress("MagicNumber") // we're constructing a version, we need 13 - source( - if (it.toVersion() >= Version(1, 13)) { - loadTsrgFromURLZip(URL("$forgeMaven/mcp_config/$it/mcp_config-$it.zip")) - MappingsSource.MCP_TSRG - } else { - val link = "$forgeMaven/mcp/$it/mcp-$it-srg.zip" - loadSrgFromURLZip(URL(link)) - MappingsSource.MCP_SRG - } - ) - val link = "$mcpArchive/mcp_snapshot/$latestSnapshot-$it/mcp_snapshot-$latestSnapshot-$it.zip" - loadMCPFromURLZip(URL(link)) - } - } - - buildVersions { - versions { newMcpVersions.keys.map(Version::toString) } - uuid { newMcpVersions[it.toVersion()]!!.name } - - buildMappings(name = "MCP") { - val mcpVersion = newMcpVersions[it.toVersion()]!! - loadTsrgFromURLZip(URL(mcpVersion.mcp_config)) - loadMCPFromURLZip(URL(mcpVersion.mcp)) - source(MappingsSource.MCP_TSRG) - } - } - } - } - - /** @suppress **/ - fun getAllBotVersions(): Sequence = mcpConfigSnapshots.keys.asSequence().map { it.toString() } - - override fun supportsFieldDescription(): Boolean = false - override fun getDefaultLoadedVersions(): List = listOf(defaultVersion) - override fun getAllVersions(): Sequence = getAllBotVersions() + newMcpVersions.keys.map(Version::toString) - - override fun supportsAT(): Boolean = true - override fun supportsMixin(): Boolean = true - override suspend fun reloadData() { - mcpConfigSnapshots.clear() - - val versionsJson = URL("$mcpArchive/versions.json").readText() - - json.parseToJsonElement(versionsJson).jsonObject.forEach { mcVersion, mcpVersionsObj -> - val list = mcpConfigSnapshots.getOrPut(mcVersion.toVersion()) { mutableListOf() } - mcpVersionsObj.jsonObject["snapshot"]?.jsonArray?.forEach { - list.add(it.jsonPrimitive.content) - } - } - mcpConfigSnapshots.filterValues { it.isEmpty() }.keys.toMutableList().forEach { - mcpConfigSnapshots.remove(it) - } - - newMcpVersions.clear() - val tmpMcpVersionsJson = json.decodeFromString( - MapSerializer(String.serializer(), MCPVersion.serializer()), - URL(MCPNamespace.tmpMcpVersionsUrl).readText() - ) - - tmpMcpVersionsJson.forEach { (mcVersion, mcpVersion) -> - newMcpVersions[mcVersion.toVersion()] = mcpVersion - } - } - - /** @suppress **/ - suspend fun MappingsBuilder.loadTsrgFromURLZip(url: URL) { - url.toAsyncZip().forEachEntry { path, entry -> - if (!entry.isDirectory && path.split("/").lastOrNull() == "joined.tsrg") { - loadTsrgFromInputStream(entry.bytes.decodeToString()) - } - } - } - - /** @suppress **/ - suspend fun MappingsBuilder.loadSrgFromURLZip(url: URL) { - url.toAsyncZip().forEachEntry { path, entry -> - if (!entry.isDirectory && path.split("/").lastOrNull() == "joined.srg") { - loadSrgFromInputStream(entry.bytes.decodeToString()) - } - } - } - - private fun MappingsBuilder.loadSrgFromInputStream(content: String) { - apply( - srg(content), - obfMerged = "obf", - intermediary = "srg", - ) - } - - private fun MappingsBuilder.loadTsrgFromInputStream(content: String) { - apply( - tsrg(content), - obfMerged = "obf", - intermediary = "srg", - ) - } - - /** @suppress **/ - suspend fun MappingsBuilder.loadMCPFromURLZip(url: URL) { - url.toAsyncZip().forEachEntry { path, entry -> - if (!entry.isDirectory) { - when (path.split("/").lastOrNull()) { - "fields.csv" -> loadMCPFieldsCSVFromInputStream(entry.bytes.lines()) - "methods.csv" -> loadMCPMethodsCSVFromInputStream(entry.bytes.lines()) - } - } - } - } - - private fun MappingsBuilder.loadMCPFieldsCSVFromInputStream(lines: Sequence) { - val map = mutableMapOf() - lines.filterNotBlank().forEach { - val split = it.split(',') - map[split[0]] = split[1] - } - container.classes.forEach { (_, it) -> - it.fields.forEach { field -> - map[field.intermediaryName]?.apply { - field.mappedName = this - } - } - } - } - - private fun MappingsBuilder.loadMCPMethodsCSVFromInputStream(lines: Sequence) { - val map = mutableMapOf() - lines.filterNotBlank().forEach { - val split = it.split(',') - map[split[0]] = split[1] - } - container.classes.forEach { (_, it) -> - it.methods.forEach { method -> - map[method.intermediaryName]?.apply { - method.mappedName = this - } - } - } - } -} diff --git a/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings.properties b/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings.properties index 89371cbb7d..09aa2cea0a 100644 --- a/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings.properties +++ b/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings.properties @@ -16,3 +16,4 @@ command.mapping.namespace.description=Configure which namespaces can be used in command.mapping.namespace.selectmenu=Select the namespaces for conversion commands command.mapping.namespace.selectmenu.cleared=Namespaces cleared command.mapping.namespace.selectmenu.updated=**Namespaces updated:** {0} +command.mapping.nodefault=**Error:** no default version could be loaded for namespace {0}. Please specify a version via the `version` argument. diff --git a/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings_en_GB.properties b/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings_en_GB.properties index 89371cbb7d..09aa2cea0a 100644 --- a/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings_en_GB.properties +++ b/extra-modules/extra-mappings/src/main/resources/translations/kordex/mappings_en_GB.properties @@ -16,3 +16,4 @@ command.mapping.namespace.description=Configure which namespaces can be used in command.mapping.namespace.selectmenu=Select the namespaces for conversion commands command.mapping.namespace.selectmenu.cleared=Namespaces cleared command.mapping.namespace.selectmenu.updated=**Namespaces updated:** {0} +command.mapping.nodefault=**Error:** no default version could be loaded for namespace {0}. Please specify a version via the `version` argument. diff --git a/extra-modules/extra-mappings/src/test/resources/logback.groovy b/extra-modules/extra-mappings/src/test/resources/logback.groovy index 3c126a7dee..659357fe56 100644 --- a/extra-modules/extra-mappings/src/test/resources/logback.groovy +++ b/extra-modules/extra-mappings/src/test/resources/logback.groovy @@ -6,13 +6,13 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder import ch.qos.logback.core.joran.spi.ConsoleTarget +import ch.qos.logback.core.ConsoleAppender +import ch.qos.logback.core.FileAppender -def environment = System.getenv().getOrDefault("ENVIRONMENT", "production") +def environment = System.getenv("ENVIRONMENT") ?: "dev" def defaultLevel = TRACE if (environment == "spam") { - statusListener(OnConsoleStatusListener) - logger("dev.kord.rest.DefaultGateway", TRACE) } else { // Silence warning about missing native PRNG diff --git a/extra-modules/extra-mappings/src/test/resources/logbackCompiler.groovy b/extra-modules/extra-mappings/src/test/resources/logbackCompiler.groovy new file mode 100644 index 0000000000..a374f9af62 --- /dev/null +++ b/extra-modules/extra-mappings/src/test/resources/logbackCompiler.groovy @@ -0,0 +1,458 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +importsAcceptList = [ + 'ch.qos.logback.core.testUtil.SampleConverter', + + 'ch.qos.logback.core.testUtil.StringListAppender', + 'java.lang.Object', + 'org.springframework.beans.factory.annotation.Autowired', + 'java.nio.charset.Charset.forName', + 'com.logentries.logback.LogentriesAppender', + 'grails.util.BuildSettings', + 'grails.util.Environment', + 'io.micronaut.context.env.Environment', + 'org.slf4j.MDC', + 'org.springframework.boot.logging.logback.ColorConverter', + 'org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter', + 'java.nio.charset.Charset', + 'java.nio.charset.StandardCharsets', + + 'ch.qos.logback.core.BasicStatusManager', + 'ch.qos.logback.core.ConsoleAppender', + 'ch.qos.logback.core.hook.ShutdownHook', + 'ch.qos.logback.core.hook.ShutdownHookBase', + 'ch.qos.logback.core.hook.DelayingShutdownHook', + 'ch.qos.logback.core.spi.PropertyContainer', + 'ch.qos.logback.core.spi.ContextAwareBase', + 'ch.qos.logback.core.spi.LogbackLock', + 'ch.qos.logback.core.spi.FilterAttachableImpl', + 'ch.qos.logback.core.spi.ContextAwareImpl', + 'ch.qos.logback.core.spi.ScanException', + 'ch.qos.logback.core.spi.DeferredProcessingAware', + 'ch.qos.logback.core.spi.ContextAware', + 'ch.qos.logback.core.spi.LifeCycle', + 'ch.qos.logback.core.spi.FilterReply', + 'ch.qos.logback.core.spi.PreSerializationTransformer', + 'ch.qos.logback.core.spi.AppenderAttachable', + 'ch.qos.logback.core.spi.CyclicBufferTracker', + 'ch.qos.logback.core.spi.FilterAttachable', + 'ch.qos.logback.core.spi.ComponentTracker', + 'ch.qos.logback.core.spi.AppenderAttachableImpl', + 'ch.qos.logback.core.spi.PropertyDefiner', + 'ch.qos.logback.core.spi.AbstractComponentTracker', + 'ch.qos.logback.core.property.FileExistsPropertyDefiner', + 'ch.qos.logback.core.property.ResourceExistsPropertyDefiner', + 'ch.qos.logback.core.CoreConstants', + 'ch.qos.logback.core.layout.EchoLayout', + 'ch.qos.logback.core.Appender', + 'ch.qos.logback.core.joran.JoranConfiguratorBase', + 'ch.qos.logback.core.joran.spi.ActionException', + 'ch.qos.logback.core.joran.spi.HostClassAndPropertyDouble', + 'ch.qos.logback.core.joran.spi.JoranException', + 'ch.qos.logback.core.joran.spi.NoAutoStart', + 'ch.qos.logback.core.joran.spi.EventPlayer', + 'ch.qos.logback.core.joran.spi.XMLUtil', + 'ch.qos.logback.core.joran.spi.ConsoleTarget', + 'ch.qos.logback.core.joran.spi.Interpreter', + 'ch.qos.logback.core.joran.spi.SimpleRuleStore', + 'ch.qos.logback.core.joran.spi.InterpretationContext', + 'ch.qos.logback.core.joran.spi.RuleStore', + 'ch.qos.logback.core.joran.spi.NoAutoStartUtil', + 'ch.qos.logback.core.joran.spi.ElementSelector', + 'ch.qos.logback.core.joran.spi.ConfigurationWatchList', + 'ch.qos.logback.core.joran.spi.DefaultNestedComponentRegistry', + 'ch.qos.logback.core.joran.spi.DefaultClass', + 'ch.qos.logback.core.joran.spi.ElementPath', + 'ch.qos.logback.core.joran.conditional.ThenOrElseActionBase', + 'ch.qos.logback.core.joran.conditional.Condition', + 'ch.qos.logback.core.joran.conditional.PropertyWrapperForScripts', + 'ch.qos.logback.core.joran.conditional.ThenAction', + 'ch.qos.logback.core.joran.conditional.PropertyEvalScriptBuilder', + 'ch.qos.logback.core.joran.conditional.ElseAction', + 'ch.qos.logback.core.joran.conditional.IfAction', + 'ch.qos.logback.core.joran.util.beans.BeanDescriptionCache', + 'ch.qos.logback.core.joran.util.beans.BeanDescriptionFactory', + 'ch.qos.logback.core.joran.util.beans.BeanDescription', + 'ch.qos.logback.core.joran.util.beans.BeanUtil', + 'ch.qos.logback.core.joran.util.PropertySetter', + 'ch.qos.logback.core.joran.util.ConfigurationWatchListUtil', + 'ch.qos.logback.core.joran.util.StringToObjectConverter', + 'ch.qos.logback.core.joran.GenericConfigurator', + 'ch.qos.logback.core.joran.action.ImplicitAction', + 'ch.qos.logback.core.joran.action.IncludeAction', + 'ch.qos.logback.core.joran.action.NOPAction', + 'ch.qos.logback.core.joran.action.IADataForBasicProperty', + 'ch.qos.logback.core.joran.action.TimestampAction', + 'ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction', + 'ch.qos.logback.core.joran.action.ParamAction', + 'ch.qos.logback.core.joran.action.AppenderAction', + 'ch.qos.logback.core.joran.action.DefinePropertyAction', + 'ch.qos.logback.core.joran.action.StatusListenerAction', + 'ch.qos.logback.core.joran.action.ContextPropertyAction', + 'ch.qos.logback.core.joran.action.NestedComplexPropertyIA', + 'ch.qos.logback.core.joran.action.NestedBasicPropertyIA', + 'ch.qos.logback.core.joran.action.Action', + 'ch.qos.logback.core.joran.action.AppenderRefAction', + 'ch.qos.logback.core.joran.action.ActionUtil', + 'ch.qos.logback.core.joran.action.ShutdownHookAction', + 'ch.qos.logback.core.joran.action.IADataForComplexProperty', + 'ch.qos.logback.core.joran.action.ConversionRuleAction', + 'ch.qos.logback.core.joran.action.ActionConst', + 'ch.qos.logback.core.joran.action.PropertyAction', + 'ch.qos.logback.core.joran.action.NewRuleAction', + 'ch.qos.logback.core.joran.node.ComponentNode', + 'ch.qos.logback.core.joran.event.EndEvent', + 'ch.qos.logback.core.joran.event.SaxEventRecorder', + 'ch.qos.logback.core.joran.event.SaxEvent', + 'ch.qos.logback.core.joran.event.BodyEvent', + 'ch.qos.logback.core.joran.event.StartEvent', + 'ch.qos.logback.core.joran.event.InPlayListener', + 'ch.qos.logback.core.joran.event.stax.EndEvent', + 'ch.qos.logback.core.joran.event.stax.StaxEventRecorder', + 'ch.qos.logback.core.joran.event.stax.BodyEvent', + 'ch.qos.logback.core.joran.event.stax.StartEvent', + 'ch.qos.logback.core.joran.event.stax.StaxEvent', + 'ch.qos.logback.core.LogbackException', + 'ch.qos.logback.core.PropertyDefinerBase', + 'ch.qos.logback.core.helpers.CyclicBuffer', + 'ch.qos.logback.core.helpers.ThrowableToStringArray', + 'ch.qos.logback.core.helpers.Transform', + 'ch.qos.logback.core.helpers.NOPAppender', + 'ch.qos.logback.core.net.LoginAuthenticator', + 'ch.qos.logback.core.net.DefaultSocketConnector', + 'ch.qos.logback.core.net.ssl.KeyStoreFactoryBean', + 'ch.qos.logback.core.net.ssl.SSLParametersConfiguration', + 'ch.qos.logback.core.net.ssl.SSLComponent', + 'ch.qos.logback.core.net.ssl.SSLNestedComponentRegistryRules', + 'ch.qos.logback.core.net.ssl.SSLConfigurableSocket', + 'ch.qos.logback.core.net.ssl.SSLConfigurableServerSocket', + 'ch.qos.logback.core.net.ssl.SSLConfiguration', + 'ch.qos.logback.core.net.ssl.ConfigurableSSLSocketFactory', + 'ch.qos.logback.core.net.ssl.ConfigurableSSLServerSocketFactory', + 'ch.qos.logback.core.net.ssl.SecureRandomFactoryBean', + 'ch.qos.logback.core.net.ssl.SSLContextFactoryBean', + 'ch.qos.logback.core.net.ssl.SSL', + 'ch.qos.logback.core.net.ssl.SSLConfigurable', + 'ch.qos.logback.core.net.ssl.TrustManagerFactoryFactoryBean', + 'ch.qos.logback.core.net.ssl.KeyManagerFactoryFactoryBean', + 'ch.qos.logback.core.net.SMTPAppenderBase', + 'ch.qos.logback.core.net.SyslogAppenderBase', + 'ch.qos.logback.core.net.SocketConnector', + 'ch.qos.logback.core.net.SyslogOutputStream', + 'ch.qos.logback.core.net.QueueFactory', + 'ch.qos.logback.core.net.HardenedObjectInputStream', + 'ch.qos.logback.core.net.AbstractSocketAppender', + 'ch.qos.logback.core.net.AbstractSSLSocketAppender', + 'ch.qos.logback.core.net.ObjectWriterFactory', + 'ch.qos.logback.core.net.ObjectWriter', + 'ch.qos.logback.core.net.AutoFlushingObjectWriter', + 'ch.qos.logback.core.net.SyslogConstants', + 'ch.qos.logback.core.net.server.ServerRunner', + 'ch.qos.logback.core.net.server.Client', + 'ch.qos.logback.core.net.server.ServerListener', + 'ch.qos.logback.core.net.server.RemoteReceiverStreamClient', + 'ch.qos.logback.core.net.server.AbstractServerSocketAppender', + 'ch.qos.logback.core.net.server.ClientVisitor', + 'ch.qos.logback.core.net.server.RemoteReceiverClient', + 'ch.qos.logback.core.net.server.RemoteReceiverServerRunner', + 'ch.qos.logback.core.net.server.SSLServerSocketAppenderBase', + 'ch.qos.logback.core.net.server.ConcurrentServerRunner', + 'ch.qos.logback.core.net.server.ServerSocketListener', + 'ch.qos.logback.core.net.server.RemoteReceiverServerListener', + 'ch.qos.logback.core.UnsynchronizedAppenderBase', + 'ch.qos.logback.core.AsyncAppenderBase', + 'ch.qos.logback.core.util.CloseUtil', + 'ch.qos.logback.core.util.DatePatternToRegexUtil', + 'ch.qos.logback.core.util.StatusListenerConfigHelper', + 'ch.qos.logback.core.util.SystemInfo', + 'ch.qos.logback.core.util.DefaultInvocationGate', + 'ch.qos.logback.core.util.CachingDateFormatter', + 'ch.qos.logback.core.util.InterruptUtil', + 'ch.qos.logback.core.util.LocationUtil', + 'ch.qos.logback.core.util.TimeUtil', + 'ch.qos.logback.core.util.COWArrayList', + 'ch.qos.logback.core.util.Loader', + 'ch.qos.logback.core.util.CharSequenceState', + 'ch.qos.logback.core.util.StatusPrinter', + 'ch.qos.logback.core.util.Duration', + 'ch.qos.logback.core.util.ContentTypeUtil', + 'ch.qos.logback.core.util.FileUtil', + 'ch.qos.logback.core.util.DynamicClassLoadingException', + 'ch.qos.logback.core.util.InvocationGate', + 'ch.qos.logback.core.util.OptionHelper', + 'ch.qos.logback.core.util.IncompatibleClassException', + 'ch.qos.logback.core.util.ExecutorServiceUtil', + 'ch.qos.logback.core.util.StringCollectionUtil', + 'ch.qos.logback.core.util.CharSequenceToRegexMapper', + 'ch.qos.logback.core.util.FixedDelay', + 'ch.qos.logback.core.util.FileSize', + 'ch.qos.logback.core.util.DelayStrategy', + 'ch.qos.logback.core.util.EnvUtil', + 'ch.qos.logback.core.util.ContextUtil', + 'ch.qos.logback.core.util.AggregationType', + 'ch.qos.logback.core.util.PropertySetterException', + 'ch.qos.logback.core.LifeCycleManager', + 'ch.qos.logback.core.LayoutBase', + 'ch.qos.logback.core.encoder.NonClosableInputStream', + 'ch.qos.logback.core.encoder.Encoder', + 'ch.qos.logback.core.encoder.ByteArrayUtil', + 'ch.qos.logback.core.encoder.EncoderBase', + 'ch.qos.logback.core.encoder.EchoEncoder', + 'ch.qos.logback.core.encoder.LayoutWrappingEncoder', + 'ch.qos.logback.core.recovery.RecoveryCoordinator', + 'ch.qos.logback.core.recovery.ResilientOutputStreamBase', + 'ch.qos.logback.core.recovery.ResilientSyslogOutputStream', + 'ch.qos.logback.core.recovery.ResilientFileOutputStream', + 'ch.qos.logback.core.AppenderBase', + 'ch.qos.logback.core.subst.Node', + 'ch.qos.logback.core.subst.Parser', + 'ch.qos.logback.core.subst.Token', + 'ch.qos.logback.core.subst.NodeToStringTransformer', + 'ch.qos.logback.core.subst.Tokenizer', + 'ch.qos.logback.core.FileAppender', + 'ch.qos.logback.core.sift.AppenderFactory', + 'ch.qos.logback.core.sift.SiftingAppenderBase', + 'ch.qos.logback.core.sift.SiftingJoranConfiguratorBase', + 'ch.qos.logback.core.sift.AbstractDiscriminator', + 'ch.qos.logback.core.sift.Discriminator', + 'ch.qos.logback.core.sift.AbstractAppenderFactoryUsingJoran', + 'ch.qos.logback.core.sift.AppenderTracker', + 'ch.qos.logback.core.sift.DefaultDiscriminator', + 'ch.qos.logback.core.html.CssBuilder', + 'ch.qos.logback.core.html.NOPThrowableRenderer', + 'ch.qos.logback.core.html.HTMLLayoutBase', + 'ch.qos.logback.core.html.IThrowableRenderer', + 'ch.qos.logback.core.rolling.TriggeringPolicyBase', + 'ch.qos.logback.core.rolling.helper.Compressor', + 'ch.qos.logback.core.rolling.helper.PeriodicityType', + 'ch.qos.logback.core.rolling.helper.TokenConverter', + 'ch.qos.logback.core.rolling.helper.IntegerTokenConverter', + 'ch.qos.logback.core.rolling.helper.CompressionMode', + 'ch.qos.logback.core.rolling.helper.ArchiveRemover', + 'ch.qos.logback.core.rolling.helper.FileFilterUtil', + 'ch.qos.logback.core.rolling.helper.RenameUtil', + 'ch.qos.logback.core.rolling.helper.DateTokenConverter', + 'ch.qos.logback.core.rolling.helper.FileNamePattern', + 'ch.qos.logback.core.rolling.helper.RollingCalendar', + 'ch.qos.logback.core.rolling.helper.FileStoreUtil', + 'ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover', + 'ch.qos.logback.core.rolling.helper.TimeBasedArchiveRemover', + 'ch.qos.logback.core.rolling.helper.MonoTypedConverter', + 'ch.qos.logback.core.rolling.RollingPolicyBase', + 'ch.qos.logback.core.rolling.RollingFileAppender', + 'ch.qos.logback.core.rolling.FixedWindowRollingPolicy', + 'ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBase', + 'ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicy', + 'ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy', + 'ch.qos.logback.core.rolling.RollingPolicy', + 'ch.qos.logback.core.rolling.TimeBasedRollingPolicy', + 'ch.qos.logback.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy', + 'ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy', + 'ch.qos.logback.core.rolling.RolloverFailure', + 'ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP', + 'ch.qos.logback.core.rolling.TriggeringPolicy', + 'ch.qos.logback.core.pattern.ReplacingCompositeConverter', + 'ch.qos.logback.core.pattern.ConverterUtil', + 'ch.qos.logback.core.pattern.parser.Compiler', + 'ch.qos.logback.core.pattern.parser.Node', + 'ch.qos.logback.core.pattern.parser.Parser', + 'ch.qos.logback.core.pattern.parser.Token', + 'ch.qos.logback.core.pattern.parser.OptionTokenizer', + 'ch.qos.logback.core.pattern.parser.TokenStream', + 'ch.qos.logback.core.pattern.parser.CompositeNode', + 'ch.qos.logback.core.pattern.parser.FormattingNode', + 'ch.qos.logback.core.pattern.parser.SimpleKeywordNode', + 'ch.qos.logback.core.pattern.Converter', + 'ch.qos.logback.core.pattern.PatternLayoutEncoderBase', + 'ch.qos.logback.core.pattern.LiteralConverter', + 'ch.qos.logback.core.pattern.PostCompileProcessor', + 'ch.qos.logback.core.pattern.util.RegularEscapeUtil', + 'ch.qos.logback.core.pattern.util.AsIsEscapeUtil', + 'ch.qos.logback.core.pattern.util.AlmostAsIsEscapeUtil', + 'ch.qos.logback.core.pattern.util.IEscapeUtil', + 'ch.qos.logback.core.pattern.util.RestrictedEscapeUtil', + 'ch.qos.logback.core.pattern.SpacePadder', + 'ch.qos.logback.core.pattern.CompositeConverter', + 'ch.qos.logback.core.pattern.PatternLayoutBase', + 'ch.qos.logback.core.pattern.DynamicConverter', + 'ch.qos.logback.core.pattern.color.YellowCompositeConverter', + 'ch.qos.logback.core.pattern.color.ANSIConstants', + 'ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter', + 'ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter', + 'ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter', + 'ch.qos.logback.core.pattern.color.CyanCompositeConverter', + 'ch.qos.logback.core.pattern.color.MagentaCompositeConverter', + 'ch.qos.logback.core.pattern.color.BlueCompositeConverter', + 'ch.qos.logback.core.pattern.color.BlackCompositeConverter', + 'ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase', + 'ch.qos.logback.core.pattern.color.GrayCompositeConverter', + 'ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter', + 'ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter', + 'ch.qos.logback.core.pattern.color.RedCompositeConverter', + 'ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter', + 'ch.qos.logback.core.pattern.color.BoldRedCompositeConverter', + 'ch.qos.logback.core.pattern.color.GreenCompositeConverter', + 'ch.qos.logback.core.pattern.color.WhiteCompositeConverter', + 'ch.qos.logback.core.pattern.FormattingConverter', + 'ch.qos.logback.core.pattern.IdentityCompositeConverter', + 'ch.qos.logback.core.pattern.FormatInfo', + 'ch.qos.logback.core.OutputStreamAppender', + 'ch.qos.logback.core.boolex.JaninoEventEvaluatorBase', + 'ch.qos.logback.core.boolex.Matcher', + 'ch.qos.logback.core.boolex.EventEvaluatorBase', + 'ch.qos.logback.core.boolex.EvaluationException', + 'ch.qos.logback.core.boolex.EventEvaluator', + 'ch.qos.logback.core.read.CyclicBufferAppender', + 'ch.qos.logback.core.read.ListAppender', + 'ch.qos.logback.core.Context', + 'ch.qos.logback.core.ContextBase', + 'ch.qos.logback.core.status.StatusListenerAsList', + 'ch.qos.logback.core.status.StatusBase', + 'ch.qos.logback.core.status.NopStatusListener', + 'ch.qos.logback.core.status.StatusUtil', + 'ch.qos.logback.core.status.OnPrintStreamStatusListenerBase', + 'ch.qos.logback.core.status.StatusManager', + 'ch.qos.logback.core.status.ViewStatusMessagesServletBase', + 'ch.qos.logback.core.status.ErrorStatus', + 'ch.qos.logback.core.status.Status', + 'ch.qos.logback.core.status.StatusListener', + 'ch.qos.logback.core.status.InfoStatus', + 'ch.qos.logback.core.status.OnConsoleStatusListener', + 'ch.qos.logback.core.status.WarnStatus', + 'ch.qos.logback.core.status.OnErrorConsoleStatusListener', + 'ch.qos.logback.core.filter.EvaluatorFilter', + 'ch.qos.logback.core.filter.Filter', + 'ch.qos.logback.core.filter.AbstractMatcherFilter', + 'ch.qos.logback.core.Layout', + 'ch.qos.logback.classic.ViewStatusMessagesServlet', + 'ch.qos.logback.classic.ClassicConstants', + 'ch.qos.logback.classic.layout.TTLLLayout', + 'ch.qos.logback.classic.helpers.MDCInsertingServletFilter', + 'ch.qos.logback.classic.Level', + 'ch.qos.logback.classic.Level.off', + 'ch.qos.logback.classic.Level.error', + 'ch.qos.logback.classic.Level.warn', + 'ch.qos.logback.classic.Level.info', + 'ch.qos.logback.classic.Level.debug', + 'ch.qos.logback.classic.Level.trace', + 'ch.qos.logback.classic.Level.all,', + 'ch.qos.logback.classic.net.SSLSocketReceiver', + 'ch.qos.logback.classic.net.ReceiverBase', + 'ch.qos.logback.classic.net.SimpleSocketServer', + 'ch.qos.logback.classic.net.SimpleSSLSocketServer', + 'ch.qos.logback.classic.net.SocketNode', + 'ch.qos.logback.classic.net.SMTPAppender', + 'ch.qos.logback.classic.net.SocketReceiver', + 'ch.qos.logback.classic.net.SocketAcceptor', + 'ch.qos.logback.classic.net.SSLSocketAppender', + 'ch.qos.logback.classic.net.LoggingEventPreSerializationTransformer', + 'ch.qos.logback.classic.net.server.RemoteAppenderStreamClient', + 'ch.qos.logback.classic.net.server.RemoteAppenderServerListener', + 'ch.qos.logback.classic.net.server.SSLServerSocketAppender', + 'ch.qos.logback.classic.net.server.RemoteAppenderClient', + 'ch.qos.logback.classic.net.server.HardenedLoggingEventInputStream', + 'ch.qos.logback.classic.net.server.ServerSocketAppender', + 'ch.qos.logback.classic.net.server.SSLServerSocketReceiver', + 'ch.qos.logback.classic.net.server.RemoteAppenderServerRunner', + 'ch.qos.logback.classic.net.server.ServerSocketReceiver', + 'ch.qos.logback.classic.net.SocketAppender', + 'ch.qos.logback.classic.net.SyslogAppender', + 'ch.qos.logback.classic.PatternLayout', + 'ch.qos.logback.classic.util.ContextSelectorStaticBinder', + 'ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory', + 'ch.qos.logback.classic.util.JNDIUtil', + 'ch.qos.logback.classic.util.LevelToSyslogSeverity', + 'ch.qos.logback.classic.util.LoggerNameUtil', + 'ch.qos.logback.classic.util.LogbackMDCAdapter', + 'ch.qos.logback.classic.util.CopyOnInheritThreadLocal', + 'ch.qos.logback.classic.util.ContextInitializer', + 'ch.qos.logback.classic.util.EnvUtil', + 'ch.qos.logback.classic.util.DefaultNestedComponentRules', + 'ch.qos.logback.classic.AsyncAppender', + 'ch.qos.logback.classic.jul.JULHelper', + 'ch.qos.logback.classic.jul.LevelChangePropagator', + 'ch.qos.logback.classic.encoder.PatternLayoutEncoder', + 'ch.qos.logback.classic.db.names.DBNameResolver', + 'ch.qos.logback.classic.db.names.ColumnName', + 'ch.qos.logback.classic.db.names.TableName', + 'ch.qos.logback.classic.db.names.DefaultDBNameResolver', + 'ch.qos.logback.classic.db.names.SimpleDBNameResolver', + 'ch.qos.logback.classic.log4j.XMLLayout', + 'ch.qos.logback.classic.LoggerContext', + 'ch.qos.logback.classic.turbo.TurboFilter', + 'ch.qos.logback.classic.turbo.MDCFilter', + 'ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter', + 'ch.qos.logback.classic.turbo.DuplicateMessageFilter', + 'ch.qos.logback.classic.turbo.MarkerFilter', + 'ch.qos.logback.classic.turbo.MDCValueLevelPair', + 'ch.qos.logback.classic.turbo.DynamicThresholdFilter', + 'ch.qos.logback.classic.turbo.MatchingFilter', + 'ch.qos.logback.classic.turbo.LRUMessageCache', + 'ch.qos.logback.classic.selector.servlet.LoggerContextFilter', + 'ch.qos.logback.classic.selector.servlet.ContextDetachingSCL', + 'ch.qos.logback.classic.selector.ContextJNDISelector', + 'ch.qos.logback.classic.selector.DefaultContextSelector', + 'ch.qos.logback.classic.selector.ContextSelector', + 'ch.qos.logback.classic.sift.MDCBasedDiscriminator', + 'ch.qos.logback.classic.sift.SiftingJoranConfigurator', + 'ch.qos.logback.classic.sift.JNDIBasedContextDiscriminator', + 'ch.qos.logback.classic.sift.AppenderFactoryUsingJoran', + 'ch.qos.logback.classic.sift.ContextBasedDiscriminator', + 'ch.qos.logback.classic.sift.SiftingAppender', + 'ch.qos.logback.classic.sift.SiftAction', + 'ch.qos.logback.classic.html.UrlCssBuilder', + 'ch.qos.logback.classic.html.HTMLLayout', + 'ch.qos.logback.classic.html.DefaultCssBuilder', + 'ch.qos.logback.classic.html.DefaultThrowableRenderer', + 'ch.qos.logback.classic.Logger', + 'ch.qos.logback.classic.pattern.ThrowableHandlingConverter', + 'ch.qos.logback.classic.pattern.ContextNameConverter', + 'ch.qos.logback.classic.pattern.LocalSequenceNumberConverter', + 'ch.qos.logback.classic.pattern.ClassOfCallerConverter', + 'ch.qos.logback.classic.pattern.PrefixCompositeConverter', + 'ch.qos.logback.classic.pattern.LineOfCallerConverter', + 'ch.qos.logback.classic.pattern.EnsureExceptionHandling', + 'ch.qos.logback.classic.pattern.TargetLengthBasedClassNameAbbreviator', + 'ch.qos.logback.classic.pattern.FileOfCallerConverter', + 'ch.qos.logback.classic.pattern.LevelConverter', + 'ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter', + 'ch.qos.logback.classic.pattern.NamedConverter', + 'ch.qos.logback.classic.pattern.ClassicConverter', + 'ch.qos.logback.classic.pattern.NopThrowableInformationConverter', + 'ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter', + 'ch.qos.logback.classic.pattern.MethodOfCallerConverter', + 'ch.qos.logback.classic.pattern.CallerDataConverter', + 'ch.qos.logback.classic.pattern.ClassNameOnlyAbbreviator', + 'ch.qos.logback.classic.pattern.MarkerConverter', + 'ch.qos.logback.classic.pattern.RelativeTimeConverter', + 'ch.qos.logback.classic.pattern.DateConverter', + 'ch.qos.logback.classic.pattern.PropertyConverter', + 'ch.qos.logback.classic.pattern.ThreadConverter', + 'ch.qos.logback.classic.pattern.LineSeparatorConverter', + 'ch.qos.logback.classic.pattern.MDCConverter', + 'ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter', + 'ch.qos.logback.classic.pattern.ThrowableProxyConverter', + 'ch.qos.logback.classic.pattern.Abbreviator', + 'ch.qos.logback.classic.pattern.Util', + 'ch.qos.logback.classic.pattern.LoggerConverter', + 'ch.qos.logback.classic.pattern.SyslogStartConverter', + 'ch.qos.logback.classic.pattern.MessageConverter', + 'ch.qos.logback.classic.gaffer.GafferUtil', + 'ch.qos.logback.classic.boolex.OnMarkerEvaluator', + 'ch.qos.logback.classic.boolex.JaninoEventEvaluator', + 'ch.qos.logback.classic.boolex.OnErrorEvaluator', + 'ch.qos.logback.classic.boolex.GEventEvaluator', + 'ch.qos.logback.classic.boolex.IEvaluator', + 'ch.qos.logback.classic.filter.ThresholdFilter', + 'ch.qos.logback.classic.filter.LevelFilter', + 'java.lang.System', + 'java.lang.System.getenv', + 'java.lang.System.getProperty', + 'java.lang.System.getenv', + 'java.util.Map.getOrDefault', + 'com.kotlindiscord.kord.extensions.utils._EnvironmentKt.envOrNull', +] diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 53a4bc800f..3f12615a57 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ ksp = "1.9.22-1.0.17" ktor = "2.3.8" kx-coro = "1.8.0" kx-ser = "1.6.3" -linkie = "1.0.114" +linkie = "1.0.121" logback = "1.5.0" logback-groovy = "1.14.5" logging = "6.0.3"