2019-06-12 23:43:36 +02:00
package moe.kageru.kagebot.config
import moe.kageru.kagebot.Globals
import moe.kageru.kagebot.Globals.api
import moe.kageru.kagebot.command.Command
import moe.kageru.kagebot.features.Features
import java.awt.Color
class Config ( rawConfig : RawConfig ) {
2019-07-07 10:54:20 +02:00
private val system : SystemConfig = rawConfig . system ?. let ( :: SystemConfig )
2019-06-14 21:23:17 +02:00
?: throw IllegalArgumentException ( " No [system] block in config. " )
var localization : Localization = rawConfig . localization ?. let ( :: Localization )
?: throw IllegalArgumentException ( " No [localization] block in config. " )
2019-06-14 23:16:31 +02:00
var commands : List < Command >
var features : Features
2019-06-12 23:43:36 +02:00
init {
2019-07-07 10:54:20 +02:00
Globals . systemConfig = system
2019-06-12 23:43:36 +02:00
Globals . server = api . getServerById ( system . serverId ) . orElseThrow ( )
2019-06-14 23:16:31 +02:00
this . commands = rawConfig . commands ?. map ( :: Command ) ?: emptyList ( )
2019-07-07 10:54:20 +02:00
Globals . config = this
2019-06-14 23:16:31 +02:00
this . features = rawConfig . features ?. let ( :: Features ) ?: Features . NONE
2019-06-14 21:23:17 +02:00
}
fun reloadLocalization ( rawLocalization : RawLocalization ) {
this . localization = Localization ( rawLocalization )
}
fun reloadCommands ( rawConfig : RawConfig ) {
this . commands = rawConfig . commands ?. map ( :: Command )
?: throw IllegalArgumentException ( " No commands found in config. " )
}
2019-06-12 23:43:36 +02:00
2019-06-14 21:23:17 +02:00
fun reloadFeatures ( rawFeatures : RawFeatures ) {
this . features = Features ( rawFeatures )
2019-06-12 23:43:36 +02:00
}
}
2019-06-14 21:23:17 +02:00
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
2019-06-15 11:47:11 +02:00
?: throw IllegalArgumentException ( " No [localization.redirectMessage] defined " ) ,
2019-06-14 21:23:17 +02:00
messageDeleted = rawLocalization . messageDeleted
2019-06-15 11:47:11 +02:00
?: throw IllegalArgumentException ( " No [localization.messageDeleted] defined " )
2019-06-14 21:23:17 +02:00
)
}