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

71 lines
2.4 KiB
Kotlin
Raw Normal View History

package moe.kageru.kagebot
import moe.kageru.kagebot.Util.checked
2019-07-17 23:17:16 +02:00
import moe.kageru.kagebot.Util.failed
2019-07-13 15:39:50 +02:00
import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.config.ConfigParser
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
import kotlin.system.exitProcess
2019-06-15 12:55:47 +02:00
fun main() {
Kagebot.init()
}
object Kagebot {
fun processMessage(event: MessageCreateEvent) {
if (event.messageAuthor.isBotUser) {
2019-06-15 14:35:17 +02:00
if (event.messageAuthor.isYourself) {
2019-07-17 23:17:16 +02:00
val loggedMessage =
if (event.readableMessageContent.isBlank()) "[embed]" else event.readableMessageContent
Log.info("<Self> $loggedMessage")
2019-06-15 14:35:17 +02:00
}
2019-06-15 12:55:47 +02:00
return
}
2019-07-13 15:39:50 +02:00
for (command in Config.commands) {
if (command.matches(event.readableMessageContent)) {
2019-06-15 12:55:47 +02:00
command.execute(event)
break
}
}
2019-06-15 12:55:47 +02:00
}
2019-06-15 12:55:47 +02:00
fun welcomeUser(event: ServerMemberJoinEvent) {
2019-07-17 23:17:16 +02:00
Config.features.welcome!!.run {
val message = event.user.sendMessage(embed)
2019-06-15 12:55:47 +02:00
// If the user disabled direct messages, try the fallback (if defined)
2019-07-17 23:17:16 +02:00
if (message.failed() && hasFallback()) {
fallbackChannel!!.sendMessage(
fallbackMessage!!.replace("@@", MessageUtil.mention(event.user))
2019-06-15 12:55:47 +02:00
)
}
}
}
2019-07-17 23:17:16 +02:00
private fun getSecret() = File("secret").readText().trim()
2019-06-15 12:55:47 +02:00
fun init() {
Globals.api = DiscordApiBuilder().setToken(getSecret()).login().join()
try {
ConfigParser.initialLoad(RawConfig.read())
} catch (e: IllegalArgumentException) {
println("Config error:\n$e,\n${e.message},\n${e.stackTrace.joinToString("\n")}")
exitProcess(1)
}
Runtime.getRuntime().addShutdownHook(Thread {
2019-07-17 21:16:17 +02:00
Log.info("Bot has been interrupted. Shutting down.")
Globals.api.disconnect()
})
2019-07-17 21:16:17 +02:00
Log.info("kagebot Mk II running")
Globals.api.addMessageCreateListener { checked { processMessage(it) } }
2019-07-13 15:39:50 +02:00
Config.features.welcome?.let {
Globals.api.addServerMemberJoinListener {
checked { welcomeUser(it) }
}
}
}
}