diff --git a/kord-extensions/src/main/kotlin/dev/kordex/core/ExtensibleBot.kt b/kord-extensions/src/main/kotlin/dev/kordex/core/ExtensibleBot.kt index e088120c4..73105d280 100644 --- a/kord-extensions/src/main/kotlin/dev/kordex/core/ExtensibleBot.kt +++ b/kord-extensions/src/main/kotlin/dev/kordex/core/ExtensibleBot.kt @@ -363,6 +363,7 @@ public open class ExtensibleBot( * @param scope Coroutine scope to run the body of your callback under. * @param consumer The callback to run when the event is fired. */ + @Suppress("TooGenericExceptionCaught", "StringLiteralDuplication") public inline fun on( launch: Boolean = true, scope: CoroutineScope = kordRef, @@ -372,9 +373,19 @@ public open class ExtensibleBot( .filterIsInstance() .onEach { runCatching { - if (launch) scope.launch { consumer(it) } else consumer(it) - }.onFailure { logger.catching(it) } - }.catch { logger.catching(it) } + if (launch) { + scope.launch { + try { + consumer(it) + } catch (t: Throwable) { + logger.error(t) { "Error thrown from low-level event handler: $consumer" } + } + } + } else { + consumer(it) + } + }.onFailure { logger.error(it) { "Error thrown from low-level event handler: $consumer" } } + }.catch { logger.error(it) { "Error thrown from low-level event handler: $consumer" } } .launchIn(kordRef) /** diff --git a/kord-extensions/src/main/kotlin/dev/kordex/core/utils/_Translation.kt b/kord-extensions/src/main/kotlin/dev/kordex/core/utils/_Translation.kt index ab112a16b..46cfe3d00 100644 --- a/kord-extensions/src/main/kotlin/dev/kordex/core/utils/_Translation.kt +++ b/kord-extensions/src/main/kotlin/dev/kordex/core/utils/_Translation.kt @@ -8,7 +8,7 @@ package dev.kordex.core.utils -import dev.kord.core.entity.channel.GuildChannel +import dev.kord.core.entity.interaction.GuildInteraction import dev.kord.core.event.Event import dev.kord.core.event.interaction.InteractionCreateEvent import dev.kord.core.event.message.MessageCreateEvent @@ -54,15 +54,12 @@ public suspend fun InteractionCreateEvent.getLocale(): Locale { var result = bot.settings.i18nBuilder.defaultLocale for (resolver in bot.settings.i18nBuilder.localeResolvers) { - val channel = interaction.channel.asChannelOrNull() - - val guild = if (channel is GuildChannel) { - channel.guild - } else { - null - } - - val resolved = resolver(guild, interaction.channel, interaction.user, interaction) + val resolved = resolver( + (interaction as? GuildInteraction)?.guild, + interaction.channel, + interaction.user, + interaction + ) if (resolved != null) { result = resolved