2019-07-14 17:27:43 +02:00
package moe.kageru.kagebot.features
import moe.kageru.kagebot.Log
2019-07-17 22:04:06 +02:00
import moe.kageru.kagebot.MessageUtil.sendEmbed
2019-10-18 19:34:41 +02:00
import moe.kageru.kagebot.config.Config
2019-07-14 17:27:43 +02:00
import moe.kageru.kagebot.config.ConfigParser
import moe.kageru.kagebot.config.RawConfig
2019-07-17 22:56:31 +02:00
import org.javacord.api.entity.channel.TextChannel
2019-07-14 17:27:43 +02:00
import org.javacord.api.event.message.MessageCreateEvent
2019-07-17 23:42:12 +02:00
class SetConfigFeature : MessageFeature {
2019-07-14 17:27:43 +02:00
@ExperimentalStdlibApi
2019-07-17 23:42:12 +02:00
override fun handle ( message : MessageCreateEvent ) {
2019-07-14 17:27:43 +02:00
if ( message . messageAttachments . size != 1 ) {
message . channel . sendMessage ( " Error: please attach the new config to your message. " )
return
}
val newConfig = message . messageAttachments [ 0 ] . url . openStream ( ) . readAllBytes ( ) . decodeToString ( )
val rawConfig = try {
RawConfig . readFromString ( newConfig )
} catch ( e : IllegalStateException ) {
2019-07-17 22:56:31 +02:00
reportError ( message . channel , e )
2019-07-14 17:27:43 +02:00
return
}
try {
2019-10-18 19:34:41 +02:00
Config . localization = Config . localeSpec . string ( newConfig )
2019-07-14 17:27:43 +02:00
ConfigParser . reloadFeatures ( rawConfig )
ConfigParser . reloadCommands ( rawConfig )
2019-07-14 21:07:19 +02:00
ConfigParser . configFile . writeText ( newConfig )
message . channel . sendMessage ( " Config reloaded. " )
2019-07-14 17:27:43 +02:00
} catch ( e : IllegalArgumentException ) {
2019-07-17 22:04:06 +02:00
message . channel . sendEmbed {
addField ( " Error " , " ``` ${e.message} ``` " )
}
2019-07-14 17:27:43 +02:00
}
}
2019-07-17 22:56:31 +02:00
private fun reportError ( message : TextChannel , e : IllegalStateException ) {
message . sendEmbed {
addField (
" An unexpected error occured. This is probably caused by a malformed config file. Perhaps this can help: " ,
" ``` $e : ${e.message} "
)
}
Log . info ( " Could not parse new config: $e : ${e.message} " )
return
}
2019-07-14 17:27:43 +02:00
}