diff --git a/CHANGELOG.md b/CHANGELOG.md index 662be960ed..122e6c1ac6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ * `MultipartRequestCallFactory` now will use file name as multipart `filename` parameter instead of generated filename * New extension `MPPFile#asMultipartFile` +* `API` + * Fixes in `TelegramBot#withAction` * `Behaviour Builder`: * New extensions `BehaviourContext#commandWithArgs` and `BehaviourContext#onCommandWithArgs` diff --git a/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/SendActionDSL.kt b/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/SendActionDSL.kt index 652eaf6ba4..024abedfff 100644 --- a/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/SendActionDSL.kt +++ b/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/SendActionDSL.kt @@ -1,13 +1,13 @@ package dev.inmo.tgbotapi.extensions.api.send -import dev.inmo.micro_utils.coroutines.safely -import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions +import dev.inmo.micro_utils.coroutines.* import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.requests.send.SendAction import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.actions.* import dev.inmo.tgbotapi.types.chat.abstracts.Chat import kotlinx.coroutines.* +import kotlin.coroutines.coroutineContext private const val refreshTime: MilliSeconds = (botActionActualityTime - 1) * 1000L typealias TelegramBotActionCallback = suspend TelegramBot.() -> T @@ -16,21 +16,17 @@ suspend fun TelegramBot.withAction( actionRequest: SendAction, block: TelegramBotActionCallback ): T { - val botActionJob = supervisorScope { - launch { - while (isActive) { - delay(refreshTime) - safelyWithoutExceptions { - execute(actionRequest) - } + val botActionJob = CoroutineScope(coroutineContext).launch { + while (isActive) { + delay(refreshTime) + safelyWithoutExceptions { + execute(actionRequest) } } } - return try { - safely { block() } - } finally { - botActionJob.cancel() - } + val result = safelyWithResult { block() } + botActionJob.cancel() + return result.getOrThrow() } suspend fun TelegramBot.withAction( diff --git a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/shortcuts/RequestsExecutor.kt b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/shortcuts/RequestsExecutor.kt index f3ba0f62e7..f71350ad97 100644 --- a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/shortcuts/RequestsExecutor.kt +++ b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/shortcuts/RequestsExecutor.kt @@ -4,6 +4,7 @@ import dev.inmo.micro_utils.coroutines.safely import dev.inmo.tgbotapi.bot.RequestsExecutor import dev.inmo.tgbotapi.requests.abstracts.Request import kotlinx.coroutines.* +import kotlin.coroutines.coroutineContext fun RequestsExecutor.executeAsync( request: Request, @@ -16,9 +17,7 @@ fun RequestsExecutor.executeAsync( suspend fun RequestsExecutor.executeAsync( request: Request -): Deferred = coroutineScope { - executeAsync(request, this) -} +): Deferred = executeAsync(request, CoroutineScope(coroutineContext)) suspend fun RequestsExecutor.executeUnsafe( request: Request,