diff --git a/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt b/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt index 598c5a0..c202595 100644 --- a/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt +++ b/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt @@ -1,6 +1,7 @@ package moe.kageru.kagebot import moe.kageru.kagebot.Log.log +import moe.kageru.kagebot.Util.checked import moe.kageru.kagebot.config.Config import moe.kageru.kagebot.config.RawConfig import org.javacord.api.DiscordApiBuilder @@ -46,7 +47,7 @@ class Kagebot { try { Globals.config = Config(RawConfig.read()) } catch (e: IllegalArgumentException) { - println("Config error:\n$e,\n${e.message},\n${e.stackTrace}") + println("Config error:\n$e,\n${e.message},\n${e.stackTrace.joinToString("\n")}") System.exit(1) } Runtime.getRuntime().addShutdownHook(Thread { @@ -54,10 +55,12 @@ class Kagebot { Globals.api.disconnect() }) log.info("kagebot Mk II running") - Globals.api.addMessageCreateListener { processMessage(it) } + Globals.api.addMessageCreateListener { checked { processMessage(it) } } Globals.config.features.welcome?.let { welcome -> if (welcome.enabled) { - Globals.api.addServerMemberJoinListener { welcomeUser(it) } + Globals.api.addServerMemberJoinListener { + checked { welcomeUser(it) } + } } } } diff --git a/src/main/kotlin/moe/kageru/kagebot/Util.kt b/src/main/kotlin/moe/kageru/kagebot/Util.kt index 834ef31..a1049f6 100644 --- a/src/main/kotlin/moe/kageru/kagebot/Util.kt +++ b/src/main/kotlin/moe/kageru/kagebot/Util.kt @@ -2,9 +2,12 @@ package moe.kageru.kagebot import moe.kageru.kagebot.Globals.api import moe.kageru.kagebot.Globals.server +import moe.kageru.kagebot.Log.log import org.javacord.api.entity.channel.TextChannel import org.javacord.api.entity.message.MessageAuthor +import org.javacord.api.entity.message.embed.EmbedBuilder import org.javacord.api.entity.permission.Role +import java.awt.Color import java.util.* import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletionException @@ -80,4 +83,23 @@ object Util { } } } + + inline fun checked(op: (() -> Unit)) { + try { + op() + } catch (e: Exception) { + log.warning("An uncaught exception occurred.\n$e") + Globals.api.owner.get().sendMessage( + EmbedBuilder() + .setTimestampToNow() + .setColor(Color.RED) + .addField("Error", "kagebot has encountered an error") + .addField( + "$e", """``` + ${e.stackTrace.joinToString("\n")} + ```""".trimIndent() + ) + ) + } + } } \ No newline at end of file diff --git a/src/main/kotlin/moe/kageru/kagebot/command/Command.kt b/src/main/kotlin/moe/kageru/kagebot/command/Command.kt index c86440c..5bb2944 100644 --- a/src/main/kotlin/moe/kageru/kagebot/command/Command.kt +++ b/src/main/kotlin/moe/kageru/kagebot/command/Command.kt @@ -18,7 +18,7 @@ class Command(cmd: RawCommand) { val regex: Regex? init { - trigger = cmd.trigger!! + trigger = cmd.trigger ?: throw IllegalArgumentException("Every command must have a trigger.") response = cmd.response matchType = cmd.matchType?.let { type -> MatchType.values().find { it.name.equals(type, ignoreCase = true) } diff --git a/src/main/kotlin/moe/kageru/kagebot/main.kt b/src/main/kotlin/moe/kageru/kagebot/main.kt index 11a8f13..c01285a 100644 --- a/src/main/kotlin/moe/kageru/kagebot/main.kt +++ b/src/main/kotlin/moe/kageru/kagebot/main.kt @@ -1,10 +1,5 @@ package moe.kageru.kagebot fun main() { - //try { Kagebot() - /*} catch (e: Exception) { - log.warning("An exception occurred in the main thread, exiting.\n${e.stackTrace.joinToString("\n")}") - System.exit(1) - }*/ }