discord-kagebot/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt
kageru 7ebafc9958
Completely rewrote config
Added a rawconfig as an intermediate step when parsing the TOML.
This will make nullability much more reliable and also gives me lots of
options in the future. It also broke all tests because reading the
config (not the raw config) now depends on the discord API. :tehe:
2019-06-12 23:43:36 +02:00

67 lines
2.3 KiB
Kotlin

package moe.kageru.kagebot
import moe.kageru.kagebot.Log.log
import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.config.RawConfig
import org.javacord.api.DiscordApiBuilder
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.event.server.member.ServerMemberJoinEvent
import java.io.File
class Kagebot {
companion object {
fun processMessage(event: MessageCreateEvent) {
if (event.messageAuthor.isYourself) {
return
}
for (command in Globals.config.commands) {
if (command.matches(event.messageContent)) {
command.execute(event)
break
}
}
}
fun welcomeUser(event: ServerMemberJoinEvent) {
Globals.config.features.welcome!!.let { welcome ->
val message = event.user.sendMessage(welcome.embed)
// If the user disabled direct messages, try the fallback (if defined)
if (message.isCompletedExceptionally
&& welcome.fallbackChannel != null
&& welcome.fallbackMessage != null
) {
welcome.fallbackChannel.sendMessage(
welcome.fallbackMessage.replace(
"@@",
MessageUtil.mention(event.user)
)
)
}
}
}
}
init {
Globals.api = DiscordApiBuilder().setToken(getSecret()).login().join()
try {
Globals.config = Config(RawConfig.read())
} catch (e: IllegalArgumentException) {
println("Config error:\n$e,\n${e.message},\n${e.stackTrace}")
System.exit(1)
}
Runtime.getRuntime().addShutdownHook(Thread {
log.info("Bot has been interrupted. Shutting down.")
Globals.api.disconnect()
})
log.info("kagebot Mk II running")
Globals.api.addMessageCreateListener { processMessage(it) }
Globals.config.features.welcome?.let { welcome ->
if (welcome.enabled) {
Globals.api.addServerMemberJoinListener { welcomeUser(it) }
}
}
}
private fun getSecret() = File("secret").readText().replace("\n", "")
}