discord-kagebot/src/main/kotlin/moe/kageru/kagebot/config/ConfigParser.kt

58 lines
2.1 KiB
Kotlin

package moe.kageru.kagebot.config
import moe.kageru.kagebot.Globals
import moe.kageru.kagebot.command.Command
import moe.kageru.kagebot.config.SystemSpec.serverId
import moe.kageru.kagebot.features.Features
import java.io.File
object ConfigParser {
val configFile: File = File(RawConfig.DEFAULT_CONFIG_PATH)
fun initialLoad(file: String) {
val rawConfig = RawConfig.read(file)
val config = Config.specs.file(RawConfig.getFile(file))
Config.config = config
Config.server = Globals.api.getServerById(config[serverId])
.orElseThrow { IllegalArgumentException("Invalid server configured.") }
reloadLocalization(rawConfig)
reloadFeatures(rawConfig)
reloadCommands(rawConfig)
}
fun reloadLocalization(rawConfig: RawConfig) {
Config.localization = rawConfig.localization?.let(::Localization)
?: throw IllegalArgumentException("No [localization] block in config.")
}
fun reloadCommands(rawConfig: RawConfig) {
Config.commands = rawConfig.commands?.map(::Command)?.toMutableList()
?: throw IllegalArgumentException("No commands found in config.")
}
fun reloadFeatures(rawConfig: RawConfig) {
Config.features = rawConfig.features?.let(::Features)
?: Features(RawFeatures(null, null))
}
}
class Localization(
val permissionDenied: String,
val redirectedMessage: String,
val messageDeleted: String,
val timeout: String
) {
constructor(rawLocalization: RawLocalization) : this(
permissionDenied = rawLocalization.permissionDenied
?: throw IllegalArgumentException("No [localization.permissionDenied] defined"),
redirectedMessage = rawLocalization.redirectedMessage
?: throw IllegalArgumentException("No [localization.redirectMessage] defined"),
messageDeleted = rawLocalization.messageDeleted
?: throw IllegalArgumentException("No [localization.messageDeleted] defined"),
timeout = rawLocalization.timeout
?: throw IllegalArgumentException("No [localization.timeout] defined")
)
}