mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 08:13:47 +00:00
add micro_utils and deprecate old coroutine methods
This commit is contained in:
parent
311512b5db
commit
1cf7ae7438
@ -7,6 +7,7 @@
|
|||||||
* `Common`:
|
* `Common`:
|
||||||
* `Version`:
|
* `Version`:
|
||||||
* `Coroutine`: `1.4.0` -> `1.4.1`
|
* `Coroutine`: `1.4.0` -> `1.4.1`
|
||||||
|
* **NEW** `MicroUtils`: `0.2.7`
|
||||||
* `Core`:
|
* `Core`:
|
||||||
* Support of `logOut` method (`LogOut` object as a `Request`)
|
* Support of `logOut` method (`LogOut` object as a `Request`)
|
||||||
* Support of `close` method (`Close` object as a `Request`)
|
* Support of `close` method (`Close` object as a `Request`)
|
||||||
@ -77,6 +78,7 @@
|
|||||||
* `MultilevelTextSource#textParts` has been deprecated. Now each `MultilevelTextSource` have its own
|
* `MultilevelTextSource#textParts` has been deprecated. Now each `MultilevelTextSource` have its own
|
||||||
`textSources` list
|
`textSources` list
|
||||||
* New dsl for creating of `TextSource` lists
|
* New dsl for creating of `TextSource` lists
|
||||||
|
* Built-in `handleSafely` and `ExceptionHandler` is deprecated
|
||||||
* `API`:
|
* `API`:
|
||||||
* Extensions `TelegramBot#pinChatMessage` now support any `Chat` and `Message`s from any `Chat`
|
* Extensions `TelegramBot#pinChatMessage` now support any `Chat` and `Message`s from any `Chat`
|
||||||
* New extensions `TelegramBot#unpinAllChatMessages`
|
* New extensions `TelegramBot#unpinAllChatMessages`
|
||||||
|
@ -12,6 +12,8 @@ klock_version=1.12.1
|
|||||||
uuid_version=0.2.2
|
uuid_version=0.2.2
|
||||||
ktor_version=1.4.1
|
ktor_version=1.4.1
|
||||||
|
|
||||||
|
micro_utils_version=0.2.7
|
||||||
|
|
||||||
javax_activation_version=1.1.1
|
javax_activation_version=1.1.1
|
||||||
|
|
||||||
library_group=dev.inmo
|
library_group=dev.inmo
|
||||||
|
@ -47,6 +47,8 @@ kotlin {
|
|||||||
api "com.soywiz.korlibs.klock:klock:$klock_version"
|
api "com.soywiz.korlibs.klock:klock:$klock_version"
|
||||||
api "com.benasher44:uuid:$uuid_version"
|
api "com.benasher44:uuid:$uuid_version"
|
||||||
|
|
||||||
|
api "dev.inmo:micro_utils.coroutines:$micro_utils_version"
|
||||||
|
|
||||||
api "io.ktor:ktor-client-core:$ktor_version"
|
api "io.ktor:ktor-client-core:$ktor_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.CommonAbstracts
|
package dev.inmo.tgbotapi.CommonAbstracts
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
||||||
import dev.inmo.tgbotapi.utils.fullListOfSubSource
|
import dev.inmo.tgbotapi.utils.internal.fullListOfSubSource
|
||||||
|
|
||||||
interface Captioned {
|
interface Captioned {
|
||||||
val caption: String?
|
val caption: String?
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.CommonAbstracts
|
package dev.inmo.tgbotapi.CommonAbstracts
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
||||||
import dev.inmo.tgbotapi.utils.fullListOfSubSource
|
import dev.inmo.tgbotapi.utils.internal.fullListOfSubSource
|
||||||
|
|
||||||
interface Explained {
|
interface Explained {
|
||||||
val explanation: String?
|
val explanation: String?
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.CommonAbstracts
|
package dev.inmo.tgbotapi.CommonAbstracts
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
||||||
import dev.inmo.tgbotapi.utils.fullListOfSubSource
|
import dev.inmo.tgbotapi.utils.internal.fullListOfSubSource
|
||||||
|
|
||||||
interface Texted {
|
interface Texted {
|
||||||
val text: String?
|
val text: String?
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package dev.inmo.tgbotapi.bot.Ktor
|
package dev.inmo.tgbotapi.bot.Ktor
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.safely
|
||||||
import dev.inmo.tgbotapi.bot.BaseRequestsExecutor
|
import dev.inmo.tgbotapi.bot.BaseRequestsExecutor
|
||||||
import dev.inmo.tgbotapi.bot.Ktor.base.*
|
import dev.inmo.tgbotapi.bot.Ktor.base.*
|
||||||
import dev.inmo.tgbotapi.bot.exceptions.newRequestException
|
import dev.inmo.tgbotapi.bot.exceptions.newRequestException
|
||||||
@ -36,7 +37,7 @@ class KtorRequestsExecutor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun <T : Any> execute(request: Request<T>): T {
|
override suspend fun <T : Any> execute(request: Request<T>): T {
|
||||||
return handleSafely(
|
return safely(
|
||||||
{ e ->
|
{ e ->
|
||||||
throw if (e is ClientRequestException) {
|
throw if (e is ClientRequestException) {
|
||||||
val content = e.response ?.readText() ?: throw e
|
val content = e.response ?.readText() ?: throw e
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package dev.inmo.tgbotapi.bot.Ktor.base
|
package dev.inmo.tgbotapi.bot.Ktor.base
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.safely
|
||||||
import dev.inmo.tgbotapi.bot.Ktor.KtorCallFactory
|
import dev.inmo.tgbotapi.bot.Ktor.KtorCallFactory
|
||||||
import dev.inmo.tgbotapi.requests.DownloadFile
|
import dev.inmo.tgbotapi.requests.DownloadFile
|
||||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||||
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
||||||
import dev.inmo.tgbotapi.utils.handleSafely
|
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.request.get
|
import io.ktor.client.request.get
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
@ -18,7 +18,7 @@ object DownloadFileRequestCallFactory : KtorCallFactory {
|
|||||||
): T? = (request as? DownloadFile) ?.let {
|
): T? = (request as? DownloadFile) ?.let {
|
||||||
val fullUrl = "${urlsKeeper.fileBaseUrl}/${it.filePath}"
|
val fullUrl = "${urlsKeeper.fileBaseUrl}/${it.filePath}"
|
||||||
|
|
||||||
return handleSafely {
|
return safely {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
client.get<ByteArray>(fullUrl) as T // always ByteArray
|
client.get<ByteArray>(fullUrl) as T // always ByteArray
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@ package dev.inmo.tgbotapi.types.MessageEntity
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
||||||
import dev.inmo.tgbotapi.types.User
|
import dev.inmo.tgbotapi.types.User
|
||||||
import dev.inmo.tgbotapi.utils.fullListOfSubSource
|
import dev.inmo.tgbotapi.utils.internal.fullListOfSubSource
|
||||||
import dev.inmo.tgbotapi.utils.shiftSourcesToTheLeft
|
import dev.inmo.tgbotapi.utils.internal.shiftSourcesToTheLeft
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.toTextParts
|
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.boldMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.boldMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see bold
|
* @see bold
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.removeLeading
|
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.commandMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.commandMarkdownV2
|
||||||
|
|
||||||
private val commandRegex = Regex("[/!][^@\\s]*")
|
private val commandRegex = Regex("[/!][^@\\s]*")
|
||||||
|
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.cashTagMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.cashTagMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see cashTag
|
* @see cashTag
|
||||||
|
@ -3,6 +3,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.codeMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.codeMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see code
|
* @see code
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.emailMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.emailMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see email
|
* @see email
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.hashTagMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.hashTagMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see hashtag
|
* @see hashtag
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.italicMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.italicMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see italic
|
* @see italic
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.removeLeading
|
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.mentionMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.mentionMarkdownV2
|
||||||
|
|
||||||
private val String.withoutCommercialAt
|
private val String.withoutCommercialAt
|
||||||
get() = if (startsWith("@")) {
|
get() = if (startsWith("@")) {
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.phoneMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.phoneMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see phone
|
* @see phone
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.preMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.preMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see pre
|
* @see pre
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.regularMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.regularMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see regular
|
* @see regular
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.strikethroughMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.strikethroughMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see strikethrough
|
* @see strikethrough
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.linkMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.linkMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see link
|
* @see link
|
||||||
|
@ -3,6 +3,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.User
|
import dev.inmo.tgbotapi.types.User
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.textMentionMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.textMentionMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see mention
|
* @see mention
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.linkMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.linkMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see link
|
* @see link
|
||||||
|
@ -2,6 +2,9 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.underlineMarkdown
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.underlineMarkdownV2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see underline
|
* @see underline
|
||||||
|
@ -22,7 +22,6 @@ import dev.inmo.tgbotapi.types.payments.Invoice
|
|||||||
import dev.inmo.tgbotapi.types.payments.SuccessfulPayment
|
import dev.inmo.tgbotapi.types.payments.SuccessfulPayment
|
||||||
import dev.inmo.tgbotapi.types.polls.Poll
|
import dev.inmo.tgbotapi.types.polls.Poll
|
||||||
import dev.inmo.tgbotapi.types.venue.Venue
|
import dev.inmo.tgbotapi.types.venue.Venue
|
||||||
import dev.inmo.tgbotapi.utils.fullListOfSubSource
|
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
@ -10,7 +10,9 @@ import dev.inmo.tgbotapi.types.ParseMode.*
|
|||||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.fullListOfSubSource
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.toMarkdownTexts
|
||||||
|
|
||||||
data class TextContent(
|
data class TextContent(
|
||||||
val text: String,
|
val text: String,
|
||||||
|
@ -14,8 +14,8 @@ import dev.inmo.tgbotapi.types.files.AnimationFile
|
|||||||
import dev.inmo.tgbotapi.types.files.DocumentFile
|
import dev.inmo.tgbotapi.types.files.DocumentFile
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
||||||
import dev.inmo.tgbotapi.utils.toHtmlCaptions
|
import dev.inmo.tgbotapi.utils.internal.toHtmlCaptions
|
||||||
import dev.inmo.tgbotapi.utils.toMarkdownV2Captions
|
import dev.inmo.tgbotapi.utils.internal.toMarkdownV2Captions
|
||||||
|
|
||||||
data class AnimationContent(
|
data class AnimationContent(
|
||||||
override val media: AnimationFile,
|
override val media: AnimationFile,
|
||||||
|
@ -12,7 +12,7 @@ import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
|||||||
import dev.inmo.tgbotapi.types.files.AudioFile
|
import dev.inmo.tgbotapi.types.files.AudioFile
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.AudioMediaGroupContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.AudioMediaGroupContent
|
||||||
import dev.inmo.tgbotapi.utils.toHtmlCaptions
|
import dev.inmo.tgbotapi.utils.internal.toHtmlCaptions
|
||||||
|
|
||||||
data class AudioContent(
|
data class AudioContent(
|
||||||
override val media: AudioFile,
|
override val media: AudioFile,
|
||||||
|
@ -15,7 +15,7 @@ import dev.inmo.tgbotapi.types.files.asDocumentFile
|
|||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.DocumentMediaGroupContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.DocumentMediaGroupContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
||||||
import dev.inmo.tgbotapi.utils.toHtmlCaptions
|
import dev.inmo.tgbotapi.utils.internal.toHtmlCaptions
|
||||||
|
|
||||||
data class DocumentContent(
|
data class DocumentContent(
|
||||||
override val media: DocumentFile,
|
override val media: DocumentFile,
|
||||||
|
@ -13,7 +13,7 @@ import dev.inmo.tgbotapi.types.files.*
|
|||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaCollectionContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaCollectionContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.VisualMediaGroupContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.VisualMediaGroupContent
|
||||||
import dev.inmo.tgbotapi.utils.toHtmlCaptions
|
import dev.inmo.tgbotapi.utils.internal.toHtmlCaptions
|
||||||
|
|
||||||
data class PhotoContent(
|
data class PhotoContent(
|
||||||
override val mediaCollection: Photo,
|
override val mediaCollection: Photo,
|
||||||
|
@ -12,7 +12,7 @@ import dev.inmo.tgbotapi.types.files.VideoFile
|
|||||||
import dev.inmo.tgbotapi.types.files.toInputMediaVideo
|
import dev.inmo.tgbotapi.types.files.toInputMediaVideo
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.VisualMediaGroupContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.VisualMediaGroupContent
|
||||||
import dev.inmo.tgbotapi.utils.toHtmlCaptions
|
import dev.inmo.tgbotapi.utils.internal.toHtmlCaptions
|
||||||
|
|
||||||
data class VideoContent(
|
data class VideoContent(
|
||||||
override val media: VideoFile,
|
override val media: VideoFile,
|
||||||
|
@ -13,8 +13,8 @@ import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
|||||||
import dev.inmo.tgbotapi.types.files.VoiceFile
|
import dev.inmo.tgbotapi.types.files.VoiceFile
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
||||||
import dev.inmo.tgbotapi.utils.toHtmlCaptions
|
import dev.inmo.tgbotapi.utils.internal.toHtmlCaptions
|
||||||
import dev.inmo.tgbotapi.utils.toMarkdownV2Captions
|
import dev.inmo.tgbotapi.utils.internal.toMarkdownV2Captions
|
||||||
|
|
||||||
data class VoiceContent(
|
data class VoiceContent(
|
||||||
override val media: VoiceFile,
|
override val media: VoiceFile,
|
||||||
|
@ -1,23 +1,21 @@
|
|||||||
package dev.inmo.tgbotapi.utils
|
package dev.inmo.tgbotapi.utils
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.ExceptionHandler
|
||||||
|
import dev.inmo.micro_utils.coroutines.safely
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.supervisorScope
|
import kotlinx.coroutines.supervisorScope
|
||||||
|
|
||||||
|
|
||||||
typealias ExceptionHandler<T> = suspend (Throwable) -> T
|
@Deprecated("In future will be used typealias from micro_utils", ReplaceWith("ExceptionHandler", "dev.inmo.micro_utils.coroutines.ExceptionHandler"))
|
||||||
|
typealias ExceptionHandler<T> = ExceptionHandler<T>
|
||||||
/**
|
/**
|
||||||
* It will run [block] inside of [supervisorScope] to avoid problems with catching of exceptions
|
* It will run [block] inside of [supervisorScope] to avoid problems with catching of exceptions
|
||||||
*
|
*
|
||||||
* @param [onException] Will be called when happen exception inside of [block]. By default will throw exception - this
|
* @param [onException] Will be called when happen exception inside of [block]. By default will throw exception - this
|
||||||
* exception will be available for catching
|
* exception will be available for catching
|
||||||
*/
|
*/
|
||||||
|
@Deprecated("In future will be used typealias from micro_utils", ReplaceWith("safely", "dev.inmo.micro_utils.coroutines.safely"))
|
||||||
suspend inline fun <T> handleSafely(
|
suspend inline fun <T> handleSafely(
|
||||||
noinline onException: ExceptionHandler<T> = { throw it },
|
noinline onException: ExceptionHandler<T> = { throw it },
|
||||||
noinline block: suspend CoroutineScope.() -> T
|
noinline block: suspend CoroutineScope.() -> T
|
||||||
): T {
|
): T = safely(onException, block)
|
||||||
return try {
|
|
||||||
supervisorScope(block)
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
onException(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dev.inmo.tgbotapi.utils
|
package dev.inmo.tgbotapi.utils.internal
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
|
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
@ -1,4 +1,4 @@
|
|||||||
package dev.inmo.tgbotapi.utils
|
package dev.inmo.tgbotapi.utils.internal
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.*
|
import dev.inmo.tgbotapi.types.*
|
@ -1,4 +1,4 @@
|
|||||||
package dev.inmo.tgbotapi.utils
|
package dev.inmo.tgbotapi.utils.internal
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.textsources.RegularTextSource
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.RegularTextSource
|
@ -1,4 +1,4 @@
|
|||||||
package dev.inmo.tgbotapi.utils
|
package dev.inmo.tgbotapi.utils.internal
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.*
|
import dev.inmo.tgbotapi.types.ParseMode.*
|
||||||
import dev.inmo.tgbotapi.types.UserId
|
import dev.inmo.tgbotapi.types.UserId
|
@ -3,7 +3,7 @@ package dev.inmo.tgbotapi.types.MessageEntity
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.plus
|
import dev.inmo.tgbotapi.CommonAbstracts.plus
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package dev.inmo.tgbotapi.types.MessageEntity
|
package dev.inmo.tgbotapi.types.MessageEntity
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.justTextSources
|
import dev.inmo.tgbotapi.CommonAbstracts.justTextSources
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
import dev.inmo.tgbotapi.utils.internal.toHtmlTexts
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.internal.toMarkdownV2Texts
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
class TextPartsCreatingTests {
|
class TextPartsCreatingTests {
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.utils
|
package dev.inmo.tgbotapi.extensions.utils
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.ExceptionHandler
|
||||||
import dev.inmo.tgbotapi.utils.*
|
import dev.inmo.tgbotapi.utils.*
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shortcut for [handleSafely]. It was created for more comfortable way of handling different things
|
* Shortcut for [dev.inmo.micro_utils.coroutines.safely]. It was created for more comfortable way of handling different things
|
||||||
*/
|
*/
|
||||||
@PreviewFeature
|
@PreviewFeature
|
||||||
|
@Deprecated("In future will be used typealias from micro_utils", ReplaceWith("safely", "dev.inmo.micro_utils.coroutines.safely"))
|
||||||
suspend inline fun <T> safely(
|
suspend inline fun <T> safely(
|
||||||
noinline onException: ExceptionHandler<T> = { throw it },
|
noinline onException: ExceptionHandler<T> = { throw it },
|
||||||
noinline block: suspend CoroutineScope.() -> T
|
noinline block: suspend CoroutineScope.() -> T
|
||||||
): T = handleSafely(
|
): T = dev.inmo.micro_utils.coroutines.safely(
|
||||||
onException,
|
onException,
|
||||||
block
|
block
|
||||||
)
|
)
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.utils.shortcuts
|
package dev.inmo.tgbotapi.extensions.utils.shortcuts
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.safely
|
||||||
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
||||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||||
import dev.inmo.tgbotapi.utils.handleSafely
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
|
|
||||||
fun <T: Any> RequestsExecutor.executeAsync(
|
fun <T: Any> RequestsExecutor.executeAsync(
|
||||||
request: Request<T>,
|
request: Request<T>,
|
||||||
scope: CoroutineScope
|
scope: CoroutineScope
|
||||||
): Deferred<T> = scope.async {
|
): Deferred<T> = scope.async {
|
||||||
handleSafely {
|
safely {
|
||||||
execute(request)
|
execute(request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ suspend fun <T: Any> RequestsExecutor.executeUnsafe(
|
|||||||
var leftRetries = retries
|
var leftRetries = retries
|
||||||
val exceptions = onAllFailed ?.let { mutableListOf<Throwable>() }
|
val exceptions = onAllFailed ?.let { mutableListOf<Throwable>() }
|
||||||
do {
|
do {
|
||||||
return handleSafely(
|
return safely (
|
||||||
{
|
{
|
||||||
leftRetries--
|
leftRetries--
|
||||||
delay(retriesDelay)
|
delay(retriesDelay)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.utils.updates.retrieving
|
package dev.inmo.tgbotapi.extensions.utils.updates.retrieving
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.ExceptionHandler
|
||||||
|
import dev.inmo.micro_utils.coroutines.safely
|
||||||
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
||||||
import dev.inmo.tgbotapi.bot.exceptions.RequestException
|
import dev.inmo.tgbotapi.bot.exceptions.RequestException
|
||||||
import dev.inmo.tgbotapi.extensions.utils.updates.convertWithMediaGroupUpdates
|
import dev.inmo.tgbotapi.extensions.utils.updates.convertWithMediaGroupUpdates
|
||||||
@ -23,7 +25,7 @@ fun RequestsExecutor.startGettingOfUpdatesByLongPolling(
|
|||||||
var lastUpdateIdentifier: UpdateIdentifier? = null
|
var lastUpdateIdentifier: UpdateIdentifier? = null
|
||||||
|
|
||||||
while (isActive) {
|
while (isActive) {
|
||||||
handleSafely(
|
safely(
|
||||||
{ e ->
|
{ e ->
|
||||||
exceptionsHandler ?.invoke(e)
|
exceptionsHandler ?.invoke(e)
|
||||||
if (e is RequestException) {
|
if (e is RequestException) {
|
||||||
@ -52,7 +54,7 @@ fun RequestsExecutor.startGettingOfUpdatesByLongPolling(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSafely {
|
safely {
|
||||||
for (update in updates) {
|
for (update in updates) {
|
||||||
updatesReceiver(update)
|
updatesReceiver(update)
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.utils.updates.retrieving
|
package dev.inmo.tgbotapi.extensions.utils.updates.retrieving
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.ExceptionHandler
|
||||||
|
import dev.inmo.micro_utils.coroutines.safely
|
||||||
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
||||||
import dev.inmo.tgbotapi.extensions.utils.nonstrictJsonFormat
|
import dev.inmo.tgbotapi.extensions.utils.nonstrictJsonFormat
|
||||||
import dev.inmo.tgbotapi.extensions.utils.updates.flowsUpdatesFilter
|
import dev.inmo.tgbotapi.extensions.utils.updates.flowsUpdatesFilter
|
||||||
@ -11,8 +13,6 @@ import dev.inmo.tgbotapi.types.update.abstracts.Update
|
|||||||
import dev.inmo.tgbotapi.types.update.abstracts.UpdateDeserializationStrategy
|
import dev.inmo.tgbotapi.types.update.abstracts.UpdateDeserializationStrategy
|
||||||
import dev.inmo.tgbotapi.updateshandlers.*
|
import dev.inmo.tgbotapi.updateshandlers.*
|
||||||
import dev.inmo.tgbotapi.updateshandlers.webhook.WebhookPrivateKeyConfig
|
import dev.inmo.tgbotapi.updateshandlers.webhook.WebhookPrivateKeyConfig
|
||||||
import dev.inmo.tgbotapi.utils.ExceptionHandler
|
|
||||||
import dev.inmo.tgbotapi.utils.handleSafely
|
|
||||||
import io.ktor.application.call
|
import io.ktor.application.call
|
||||||
import io.ktor.request.receiveText
|
import io.ktor.request.receiveText
|
||||||
import io.ktor.response.respond
|
import io.ktor.response.respond
|
||||||
@ -41,7 +41,7 @@ fun Route.includeWebhookHandlingInRoute(
|
|||||||
) {
|
) {
|
||||||
val transformer = scope.updateHandlerWithMediaGroupsAdaptation(block)
|
val transformer = scope.updateHandlerWithMediaGroupsAdaptation(block)
|
||||||
post {
|
post {
|
||||||
handleSafely(
|
safely(
|
||||||
exceptionsHandler ?: {}
|
exceptionsHandler ?: {}
|
||||||
) {
|
) {
|
||||||
val asJson =
|
val asJson =
|
||||||
|
Loading…
Reference in New Issue
Block a user