Allow partial config reloads
This commit is contained in:
parent
62bdb582de
commit
3d80540c03
|
@ -9,39 +9,46 @@ import java.awt.Color
|
|||
import kotlin.IllegalArgumentException
|
||||
|
||||
class Config(rawConfig: RawConfig) {
|
||||
val system: SystemConfig
|
||||
val localization: Localization
|
||||
val commands: List<Command>
|
||||
val features: Features
|
||||
val system: SystemConfig = rawConfig.system?.let(::SystemConfig)
|
||||
?: throw IllegalArgumentException("No [system] block in config.")
|
||||
var localization: Localization = rawConfig.localization?.let(::Localization)
|
||||
?: throw IllegalArgumentException("No [localization] block in config.")
|
||||
var commands: List<Command> = rawConfig.commands?.map(::Command) ?: emptyList()
|
||||
var features: Features = rawConfig.features?.let(::Features)
|
||||
?: throw IllegalArgumentException("No [feature] block in config.")
|
||||
|
||||
init {
|
||||
system = rawConfig.system?.let {
|
||||
SystemConfig(
|
||||
it.serverId ?: throw IllegalArgumentException("No [system.server] defined."),
|
||||
Color.decode(it.color ?: "#1793d0")
|
||||
)
|
||||
} ?: throw IllegalArgumentException("No [system] block in config.")
|
||||
Globals.server = api.getServerById(system.serverId).orElseThrow()
|
||||
}
|
||||
|
||||
localization = rawConfig.localization?.let {
|
||||
Localization(
|
||||
permissionDenied = it.permissionDenied
|
||||
?: throw IllegalArgumentException("No [localization.permissionDenied] defined"),
|
||||
redirectedMessage = it.redirectedMessage
|
||||
?: throw IllegalArgumentException("No [localization.permissionDenied] defined"),
|
||||
messageDeleted = it.messageDeleted
|
||||
?: throw IllegalArgumentException("No [localization.permissionDenied] defined")
|
||||
)
|
||||
} ?: throw IllegalArgumentException("No [localization] block in config.")
|
||||
fun reloadLocalization(rawLocalization: RawLocalization) {
|
||||
this.localization = Localization(rawLocalization)
|
||||
}
|
||||
|
||||
commands = rawConfig.commands?.let { rawCommands ->
|
||||
rawCommands.map { Command(it) }
|
||||
} ?: emptyList()
|
||||
fun reloadCommands(rawConfig: RawConfig) {
|
||||
this.commands = rawConfig.commands?.map(::Command)
|
||||
?: throw IllegalArgumentException("No commands found in config.")
|
||||
}
|
||||
|
||||
features = rawConfig.features?.let { Features(it) }
|
||||
?: throw IllegalArgumentException("No [feature] block in config.")
|
||||
fun reloadFeatures(rawFeatures: RawFeatures) {
|
||||
this.features = Features(rawFeatures)
|
||||
}
|
||||
}
|
||||
|
||||
class SystemConfig(val serverId: String, val color: Color)
|
||||
class Localization(val permissionDenied: String, val redirectedMessage: String, val messageDeleted: String)
|
||||
class SystemConfig(val serverId: String, val color: Color) {
|
||||
constructor(rawSystemConfig: RawSystemConfig) : this(
|
||||
rawSystemConfig.serverId ?: throw IllegalArgumentException("No [system.server] defined."),
|
||||
Color.decode(rawSystemConfig.color ?: "#1793d0")
|
||||
)
|
||||
}
|
||||
|
||||
class Localization(val permissionDenied: String, val redirectedMessage: String, val messageDeleted: String) {
|
||||
constructor(rawLocalization: RawLocalization) : this(
|
||||
permissionDenied = rawLocalization.permissionDenied
|
||||
?: throw IllegalArgumentException("No [localization.permissionDenied] defined"),
|
||||
redirectedMessage = rawLocalization.redirectedMessage
|
||||
?: throw IllegalArgumentException("No [localization.permissionDenied] defined"),
|
||||
messageDeleted = rawLocalization.messageDeleted
|
||||
?: throw IllegalArgumentException("No [localization.permissionDenied] defined")
|
||||
)
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ class RawConfig(
|
|||
companion object {
|
||||
const val DEFAULT_CONFIG_PATH = "config.toml"
|
||||
|
||||
fun readFromString(tomlContent: String) = Toml().read(tomlContent).to(RawConfig::class.java)
|
||||
|
||||
fun read(path: String = DEFAULT_CONFIG_PATH): RawConfig {
|
||||
val toml: Toml = Toml().read(run {
|
||||
val file = File(path)
|
||||
|
|
|
@ -10,7 +10,6 @@ import moe.kageru.kagebot.TestUtil.embedToString
|
|||
import moe.kageru.kagebot.TestUtil.messageableAuthor
|
||||
import moe.kageru.kagebot.TestUtil.mockMessage
|
||||
import moe.kageru.kagebot.TestUtil.testMessageSuccess
|
||||
import moe.kageru.kagebot.config.RawConfig.Companion.config
|
||||
import org.javacord.api.entity.message.embed.EmbedBuilder
|
||||
|
||||
class CommandTest : StringSpec({
|
||||
|
|
|
@ -42,8 +42,9 @@ object TestUtil {
|
|||
}
|
||||
|
||||
fun prepareServerConfig(sentMessages: MutableList<EmbedBuilder> = mutableListOf()) {
|
||||
val channelMock = mockk<ServerTextChannel>()
|
||||
every { channelMock.sendMessage(capture(sentMessages)) } returns mockk()
|
||||
val channelMock = mockk<ServerTextChannel> {
|
||||
every { sendMessage(capture(sentMessages)) } returns mockk()
|
||||
}
|
||||
val resultMock = mockk<Optional<ServerTextChannel>>()
|
||||
every { resultMock.isPresent } returns true
|
||||
every { resultMock.get() } returns channelMock
|
||||
|
|
Loading…
Reference in New Issue
Block a user