diff --git a/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt b/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt index 50f2475..b162377 100644 --- a/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt +++ b/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt @@ -1,5 +1,6 @@ package moe.kageru.kagebot +import moe.kageru.kagebot.Util.failed import moe.kageru.kagebot.config.Config import org.javacord.api.entity.message.Message import org.javacord.api.entity.message.MessageAuthor @@ -30,7 +31,10 @@ object MessageUtil { setTimestampToNow() op() } - sendMessage(embed) + val sent = sendMessage(embed) + if (sent.failed()) { + // for logging + } } /** diff --git a/src/main/kotlin/moe/kageru/kagebot/Util.kt b/src/main/kotlin/moe/kageru/kagebot/Util.kt index 269a7be..6f946ef 100644 --- a/src/main/kotlin/moe/kageru/kagebot/Util.kt +++ b/src/main/kotlin/moe/kageru/kagebot/Util.kt @@ -73,6 +73,11 @@ object Util { try { join() } catch (e: CompletionException) { + Log.warn("""Error during CompletableFuture: + |$e + |${e.localizedMessage} + |${e.stackTrace.joinToString("\n\t")} + """.trimMargin()) // we don’t care about this error, but I don’t want to spam stdout } return isCompletedExceptionally diff --git a/src/main/kotlin/moe/kageru/kagebot/features/WelcomeFeature.kt b/src/main/kotlin/moe/kageru/kagebot/features/WelcomeFeature.kt index d493bca..f87704f 100644 --- a/src/main/kotlin/moe/kageru/kagebot/features/WelcomeFeature.kt +++ b/src/main/kotlin/moe/kageru/kagebot/features/WelcomeFeature.kt @@ -32,8 +32,10 @@ class WelcomeFeature(rawWelcome: RawWelcomeFeature) : MessageFeature, EventFeatu override fun handle(message: MessageCreateEvent) { embed?.let { - MessageUtil.sendEmbed(message.channel, it) - } + val sent = MessageUtil.sendEmbed(message.channel, it) + // invoke this for logging + sent.failed() + } ?: Log.info("Welcome command was triggered, but no welcome embed defined.") } private fun hasFallback(): Boolean = fallbackChannel != null && fallbackMessage != null diff --git a/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt b/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt index 069665e..b03b9b6 100644 --- a/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt +++ b/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt @@ -40,9 +40,15 @@ object TestUtil { return mockk { every { messageContent } returns content every { readableMessageContent } returns content - every { channel.sendMessage(capture(replies)) } returns mockk() - every { channel.sendMessage(capture(replyEmbeds)) } returns mockk() - every { channel.sendMessage(capture(files)) } returns mockk() + every { channel.sendMessage(capture(replies)) } returns mockk(relaxed = true) { + every { isCompletedExceptionally } returns false + } + every { channel.sendMessage(capture(replyEmbeds)) } returns mockk(relaxed = true) { + every { isCompletedExceptionally } returns false + } + every { channel.sendMessage(capture(files)) } returns mockk(relaxed = true) { + every { isCompletedExceptionally } returns false + } every { message.canYouDelete() } returns true every { isPrivateMessage } returns false // We can’t use a nested mock here because other fields of messageAuthor might @@ -59,7 +65,7 @@ object TestUtil { fun messageableAuthor(messages: MutableList = mutableListOf()): User { return mockk { every { getRoles(any()) } returns emptyList() - every { sendMessage(capture(messages)) } returns mockk() + every { sendMessage(capture(messages)) } returns mockk(relaxed = true) } } @@ -71,11 +77,13 @@ object TestUtil { val channel = mockk>(relaxed = true) { every { isPresent } returns true every { get() } returns mockk { - every { sendMessage(capture(sentEmbeds)) } returns mockk { - every { join() } returns mockk() + every { sendMessage(capture(sentEmbeds)) } returns mockk(relaxed = true) { + every { join() } returns mockk { + every { isCompletedExceptionally } returns false + } every { isCompletedExceptionally } returns false } - every { sendMessage(capture(sentMessages)) } returns mockk() + every { sendMessage(capture(sentMessages)) } returns mockk(relaxed = true) } } val api = mockk { @@ -88,7 +96,9 @@ object TestUtil { every { getMembersByName(any()) } returns listOf(mockk(relaxed = true) { every { id } returns 123 every { getRoles(any()) } returns listOf(TEST_ROLE) - every { sendMessage(capture(dmEmbeds)) } returns mockk() + every { sendMessage(capture(dmEmbeds)) } returns mockk(relaxed = true) { + every { isCompletedExceptionally } returns false + } }) }) } diff --git a/src/test/kotlin/moe/kageru/kagebot/features/TimeoutFeatureTest.kt b/src/test/kotlin/moe/kageru/kagebot/features/TimeoutFeatureTest.kt index aaf1661..dfa5a81 100644 --- a/src/test/kotlin/moe/kageru/kagebot/features/TimeoutFeatureTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/features/TimeoutFeatureTest.kt @@ -12,6 +12,7 @@ import org.javacord.api.entity.message.embed.EmbedBuilder class TimeoutFeatureTest : StringSpec({ TestUtil.prepareTestEnvironment() "should remove and store roles" { + clearTimeouts() TestUtil.mockMessage("!timeout kageru 99999999").process() Dao.getAllTimeouts().let { it.size shouldBe 1