Send uncaught errors to bot owner via DM

This commit is contained in:
kageru 2019-06-15 12:27:20 +02:00
parent 2ed5d6ab19
commit ab1d4729f4
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
4 changed files with 29 additions and 9 deletions

View File

@ -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) }
}
}
}
}

View File

@ -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()
)
)
}
}
}

View File

@ -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) }

View File

@ -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)
}*/
}