discord-kagebot/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt

57 lines
1.7 KiB
Kotlin
Raw Normal View History

package moe.kageru.kagebot
2019-11-11 19:09:58 +01:00
import arrow.core.extensions.list.foldable.find
import moe.kageru.kagebot.Util.checked
2019-07-13 15:39:50 +02:00
import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.config.ConfigParser
import moe.kageru.kagebot.cron.CronD
import moe.kageru.kagebot.persistence.Dao
import org.javacord.api.DiscordApiBuilder
import org.javacord.api.event.message.MessageCreateEvent
import java.io.File
import kotlin.system.exitProcess
2019-06-15 12:55:47 +02:00
fun main() {
2019-11-14 15:10:30 +01:00
Kagebot.init()
2019-06-15 12:55:47 +02:00
}
object Kagebot {
2019-11-14 15:10:30 +01:00
fun MessageCreateEvent.process() {
if (messageAuthor.isBotUser) {
handleOwn()
return
2019-09-17 23:22:22 +02:00
}
2019-11-14 15:10:30 +01:00
Config.commands
.find { it.matches(readableMessageContent) && it.isAllowed(this) }
.map { it.execute(this) }
}
2019-09-17 23:22:22 +02:00
2019-11-14 15:10:30 +01:00
private fun MessageCreateEvent.handleOwn() {
if (messageAuthor.isYourself) {
val loggedMessage = readableMessageContent.ifBlank { "[embed]" }
Log.info("<Self> $loggedMessage")
2019-06-15 12:55:47 +02:00
}
2019-11-14 15:10:30 +01:00
}
2019-11-14 15:10:30 +01:00
fun init() {
val secret = File("secret").readText().trim()
val api = DiscordApiBuilder().setToken(secret).setAllIntents().login().join()
2019-11-14 15:10:30 +01:00
Globals.api = api
ConfigParser.initialLoad(ConfigParser.DEFAULT_CONFIG_PATH).mapLeft { e ->
println("Config parsing error:\n$e,\n${e.message},\n${e.stackTrace.joinToString("\n")}")
println("Caused by: ${e.cause}\n${e.cause?.stackTrace?.joinToString("\n")}")
2019-11-14 15:10:30 +01:00
exitProcess(1)
}
2019-11-14 15:10:30 +01:00
Runtime.getRuntime().addShutdownHook(Thread {
Log.info("Bot has been interrupted. Shutting down.")
Dao.setCommandCounter(Globals.commandCounter.get())
Dao.close()
api.disconnect()
})
Log.info("kagebot Mk II running")
api.addMessageCreateListener { checked { it.process() } }
Config.features.eventFeatures().forEach { it.register(api) }
CronD.startAll()
}
}