VoidPlugin/VoidPlugin/src/main/kotlin/nl/voidcorp/mainplugin/VoidPlugin.kt

71 lines
2.4 KiB
Kotlin

package nl.voidcorp.mainplugin
import nl.voidcorp.mainplugin.commands.HealCommand
import nl.voidcorp.mainplugin.commands.MemeCommand
import nl.voidcorp.mainplugin.commands.NickCommand
import nl.voidcorp.mainplugin.messaging.Message
import nl.voidcorp.mainplugin.messaging.MessageType
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction
import java.io.File
class VoidPlugin(
override val comment: String = "What are we going to do today?"
) : VoidPluginBase() {
lateinit var conf: Config
var db: Database? = null
override fun enable() {
server.pluginManager.registerEvents(VoidEvents, this)
CommandHandler(this)
.registerCommand("memes", MemeCommand())
.registerCommand("nick", NickCommand())
.registerCommand("heal", HealCommand())
send(name, MessageType.GET_CONFIG)
send(name, MessageType.POST_CONFIG, moshi.adapter<Config>().toJson(conf))
if (db == null)
db = Database.connect(
conf.databaseUrl,
driver = conf.driver
)
transaction {
SchemaUtils.createMissingTablesAndColumns(NickTable)
}
}
override fun disable() {
send(name, MessageType.POST_CONFIG, moshi.adapter<Config>().toJson(conf))
}
override fun recieve(message: Message) {
when (message.messageType) {
MessageType.POST_CONFIG -> {
writeConfig(message.from, message.content)
logger.info("Saved config for ${message.from}")
}
MessageType.GET_CONFIG -> {
if (message.from == name) {
conf = moshi.adapter<Config>().fromJson(readConfig(name))!!
} else {
send(message.from, MessageType.GET_CONFIG, readConfig(message.from))
}
}
}
}
private fun readConfig(filename: String): String {
val config = File(dataFolder.apply { mkdirs() }, "$filename.json")
if (!config.exists()) {
config.createNewFile()
return "{}"
}
return config.readText()
}
private fun writeConfig(filename: String, configString: String) {
val config = File(dataFolder.apply { mkdirs() }, "$filename.json")
config.writeText(configString)
}
}