package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts import com.github.insanusmokrassar.TelegramBotAPI.bot.RequestsExecutor import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import com.github.insanusmokrassar.TelegramBotAPI.utils.handleSafely import kotlinx.coroutines.* fun RequestsExecutor.executeAsync( request: Request, scope: CoroutineScope ): Deferred = scope.async { handleSafely { execute(request) } } suspend fun RequestsExecutor.executeAsync( request: Request ): Deferred = coroutineScope { executeAsync(request, this) } suspend fun RequestsExecutor.executeUnsafe( request: Request, retries: Int = 0, retriesDelay: Long = 1000L, onAllFailed: (suspend (exceptions: Array) -> Unit)? = null ): T? { var leftRetries = retries val exceptions = onAllFailed ?.let { mutableListOf() } do { return handleSafely( { leftRetries-- delay(retriesDelay) exceptions ?.add(it) null } ) { execute(request) } ?: continue } while(leftRetries >= 0) onAllFailed ?.invoke(exceptions ?.toTypedArray() ?: emptyArray()) return null }