diff --git a/build.gradle b/build.gradle index 6b49962838..8be94d48a0 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { dependencies { classpath libs.kotlin.gradle.plugin + classpath libs.kotlin.ksp.plugin classpath libs.kotlin.serialization.plugin classpath libs.kotlin.dokka.plugin classpath libs.github.release.plugin diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddaa75685b..3674f3a5cc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,9 @@ korlibs = "3.0.0" uuid = "0.5.0" ktor = "2.0.3" +ksp = "1.7.10-1.0.6" +kotlin-poet = "1.12.0" + microutils = "0.12.0" github-release-plugin = "2.4.1" @@ -45,14 +48,21 @@ microutils-languageCodes = { module = "dev.inmo:micro_utils.language_codes", ver microutils-ktor-common = { module = "dev.inmo:micro_utils.ktor.common", version.ref = "microutils" } microutils-fsm-common = { module = "dev.inmo:micro_utils.fsm.common", version.ref = "microutils" } +# ksp dependencies + +kotlin-poet = { module = "com.squareup:kotlinpoet-ksp", version.ref = "kotlin-poet" } +ksp = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" } + # buildscript classpaths kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +kotlin-ksp-plugin = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" } kotlin-serialization-plugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" } kotlin-dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "kotlin" } github-release-plugin = { module = "com.github.breadmoirai:github-release", version.ref = "github-release-plugin" } [plugins] +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } diff --git a/settings.gradle b/settings.gradle index 6cf2139f0b..d8603ea158 100644 --- a/settings.gradle +++ b/settings.gradle @@ -12,6 +12,8 @@ pluginManagement { } include ":tgbotapi.core" +include ":tgbotapi.ksp:processor" +include ":tgbotapi.ksp:lib" include ":tgbotapi.api" include ":tgbotapi.utils" include ":tgbotapi.behaviour_builder" diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt index 9266cab99a..21f7a5b278 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt @@ -4,7 +4,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asCallbackQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.callbackQueryUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.queries.callback.* import dev.inmo.tgbotapi.utils.RiskFeature @@ -22,7 +22,7 @@ suspend inline fun BehaviourContext.waitCallbackQueries( initRequest, errorFactory ) { - (it.asCallbackQueryUpdate() ?.data as O).let(::listOfNotNull) + (it.callbackQueryUpdateOrNull() ?.data as O).let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt index ef253dd339..a7ccf06d3a 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asChatJoinRequestUpdate +import dev.inmo.tgbotapi.extensions.utils.chatJoinRequestUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.chat.ChatJoinRequest import dev.inmo.tgbotapi.utils.RiskFeature @@ -20,7 +20,7 @@ suspend inline fun BehaviourContext.internalWaitChatJoinRequests( initRequest, errorFactory ) { - (it.asChatJoinRequestUpdate() ?.data as? O).let(::listOfNotNull) + (it.chatJoinRequestUpdateOrNull() ?.data as? O).let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt index 2b5744c174..2c8c812acb 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt @@ -1,14 +1,12 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext -import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asChosenInlineResultUpdate +import dev.inmo.tgbotapi.extensions.utils.chosenInlineResultUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.* import dev.inmo.tgbotapi.utils.RiskFeature import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.toList typealias ChosenInlineResultMapper = suspend T.() -> T? @@ -20,7 +18,7 @@ suspend inline fun BehaviourContext.waitChosenInlineResults( initRequest, errorFactory ) { - (it.asChosenInlineResultUpdate() ?.data as? O).let(::listOfNotNull) + (it.chosenInlineResultUpdateOrNull() ?.data as? O).let(::listOfNotNull) } suspend fun BehaviourContext.waitChosenInlineResult( diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt index 2ca4af7fbb..0a48994147 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt @@ -4,7 +4,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asCommonMessage +import dev.inmo.tgbotapi.extensions.utils.commonMessageOrNull import dev.inmo.tgbotapi.extensions.utils.withContent import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt index 69d9b1b16f..74961d206e 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt @@ -4,7 +4,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asCommonMessage +import dev.inmo.tgbotapi.extensions.utils.commonMessageOrNull import dev.inmo.tgbotapi.extensions.utils.withContent import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage @@ -32,7 +32,7 @@ suspend inline fun BehaviourContext.waitEditedConte ) { val messages = when (it) { is BaseEditMessageUpdate -> { - val commonMessage = it.data.asCommonMessage() ?: return@expectFlow emptyList() + val commonMessage = it.data.commonMessageOrNull() ?: return@expectFlow emptyList() if (commonMessage !is MediaGroupMessage<*> || includeMediaGroups) { listOf(commonMessage) } else { diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt index 414fd7b4a1..20087fdf40 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt @@ -27,7 +27,7 @@ suspend inline fun BehaviourContext.waitEvents( initRequest, errorFactory ) { - it.asBaseSentMessageUpdate() ?.data ?.asChatEventMessage() ?.withEvent() ?.chatEvent.let(::listOfNotNull) + it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.withEvent() ?.chatEvent.let(::listOfNotNull) } suspend fun BehaviourContext.waitChannelEvents( diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt index f01530cf21..4d76053c72 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt @@ -25,7 +25,7 @@ suspend inline fun BehaviourContext.waitEventsMessages( initRequest, errorFactory ) { - it.asBaseSentMessageUpdate() ?.data ?.asChatEventMessage() ?.withEvent().let(::listOfNotNull) + it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.withEvent().let(::listOfNotNull) } suspend fun BehaviourContext.waitChannelEventsMessages( diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt index 8c6c5bc393..8db88e0239 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asInlineQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.inlineQueryUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.InlineQueries.query.* import dev.inmo.tgbotapi.utils.RiskFeature @@ -20,7 +20,7 @@ suspend inline fun BehaviourContext.waitInlineQueries( initRequest, errorFactory ) { - (it.asInlineQueryUpdate() ?.data as? O).let(::listOfNotNull) + (it.inlineQueryUpdateOrNull() ?.data as? O).let(::listOfNotNull) } suspend fun BehaviourContext.waitAnyInlineQuery( diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt index 542f7a7d46..2be7987192 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asSentMediaGroupUpdate +import dev.inmo.tgbotapi.extensions.utils.sentMediaGroupUpdateOrNull import dev.inmo.tgbotapi.extensions.utils.withContent import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt index 29f03d276e..5c1f9ad4d1 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asSentMediaGroupUpdate +import dev.inmo.tgbotapi.extensions.utils.sentMediaGroupUpdateOrNull import dev.inmo.tgbotapi.extensions.utils.withContent import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage @@ -20,7 +20,7 @@ suspend inline fun BehaviourContext.buildMediaGr initRequest: Request<*>? = null, noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow>> = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory) { update -> - update.asSentMediaGroupUpdate() ?.data ?.let { mediaGroup -> + update.sentMediaGroupUpdateOrNull() ?.data ?.let { mediaGroup -> val mapped = mediaGroup.mapNotNull { it.withContent() } listOf( mapped diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt index 2d1c16c90f..4ec369a844 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt @@ -2,8 +2,8 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asMessageUpdate -import dev.inmo.tgbotapi.extensions.utils.asPassportMessage +import dev.inmo.tgbotapi.extensions.utils.messageUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.passportMessageOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.message.PassportMessage import dev.inmo.tgbotapi.types.passport.PassportData @@ -23,7 +23,7 @@ suspend inline fun BehaviourContext.waitP initRequest, errorFactory ) { - it.asMessageUpdate() ?.data ?.asPassportMessage() ?.passportData ?.data ?.filterIsInstance() ?: emptyList() + it.messageUpdateOrNull() ?.data ?.passportMessageOrNull() ?.passportData ?.data ?.filterIsInstance() ?: emptyList() } suspend fun BehaviourContext.waitAnyPassportMessages( diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt index a59fcccc4b..24e9d674f3 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asPollAnswerUpdate +import dev.inmo.tgbotapi.extensions.utils.pollAnswerUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.polls.PollAnswer import dev.inmo.tgbotapi.utils.RiskFeature @@ -19,5 +19,5 @@ suspend fun BehaviourContext.waitPollAnswers( initRequest, errorFactory ) { - it.asPollAnswerUpdate() ?.data.let(::listOfNotNull) + it.pollAnswerUpdateOrNull() ?.data.let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt index 1dd9ad044c..4288fa9939 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asPollUpdate +import dev.inmo.tgbotapi.extensions.utils.pollUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.polls.* import dev.inmo.tgbotapi.utils.RiskFeature @@ -20,7 +20,7 @@ suspend inline fun BehaviourContext.waitPolls( initRequest, errorFactory ) { - (it.asPollUpdate() ?.data as? O).let(::listOfNotNull) + (it.pollUpdateOrNull() ?.data as? O).let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt index 0c2fcb5cf3..f0283f3368 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt @@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asPreCheckoutQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.preCheckoutQueryUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.payments.PreCheckoutQuery import dev.inmo.tgbotapi.utils.RiskFeature @@ -19,5 +19,5 @@ suspend fun BehaviourContext.waitPreCheckoutQueries( initRequest, errorFactory ) { - it.asPreCheckoutQueryUpdate() ?.data.let(::listOfNotNull) + it.preCheckoutQueryUpdateOrNull() ?.data.let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt index a35a7b9a66..493c6d7beb 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt @@ -1,12 +1,10 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext -import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter -import dev.inmo.tgbotapi.extensions.utils.asShippingQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.shippingQueryUpdateOrNull import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.payments.ShippingQuery import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.toList typealias ShippingQueryMapper = suspend ShippingQuery.() -> ShippingQuery? @@ -17,5 +15,5 @@ suspend fun BehaviourContext.waitShippingQueries( initRequest, errorFactory ) { - (it.asShippingQueryUpdate() ?.data).let(::listOfNotNull) + (it.shippingQueryUpdateOrNull() ?.data).let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CallbackQueryTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CallbackQueryTriggers.kt index 49326ae88f..2c2ab5f1a4 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CallbackQueryTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CallbackQueryTriggers.kt @@ -9,7 +9,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.CallbackQueryFilte import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.* import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByUserCallbackQueryMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asCallbackQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.callbackQueryUpdateOrNull import dev.inmo.tgbotapi.types.queries.callback.* import dev.inmo.tgbotapi.types.update.abstracts.Update import kotlinx.coroutines.Job @@ -20,7 +20,7 @@ internal suspend inline fun B markerFactory: MarkerFactory = ByUserCallbackQueryMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asCallbackQueryUpdate() ?.data as? T) ?.let(::listOfNotNull) + (it.callbackQueryUpdateOrNull() ?.data as? T) ?.let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChatJoinRequestTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChatJoinRequestTriggers.kt index 90e5f5cbae..71d244e100 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChatJoinRequestTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChatJoinRequestTriggers.kt @@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.ChatJoinRequestFil import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatChatJoinRequestMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asChatJoinRequestUpdate +import dev.inmo.tgbotapi.extensions.utils.chatJoinRequestUpdateOrNull import dev.inmo.tgbotapi.types.chat.ChatJoinRequest import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -29,5 +29,5 @@ suspend fun BC.onChatJoinRequest( markerFactory: MarkerFactory = ByChatChatJoinRequestMarkerFactory, scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asChatJoinRequestUpdate() ?.data) ?.let(::listOfNotNull) + (it.chatJoinRequestUpdateOrNull() ?.data) ?.let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChosenInlineResultTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChosenInlineResultTriggers.kt index f87eacd415..b4f7a00dfa 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChosenInlineResultTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ChosenInlineResultTriggers.kt @@ -6,7 +6,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByUserIdChosenInlineResultMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asChosenInlineResultUpdate +import dev.inmo.tgbotapi.extensions.utils.chosenInlineResultUpdateOrNull import dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.* import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -16,7 +16,7 @@ internal suspend inline fun = ByUserIdChosenInlineResultMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asChosenInlineResultUpdate() ?.data as? T) ?.let(::listOfNotNull) + (it.chosenInlineResultUpdateOrNull() ?.data as? T) ?.let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandling.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandling.kt index 151d70b47d..4f5417178e 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandling.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandling.kt @@ -10,7 +10,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByCha import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatMessageMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times -import dev.inmo.tgbotapi.extensions.utils.asBotCommandTextSource +import dev.inmo.tgbotapi.extensions.utils.botCommandTextSourceOrNull import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithParams import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage import dev.inmo.tgbotapi.types.message.content.TextContent @@ -35,7 +35,7 @@ internal suspend fun BC.commandUncounted( true } sizeRequirement && textSources.any { - commandRegex.matches(it.asBotCommandTextSource() ?.command ?: return@any false) + commandRegex.matches(it.botCommandTextSourceOrNull() ?.command ?: return@any false) } }.let { initialFilter ?.times(it) ?: it diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandlingUnhandled.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandlingUnhandled.kt index 9f68928500..0219490400 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandlingUnhandled.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandlingUnhandled.kt @@ -8,7 +8,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByCha import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatMessageMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times -import dev.inmo.tgbotapi.extensions.utils.asBotCommandTextSource +import dev.inmo.tgbotapi.extensions.utils.botCommandTextSourceOrNull import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithParams import dev.inmo.tgbotapi.types.message.content.TextContent import dev.inmo.tgbotapi.types.message.content.TextMessage @@ -33,7 +33,7 @@ suspend fun BC.unhandledCommand( true } sizeRequirement && textSources.any { - val command = it.asBotCommandTextSource() ?.command ?: return@any false + val command = it.botCommandTextSourceOrNull() ?.command ?: return@any false !triggersHolder.handleableCommandsHolder.isHandled(command) } }.let { diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EditedContentTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EditedContentTriggers.kt index 30aaf7cac5..4199ee5ca8 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EditedContentTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EditedContentTriggers.kt @@ -20,7 +20,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.CommonMessageFilte import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByChat import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatMessageMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asEditMessageUpdate +import dev.inmo.tgbotapi.extensions.utils.editMessageUpdateOrNull import dev.inmo.tgbotapi.extensions.utils.withContent import dev.inmo.tgbotapi.types.files.TelegramMediaFile import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage @@ -41,7 +41,7 @@ internal suspend inline fun noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver> ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { when (it) { - is BaseEditMessageUpdate -> (it.asEditMessageUpdate() ?.data ?.withContent()) + is BaseEditMessageUpdate -> (it.editMessageUpdateOrNull() ?.data ?.withContent()) else -> null } ?.let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt index cde6ed010e..db41229f8b 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt @@ -7,8 +7,8 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByCha import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatMessageMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asBaseSentMessageUpdate -import dev.inmo.tgbotapi.extensions.utils.asChatEventMessage +import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.chatEventMessageOrNull import dev.inmo.tgbotapi.types.message.ChatEvents.* import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.* import dev.inmo.tgbotapi.types.message.ChatEvents.voice.* @@ -24,7 +24,7 @@ internal suspend inline fun BC.on noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver> ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { @Suppress("UNCHECKED_CAST") - (it.asBaseSentMessageUpdate() ?.data ?.asChatEventMessage() ?.takeIf { it.chatEvent is T } as? ChatEventMessage) ?.let(::listOfNotNull) + (it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.takeIf { it.chatEvent is T } as? ChatEventMessage) ?.let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/InlineQueryTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/InlineQueryTriggers.kt index e850638058..52bc9e271a 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/InlineQueryTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/InlineQueryTriggers.kt @@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.InlineQueryFilterB import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByUserInlineQueryMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asInlineQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.inlineQueryUpdateOrNull import dev.inmo.tgbotapi.types.InlineQueries.query.* import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -15,7 +15,7 @@ internal suspend inline fun BC. markerFactory: MarkerFactory = ByUserInlineQueryMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asInlineQueryUpdate() ?.data as? T) ?.let(::listOfNotNull) + (it.inlineQueryUpdateOrNull() ?.data as? T) ?.let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MediaGroupTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MediaGroupTriggers.kt index 8e868791df..58efa0cee3 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MediaGroupTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MediaGroupTriggers.kt @@ -7,7 +7,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessagesFilterByCh import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatMediaGroupMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asSentMediaGroupUpdate +import dev.inmo.tgbotapi.extensions.utils.sentMediaGroupUpdateOrNull import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage import dev.inmo.tgbotapi.types.message.content.* import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -20,7 +20,7 @@ internal suspend inline fun >, Any> = ByChatMediaGroupMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver>> ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asSentMediaGroupUpdate() ?.data ?.takeIf { messages -> + (it.sentMediaGroupUpdateOrNull() ?.data ?.takeIf { messages -> messages.all { message -> message.content is T } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PassportTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PassportTriggers.kt index e1705cbf34..b4cd034da8 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PassportTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PassportTriggers.kt @@ -5,8 +5,8 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByCha import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatMessageMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asMessageUpdate -import dev.inmo.tgbotapi.extensions.utils.asPassportMessage +import dev.inmo.tgbotapi.extensions.utils.messageUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.passportMessageOrNull import dev.inmo.tgbotapi.types.message.PassportMessage import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElement import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -17,7 +17,7 @@ internal suspend inline fun = ByChatMessageMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asMessageUpdate() ?.data ?.asPassportMessage() ?.takeIf { it.passportData.data.any { it is T } }) ?.let(::listOfNotNull) + (it.messageUpdateOrNull() ?.data ?.passportMessageOrNull() ?.takeIf { it.passportData.data.any { it is T } }) ?.let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollAnswersTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollAnswersTriggers.kt index 549e052426..a09639754b 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollAnswersTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollAnswersTriggers.kt @@ -6,7 +6,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByIdPollAnswerMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asPollAnswerUpdate +import dev.inmo.tgbotapi.extensions.utils.pollAnswerUpdateOrNull import dev.inmo.tgbotapi.types.polls.PollAnswer import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -16,7 +16,7 @@ internal suspend inline fun BC.onPollAnswered( markerFactory: MarkerFactory = ByIdPollAnswerMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asPollAnswerUpdate() ?.data) ?.let(::listOfNotNull) + (it.pollAnswerUpdateOrNull() ?.data) ?.let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollUpdatesTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollUpdatesTriggers.kt index f9575de5e7..c9098d600d 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollUpdatesTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PollUpdatesTriggers.kt @@ -6,7 +6,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByIdPollMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asPollUpdate +import dev.inmo.tgbotapi.extensions.utils.pollUpdateOrNull import dev.inmo.tgbotapi.types.polls.* import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -16,7 +16,7 @@ internal suspend inline fun BC.onPollU markerFactory: MarkerFactory = ByIdPollMarkerFactory, noinline scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asPollUpdate() ?.data as? T) ?.let(::listOfNotNull) + (it.pollUpdateOrNull() ?.data as? T) ?.let(::listOfNotNull) } /** diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PreCheckoutQueryTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PreCheckoutQueryTriggers.kt index 3df37d6f8f..c53f1ecda0 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PreCheckoutQueryTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/PreCheckoutQueryTriggers.kt @@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.PreCheckoutQueryFi import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByUserPreCheckoutQueryMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asPreCheckoutQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.preCheckoutQueryUpdateOrNull import dev.inmo.tgbotapi.types.payments.PreCheckoutQuery import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -31,5 +31,5 @@ suspend fun BC.onPreCheckoutQuery( markerFactory: MarkerFactory = ByUserPreCheckoutQueryMarkerFactory, scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asPreCheckoutQueryUpdate() ?.data) ?.let(::listOfNotNull) + (it.preCheckoutQueryUpdateOrNull() ?.data) ?.let(::listOfNotNull) } diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ShippingQueryTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ShippingQueryTriggers.kt index 37cb05be12..1f82cf12cb 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ShippingQueryTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/ShippingQueryTriggers.kt @@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.ShippingQueryFilte import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByUserShippingQueryMarkerFactory import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory -import dev.inmo.tgbotapi.extensions.utils.asShippingQueryUpdate +import dev.inmo.tgbotapi.extensions.utils.shippingQueryUpdateOrNull import dev.inmo.tgbotapi.types.payments.ShippingQuery import dev.inmo.tgbotapi.types.update.abstracts.Update @@ -31,5 +31,5 @@ suspend fun BC.onShippingQuery( markerFactory: MarkerFactory = ByUserShippingQueryMarkerFactory, scenarioReceiver: CustomBehaviourContextAndTypeReceiver ) = on(markerFactory, initialFilter, subcontextUpdatesFilter, scenarioReceiver) { - (it.asShippingQueryUpdate() ?.data) ?.let(::listOfNotNull) + (it.shippingQueryUpdateOrNull() ?.data) ?.let(::listOfNotNull) } diff --git a/tgbotapi.core/build.gradle b/tgbotapi.core/build.gradle index 00c88b6d62..900d9789c7 100644 --- a/tgbotapi.core/build.gradle +++ b/tgbotapi.core/build.gradle @@ -1,6 +1,7 @@ plugins { id "org.jetbrains.kotlin.multiplatform" id "org.jetbrains.kotlin.plugin.serialization" + id "com.google.devtools.ksp" } project.description = "Core part of tgbotapi with all (and only) required functionality for working with Telegram Bot API" @@ -28,6 +29,8 @@ kotlin { api libs.microutils.languageCodes api libs.ktor.client.core + + api project(":tgbotapi.ksp:lib") } } commonTest { @@ -46,12 +49,15 @@ kotlin { } } } - -// targets.all { -// compilations.all { -// kotlinOptions { -// freeCompilerArgs += ["-Xuse-experimental=kotlinx.coroutines.ExperimentalCoroutinesApi", "-Xopt-in=kotlin.RequiresOptIn"] -// } -// } -// } +} + +dependencies { + add("kspCommonMainMetadata", project(":tgbotapi.ksp:processor")) + add("kspJvm", project(":tgbotapi.ksp:processor")) +} + +ksp { + arg("cctargetPackage", "dev.inmo.tgbotapi.extensions.utils") + arg("ccoutputFileName", "NewClassCasts") + arg("ccoutputFolder", project(":tgbotapi.utils").file("src/commonMain/kotlin").absolutePath) } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/CommonSendInvoiceData.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/CommonSendInvoiceData.kt index 14c1f8ea76..cd31df05fb 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/CommonSendInvoiceData.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/CommonSendInvoiceData.kt @@ -1,8 +1,10 @@ package dev.inmo.tgbotapi.abstracts +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.payments.abstracts.Currencied import dev.inmo.tgbotapi.types.payments.abstracts.Priced +@ClassCastsIncluded interface CommonSendInvoiceData : Titled, Currencied, Priced { val description: String val payload: String diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/WithUser.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/WithUser.kt index 6aeb8100b7..a9e76b96db 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/WithUser.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/abstracts/WithUser.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.abstracts +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.chat.User /** @@ -7,6 +8,7 @@ import dev.inmo.tgbotapi.types.chat.User * * @see FromUser */ +@ClassCastsIncluded interface WithUser { val user: User } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult.kt index 9443c09391..3b5ac00da7 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult.kt @@ -1,13 +1,15 @@ package dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.serializers.InlineQueryResultSerializer import dev.inmo.tgbotapi.types.InlineQueryIdentifier import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup import kotlinx.serialization.Serializable @Serializable(InlineQueryResultSerializer::class) +@ClassCastsIncluded interface InlineQueryResult { val type: String val id: InlineQueryIdentifier val replyMarkup: InlineKeyboardMarkup? -} \ No newline at end of file +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent.kt index e440506ec2..232580cae2 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent.kt @@ -1,7 +1,9 @@ package dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContentSerializer import kotlinx.serialization.Serializable @Serializable(InputMessageContentSerializer::class) +@ClassCastsIncluded sealed interface InputMessageContent diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/actions/BotAction.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/actions/BotAction.kt index 856f3d8899..2ea92aaa72 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/actions/BotAction.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/actions/BotAction.kt @@ -1,6 +1,7 @@ package dev.inmo.tgbotapi.types.actions import dev.inmo.micro_utils.common.Warning +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.utils.RiskFeature import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable @@ -13,6 +14,7 @@ import kotlinx.serialization.encoding.Encoder * Use BotAction objects realisations to notify user about bot actions */ @Serializable(BotActionSerializer::class) +@ClassCastsIncluded sealed interface BotAction { val actionName: String } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton.kt index 5117b6dfde..cf8ad42c5e 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.games.CallbackGame import dev.inmo.tgbotapi.types.webapps.WebAppInfo @@ -11,6 +12,7 @@ import kotlinx.serialization.json.* * https://core.telegram.org/bots/api#inlinekeyboardbutton for more info */ @Serializable(InlineKeyboardButtonSerializer::class) +@ClassCastsIncluded sealed interface InlineKeyboardButton { val text: String } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardMarkup.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardMarkup.kt index 4e008eb84b..afd46e4cff 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardMarkup.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardMarkup.kt @@ -1,6 +1,8 @@ package dev.inmo.tgbotapi.types.buttons +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import kotlinx.serialization.Serializable @Serializable(KeyboardMarkupSerializer::class) +@ClassCastsIncluded sealed interface KeyboardMarkup diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/Abstracts.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/Abstracts.kt index 0d6bf752e1..04c0b7da44 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/Abstracts.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/Abstracts.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.types.chat +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import kotlinx.serialization.Serializable @@ -43,6 +44,7 @@ sealed interface AbleToAddInAttachmentMenuChat : Chat { } @Serializable(PreviewChatSerializer::class) +@ClassCastsIncluded sealed interface Chat { val id: ChatId } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/dice/DiceAnimationType.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/dice/DiceAnimationType.kt index 7e34caf55f..1c194eb490 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/dice/DiceAnimationType.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/dice/DiceAnimationType.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.types.dice +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.utils.RiskFeature import kotlinx.serialization.KSerializer @@ -9,6 +10,7 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder @Serializable(DiceAnimationTypeSerializer::class) +@ClassCastsIncluded sealed interface DiceAnimationType { val emoji: String val valueLimits: IntRange diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/TelegramMediaFile.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/TelegramMediaFile.kt index b6e04f7e06..1d1e977d76 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/TelegramMediaFile.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/TelegramMediaFile.kt @@ -1,11 +1,13 @@ package dev.inmo.tgbotapi.types.files +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.requests.abstracts.FileId import dev.inmo.tgbotapi.types.FileUniqueId /** * Declare common part of media files in Telegram. Note: it is not representation of JVM `File` type */ +@ClassCastsIncluded sealed interface TelegramMediaFile { val fileId: FileId val fileUniqueId: FileUniqueId diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/location/Location.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/location/Location.kt index 28f09c744b..21724697c6 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/location/Location.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/location/Location.kt @@ -1,6 +1,7 @@ package dev.inmo.tgbotapi.types.location import dev.inmo.tgbotapi.abstracts.* +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.utils.nonstrictJsonFormat import kotlinx.serialization.* @@ -18,6 +19,7 @@ import kotlinx.serialization.json.JsonObject * @see dev.inmo.tgbotapi.extensions.utils.asLiveLocation */ @Serializable(LocationSerializer::class) +@ClassCastsIncluded sealed interface Location : Locationed, HorizontallyAccured @Serializable diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMedia.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMedia.kt index 2ae7932ede..f8dbf682a4 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMedia.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMedia.kt @@ -1,9 +1,11 @@ package dev.inmo.tgbotapi.types.media +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.requests.abstracts.InputFile import kotlinx.serialization.Serializable @Serializable(TelegramMediaSerializer::class) +@ClassCastsIncluded sealed interface TelegramMedia { val type: String val file: InputFile diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/LeftChatMember.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/LeftChatMember.kt index ba73e100ae..4d664fcbd0 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/LeftChatMember.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/LeftChatMember.kt @@ -4,6 +4,9 @@ import dev.inmo.tgbotapi.abstracts.WithUser import dev.inmo.tgbotapi.types.chat.User import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent -data class LeftChatMember( +data class LeftChatMemberEvent( override val user: User ) : PublicChatEvent, WithUser + +@Deprecated("Renamed", ReplaceWith("dev.inmo.tgbotapi.types.message.ChatEvents", "LeftChatMemberEvent")) +typealias LeftChatMember = LeftChatMemberEvent diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent.kt index a3873a9305..cb5523bb17 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent.kt @@ -1,3 +1,6 @@ package dev.inmo.tgbotapi.types.message.ChatEvents.abstracts +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded + +@ClassCastsIncluded interface ChatEvent diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ForwardInfo.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ForwardInfo.kt index b96f35336b..3bdde5c8d5 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ForwardInfo.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ForwardInfo.kt @@ -1,10 +1,12 @@ package dev.inmo.tgbotapi.types.message import dev.inmo.tgbotapi.abstracts.FromUser +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.chat.* import dev.inmo.tgbotapi.types.chat.User +@ClassCastsIncluded sealed interface ForwardInfo { abstract val dateOfOriginal: TelegramDate diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/Message.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/Message.kt index 012164c153..39859a9289 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/Message.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/Message.kt @@ -1,6 +1,7 @@ package dev.inmo.tgbotapi.types.message.abstracts import com.soywiz.klock.DateTime +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.MessageIdentifier import dev.inmo.tgbotapi.types.chat.Chat import dev.inmo.tgbotapi.types.message.RawMessage @@ -9,6 +10,7 @@ import kotlinx.serialization.descriptors.* import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +@ClassCastsIncluded interface Message { val messageId: MessageIdentifier val chat: Chat diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/Abstracts.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/Abstracts.kt index 857ff558d8..453bef4726 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/Abstracts.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/Abstracts.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.types.message.content +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.ChatIdentifier import dev.inmo.tgbotapi.types.MessageIdentifier @@ -108,6 +109,7 @@ sealed interface MediaContent: MessageContent { fun asTelegramMedia(): TelegramMedia } +@ClassCastsIncluded sealed interface ResendableContent { fun createResend( chatId: ChatIdentifier, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/textsources/TextSource.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/textsources/TextSource.kt index 092833fa6c..2ae9efcde4 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/textsources/TextSource.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/textsources/TextSource.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.types.message.textsources +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.captionLength import dev.inmo.tgbotapi.types.textLength import kotlinx.serialization.Serializable @@ -10,6 +11,7 @@ typealias TextSourcesList = List typealias MutableTextSourcesList = MutableList @Serializable(TextSourceSerializer::class) +@ClassCastsIncluded sealed interface TextSource { val markdown: String val markdownV2: String diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportElementError.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportElementError.kt index 74dfc64364..adfcd9d2f3 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportElementError.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportElementError.kt @@ -5,6 +5,7 @@ package dev.inmo.tgbotapi.types.passport import dev.inmo.micro_utils.crypto.MD5 import dev.inmo.micro_utils.crypto.md5 import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.* import dev.inmo.tgbotapi.types.passport.encrypted.type @@ -18,6 +19,7 @@ import kotlinx.serialization.json.* val ByteArray.passportFileHash: MD5 get() = md5() +@ClassCastsIncluded @Serializable(PassportElementErrorSerializer::class) sealed class PassportElementError { abstract val source: String diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue.kt index b9bb54371c..8eaec8b628 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue.kt @@ -1,7 +1,9 @@ package dev.inmo.tgbotapi.types.passport.decrypted.abstracts +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.passport.credentials.EndDataCredentials +@ClassCastsIncluded interface SecureValue { val credentials: List } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted/abstracts/EncryptedPassportElement.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted/abstracts/EncryptedPassportElement.kt index 6bf1d843df..8ae7705fa2 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted/abstracts/EncryptedPassportElement.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted/abstracts/EncryptedPassportElement.kt @@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.passport.encrypted.abstracts import dev.inmo.micro_utils.crypto.SourceBytes import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.passport.encrypted.EncryptedElementSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonObject @@ -9,6 +10,7 @@ import kotlinx.serialization.json.JsonObject typealias PassportElementHash = SourceBytes @Serializable(EncryptedElementSerializer::class) +@ClassCastsIncluded interface EncryptedPassportElement { val hash: PassportElementHash } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/polls/Poll.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/polls/Poll.kt index 373486a3f5..03a54de345 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/polls/Poll.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/polls/Poll.kt @@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.types.polls import com.soywiz.klock.DateTime import com.soywiz.klock.TimeSpan import dev.inmo.tgbotapi.abstracts.TextedInput +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.message.* import dev.inmo.tgbotapi.types.message.RawMessageEntity @@ -16,6 +17,7 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.* +@ClassCastsIncluded sealed interface ScheduledCloseInfo { val closeDateTime: DateTime } @@ -45,6 +47,7 @@ val LongSeconds.asExactScheduledCloseInfo ) @Serializable(PollSerializer::class) +@ClassCastsIncluded sealed interface Poll { val id: PollIdentifier val question: String diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/update/abstracts/Update.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/update/abstracts/Update.kt index a06e2be315..55c3f42fb3 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/update/abstracts/Update.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/update/abstracts/Update.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.types.update.abstracts +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded import dev.inmo.tgbotapi.types.UpdateIdentifier import dev.inmo.tgbotapi.types.update.RawUpdate import dev.inmo.tgbotapi.utils.RiskFeature @@ -10,6 +11,7 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.JsonElement +@ClassCastsIncluded interface Update { val updateId: UpdateIdentifier val data: Any diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/internal/ClassCastsIncluded.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/internal/ClassCastsIncluded.kt new file mode 100644 index 0000000000..cc46caee80 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/internal/ClassCastsIncluded.kt @@ -0,0 +1,3 @@ +package dev.inmo.tgbotapi.utils.internal + +import dev.inmo.tgbotapi.utils.RiskFeature diff --git a/tgbotapi.ksp/lib/build.gradle b/tgbotapi.ksp/lib/build.gradle new file mode 100644 index 0000000000..05a6c36bde --- /dev/null +++ b/tgbotapi.ksp/lib/build.gradle @@ -0,0 +1,8 @@ +plugins { + id "org.jetbrains.kotlin.multiplatform" +} + +project.description = "Class Casts generator KSP library to include into your library" + +apply from: "$mppProjectWithSerializationPresetPath" +apply from: "$publishGradlePath" diff --git a/tgbotapi.ksp/lib/src/commonMain/kotlin/ClassCastsIncluded.kt b/tgbotapi.ksp/lib/src/commonMain/kotlin/ClassCastsIncluded.kt new file mode 100644 index 0000000000..c0c3a45730 --- /dev/null +++ b/tgbotapi.ksp/lib/src/commonMain/kotlin/ClassCastsIncluded.kt @@ -0,0 +1,5 @@ +package dev.inmo.tgbotapi.ksp.lib + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.SOURCE) +annotation class ClassCastsIncluded diff --git a/tgbotapi.ksp/processor/build.gradle b/tgbotapi.ksp/processor/build.gradle new file mode 100644 index 0000000000..985f68a50d --- /dev/null +++ b/tgbotapi.ksp/processor/build.gradle @@ -0,0 +1,13 @@ +plugins { + id "org.jetbrains.kotlin.jvm" +} + +repositories { + mavenCentral() +} + +dependencies { + implementation libs.kotlin.poet + implementation libs.ksp + implementation project(":tgbotapi.ksp:lib") +} diff --git a/tgbotapi.ksp/processor/src/main/kotlin/ClassCastsFiller.kt b/tgbotapi.ksp/processor/src/main/kotlin/ClassCastsFiller.kt new file mode 100644 index 0000000000..6ff48ffec5 --- /dev/null +++ b/tgbotapi.ksp/processor/src/main/kotlin/ClassCastsFiller.kt @@ -0,0 +1,103 @@ +package dev.inmo.tgbotapi.ksp.processor + +import com.google.devtools.ksp.symbol.* +import com.squareup.kotlinpoet.* +import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy +import com.squareup.kotlinpoet.ksp.* + +private fun FileSpec.Builder.addTopLevelImport(className: ClassName) { + className.topLevelClassName().let { + addImport(it.packageName, it.simpleNames) + } +} + +private fun FileSpec.Builder.createTypeDefinition(ksClassDeclaration: KSClassDeclaration): TypeName { + val className = ksClassDeclaration.toClassName() + return if (ksClassDeclaration.typeParameters.isNotEmpty()) { + className.parameterizedBy( + ksClassDeclaration.typeParameters.map { + it.bounds.first().resolve().also { + val typeClassName = it.toClassName() + addTopLevelImport(typeClassName) + }.toTypeName() + } + ) + } else { + className + } +} + +fun FileSpec.Builder.fill( + sourceKSClassDeclaration: KSClassDeclaration, + subtypesMap: Map>, + targetClassDeclaration: KSClassDeclaration = sourceKSClassDeclaration +) { + if (sourceKSClassDeclaration == targetClassDeclaration) { + subtypesMap[sourceKSClassDeclaration] ?.forEach { + fill(sourceKSClassDeclaration, subtypesMap, it) + } + } else { + val sourceClassName = sourceKSClassDeclaration.toClassName() + val targetClassClassName = targetClassDeclaration.toClassName() + val targetClassTypeDefinition = createTypeDefinition(targetClassDeclaration) + val simpleName = targetClassDeclaration.simpleName.asString() + val withFirstLowerCase = simpleName.replaceFirstChar { it.lowercase() } + val castedOrNullName = "${withFirstLowerCase}OrNull" + + addTopLevelImport(targetClassClassName) + addFunction( + FunSpec.builder(castedOrNullName).apply { + receiver(sourceClassName) + addCode( + "return this as? %L", + targetClassTypeDefinition + ) + returns(targetClassTypeDefinition.copy(nullable = true)) + addModifiers(KModifier.INLINE) + }.build() + ) + addFunction( + FunSpec.builder("${withFirstLowerCase}OrThrow").apply { + receiver(sourceClassName) + addCode( + "return this as %L", + targetClassTypeDefinition + ) + returns(targetClassTypeDefinition) + addModifiers(KModifier.INLINE) + }.build() + ) + addFunction( + FunSpec.builder("if$simpleName").apply { + val genericType = TypeVariableName("T", null) + addTypeVariable(genericType) + receiver(sourceClassName) + addParameter( + "block", + LambdaTypeName.get( + null, + targetClassTypeDefinition, + returnType = genericType + ) + ) + addCode( + "return ${castedOrNullName}() ?.let(block)", + targetClassTypeDefinition + ) + returns(genericType.copy(nullable = true)) + addModifiers(KModifier.INLINE) + }.build() + ) + + subtypesMap[targetClassDeclaration] ?.let { + if (it.count { it.classKind == ClassKind.CLASS } > 1) { + it + } else { + it.filter { it.classKind != ClassKind.CLASS } + } + } ?.forEach { + fill(sourceKSClassDeclaration, subtypesMap, it) + fill(targetClassDeclaration, subtypesMap, it) + } + } +} diff --git a/tgbotapi.ksp/processor/src/main/kotlin/TelegramBotAPISymbolProcessor.kt b/tgbotapi.ksp/processor/src/main/kotlin/TelegramBotAPISymbolProcessor.kt new file mode 100644 index 0000000000..9583317566 --- /dev/null +++ b/tgbotapi.ksp/processor/src/main/kotlin/TelegramBotAPISymbolProcessor.kt @@ -0,0 +1,65 @@ +package dev.inmo.tgbotapi.ksp.processor + +import com.google.devtools.ksp.getAllSuperTypes +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.KSAnnotated +import com.google.devtools.ksp.symbol.KSClassDeclaration +import com.squareup.kotlinpoet.FileSpec +import com.squareup.kotlinpoet.ksp.writeTo +import dev.inmo.tgbotapi.ksp.lib.ClassCastsIncluded +import java.io.File + +class TelegramBotAPISymbolProcessor( + private val codeGenerator: CodeGenerator, + private val targetPackage: String = "", + private val outputFile: String = "Output", + private val outputFolder: String? = null +) : SymbolProcessor { + override fun process(resolver: Resolver): List { + val classes = resolver.getSymbolsWithAnnotation(ClassCastsIncluded::class.qualifiedName!!).filterIsInstance() + val classesSubtypes = mutableMapOf>() + + resolver.getAllFiles().forEach { + it.declarations.forEach { potentialSubtype -> + if (potentialSubtype is KSClassDeclaration) { + val allSupertypes = potentialSubtype.getAllSuperTypes().map { it.declaration } + classes.forEach { + if (it in allSupertypes) { + classesSubtypes.getOrPut(it) { mutableSetOf() }.add(potentialSubtype) + } + } + } + } + } + fun fillWithSealeds(source: KSClassDeclaration, current: KSClassDeclaration = source) { + current.getSealedSubclasses().forEach { + classesSubtypes.getOrPut(source) { mutableSetOf() }.add(it) + fillWithSealeds(source, it) + } + } + classes.forEach { fillWithSealeds(it) } + + val fileSpec = FileSpec.builder( + targetPackage, + outputFile + ).apply { + classes.forEach { + fill( + it, + classesSubtypes.toMap() + ) + } + }.build() + runCatching { + outputFolder ?.also { + File(it).apply { + delete() + runCatching { mkdirs() } + fileSpec.writeTo(this) + } + } ?: fileSpec.writeTo(codeGenerator, false) + } + + return emptyList() + } +} diff --git a/tgbotapi.ksp/processor/src/main/kotlin/TelegramBotAPISymbolProcessorProvider.kt b/tgbotapi.ksp/processor/src/main/kotlin/TelegramBotAPISymbolProcessorProvider.kt new file mode 100644 index 0000000000..a6d4c0e7a9 --- /dev/null +++ b/tgbotapi.ksp/processor/src/main/kotlin/TelegramBotAPISymbolProcessorProvider.kt @@ -0,0 +1,14 @@ +package dev.inmo.tgbotapi.ksp.processor + +import com.google.devtools.ksp.processing.* + +class TelegramBotAPISymbolProcessorProvider : SymbolProcessorProvider { + override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { + return TelegramBotAPISymbolProcessor( + environment.codeGenerator, + environment.options["cctargetPackage"] ?: "", + environment.options["ccoutputFileName"] ?: "Output", + environment.options["ccoutputFolder"], + ) + } +} diff --git a/tgbotapi.ksp/processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/tgbotapi.ksp/processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider new file mode 100644 index 0000000000..f0b099fb8c --- /dev/null +++ b/tgbotapi.ksp/processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -0,0 +1 @@ +dev.inmo.tgbotapi.ksp.processor.TelegramBotAPISymbolProcessorProvider diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt index ec0a9408f1..6227113172 100644 --- a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt @@ -66,3474 +66,6 @@ import dev.inmo.tgbotapi.types.update.abstracts.* import dev.inmo.tgbotapi.types.update.media_group.* import dev.inmo.tgbotapi.utils.PreviewFeature -@PreviewFeature -inline fun Chat.ifBot(block: (Bot) -> T) = botOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.botOrNull(): Bot? = this as? Bot - -@PreviewFeature -inline fun Chat.botOrThrow(): Bot = this as Bot - -@PreviewFeature -inline fun Chat.ifCommonBot(block: (CommonBot) -> T) = commonBotOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.commonBotOrNull(): CommonBot? = this as? CommonBot - -@PreviewFeature -inline fun Chat.commonBotOrThrow(): CommonBot = this as CommonBot - -@PreviewFeature -inline fun Chat.ifCommonUser(block: (CommonUser) -> T) = commonUserOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.commonUserOrNull(): CommonUser? = this as? CommonUser - -@PreviewFeature -inline fun Chat.commonUserOrThrow(): CommonUser = this as CommonUser - -@PreviewFeature -inline fun Chat.ifExtendedBot(block: (ExtendedBot) -> T) = extendedBotOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedBotOrNull(): ExtendedBot? = this as? ExtendedBot - -@PreviewFeature -inline fun Chat.extendedBotOrThrow(): ExtendedBot = this as ExtendedBot - -@PreviewFeature -inline fun Chat.ifUser(block: (User) -> T) = userOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.userOrNull(): User? = this as? User - -@PreviewFeature -inline fun Chat.userOrThrow(): User = this as User - -@PreviewFeature -inline fun Chat.ifChannelChat(block: (ChannelChat) -> T) = channelChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.channelChatOrNull(): ChannelChat? = this as? ChannelChat - -@PreviewFeature -inline fun Chat.channelChatOrThrow(): ChannelChat = this as ChannelChat - -@PreviewFeature -inline fun Chat.ifGroupChat(block: (GroupChat) -> T) = groupChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.groupChatOrNull(): GroupChat? = this as? GroupChat - -@PreviewFeature -inline fun Chat.groupChatOrThrow(): GroupChat = this as GroupChat - -@PreviewFeature -inline fun Chat.ifPrivateChat(block: (PrivateChat) -> T) = privateChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.privateChatOrNull(): PrivateChat? = this as? PrivateChat - -@PreviewFeature -inline fun Chat.privateChatOrThrow(): PrivateChat = this as PrivateChat - -@PreviewFeature -inline fun Chat.ifPublicChat(block: (PublicChat) -> T) = publicChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.publicChatOrNull(): PublicChat? = this as? PublicChat - -@PreviewFeature -inline fun Chat.publicChatOrThrow(): PublicChat = this as PublicChat - -@PreviewFeature -inline fun Chat.ifSuperPublicChat(block: (SuperPublicChat) -> T) = superPublicChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.superPublicChatOrNull(): SuperPublicChat? = this as? SuperPublicChat - -@PreviewFeature -inline fun Chat.superPublicChatOrThrow(): SuperPublicChat = this as SuperPublicChat - -@PreviewFeature -inline fun Chat.ifSupergroupChat(block: (SupergroupChat) -> T) = supergroupChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.supergroupChatOrNull(): SupergroupChat? = this as? SupergroupChat - -@PreviewFeature -inline fun Chat.supergroupChatOrThrow(): SupergroupChat = this as SupergroupChat - -@PreviewFeature -inline fun Chat.ifUnknownChatType(block: (UnknownChatType) -> T) = unknownChatTypeOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.unknownChatTypeOrNull(): UnknownChatType? = this as? UnknownChatType - -@PreviewFeature -inline fun Chat.unknownChatTypeOrThrow(): UnknownChatType = this as UnknownChatType - -@PreviewFeature -inline fun Chat.ifUsernameChat(block: (UsernameChat) -> T) = usernameChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.usernameChatOrNull(): UsernameChat? = this as? UsernameChat - -@PreviewFeature -inline fun Chat.usernameChatOrThrow(): UsernameChat = this as UsernameChat - -@PreviewFeature -inline fun Chat.ifExtendedChannelChat(block: (ExtendedChannelChat) -> T) = extendedChannelChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedChannelChatOrNull(): ExtendedChannelChat? = this as? ExtendedChannelChat - -@PreviewFeature -inline fun Chat.extendedChannelChatOrThrow(): ExtendedChannelChat = this as ExtendedChannelChat - -@PreviewFeature -inline fun Chat.ifExtendedChat(block: (ExtendedChat) -> T) = extendedChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedChatOrNull(): ExtendedChat? = this as? ExtendedChat - -@PreviewFeature -inline fun Chat.extendedChatOrThrow(): ExtendedChat = this as ExtendedChat - -@PreviewFeature -inline fun Chat.ifExtendedGroupChat(block: (ExtendedGroupChat) -> T) = extendedGroupChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedGroupChatOrNull(): ExtendedGroupChat? = this as? ExtendedGroupChat - -@PreviewFeature -inline fun Chat.extendedGroupChatOrThrow(): ExtendedGroupChat = this as ExtendedGroupChat - -@PreviewFeature -inline fun Chat.ifExtendedPrivateChat(block: (ExtendedPrivateChat) -> T) = extendedPrivateChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedPrivateChatOrNull(): ExtendedPrivateChat? = this as? ExtendedPrivateChat - -@PreviewFeature -inline fun Chat.extendedPrivateChatOrThrow(): ExtendedPrivateChat = this as ExtendedPrivateChat - -@PreviewFeature -inline fun Chat.ifExtendedPublicChat(block: (ExtendedPublicChat) -> T) = extendedPublicChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedPublicChatOrNull(): ExtendedPublicChat? = this as? ExtendedPublicChat - -@PreviewFeature -inline fun Chat.extendedPublicChatOrThrow(): ExtendedPublicChat = this as ExtendedPublicChat - -@PreviewFeature -inline fun Chat.ifExtendedSupergroupChat(block: (ExtendedSupergroupChat) -> T) = - extendedSupergroupChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.extendedSupergroupChatOrNull(): ExtendedSupergroupChat? = this as? ExtendedSupergroupChat - -@PreviewFeature -inline fun Chat.extendedSupergroupChatOrThrow(): ExtendedSupergroupChat = this as ExtendedSupergroupChat - -@PreviewFeature -inline fun Chat.ifPossiblyPremiumChat(block: (PossiblyPremiumChat) -> T) = possiblyPremiumChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.possiblyPremiumChatOrNull(): PossiblyPremiumChat? = this as? PossiblyPremiumChat - -@PreviewFeature -inline fun Chat.possiblyPremiumChatOrThrow(): PossiblyPremiumChat = this as PossiblyPremiumChat - -@PreviewFeature -inline fun Chat.ifAbleToAddInAttachmentMenuChat(block: (AbleToAddInAttachmentMenuChat) -> T) = - ableToAddInAttachmentMenuChatOrNull()?.let(block) - -@PreviewFeature -inline fun Chat.ableToAddInAttachmentMenuChatOrNull(): AbleToAddInAttachmentMenuChat? = - this as? AbleToAddInAttachmentMenuChat - -@PreviewFeature -inline fun Chat.ableToAddInAttachmentMenuChatOrThrow(): AbleToAddInAttachmentMenuChat = - this as AbleToAddInAttachmentMenuChat - -@PreviewFeature -inline fun CallbackQuery.ifDataCallbackQuery(block: (DataCallbackQuery) -> T) = - dataCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.dataCallbackQueryOrNull(): DataCallbackQuery? = this as? DataCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.dataCallbackQueryOrThrow(): DataCallbackQuery = this as DataCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifGameShortNameCallbackQuery(block: (GameShortNameCallbackQuery) -> T) = - gameShortNameCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.gameShortNameCallbackQueryOrNull(): GameShortNameCallbackQuery? = - this as? GameShortNameCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.gameShortNameCallbackQueryOrThrow(): GameShortNameCallbackQuery = - this as GameShortNameCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifInlineMessageIdCallbackQuery(block: (InlineMessageIdCallbackQuery) -> T) = - inlineMessageIdCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.inlineMessageIdCallbackQueryOrNull(): InlineMessageIdCallbackQuery? = - this as? InlineMessageIdCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.inlineMessageIdCallbackQueryOrThrow(): InlineMessageIdCallbackQuery = - this as InlineMessageIdCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifInlineMessageIdDataCallbackQuery(block: (InlineMessageIdDataCallbackQuery) -> T) = - inlineMessageIdDataCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.inlineMessageIdDataCallbackQueryOrNull(): InlineMessageIdDataCallbackQuery? = - this as? InlineMessageIdDataCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.inlineMessageIdDataCallbackQueryOrThrow(): InlineMessageIdDataCallbackQuery = - this as InlineMessageIdDataCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifInlineMessageIdGameShortNameCallbackQuery(block: (InlineMessageIdGameShortNameCallbackQuery) -> T) = - inlineMessageIdGameShortNameCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.inlineMessageIdGameShortNameCallbackQueryOrNull(): InlineMessageIdGameShortNameCallbackQuery? = - this as? InlineMessageIdGameShortNameCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.inlineMessageIdGameShortNameCallbackQueryOrThrow(): InlineMessageIdGameShortNameCallbackQuery = - this as InlineMessageIdGameShortNameCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifMessageCallbackQuery(block: (MessageCallbackQuery) -> T) = - messageCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.messageCallbackQueryOrNull(): MessageCallbackQuery? = this as? MessageCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.messageCallbackQueryOrThrow(): MessageCallbackQuery = this as MessageCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifMessageDataCallbackQuery(block: (MessageDataCallbackQuery) -> T) = - messageDataCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.messageDataCallbackQueryOrNull(): MessageDataCallbackQuery? = this as? MessageDataCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.messageDataCallbackQueryOrThrow(): MessageDataCallbackQuery = this as MessageDataCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifMessageGameShortNameCallbackQuery(block: (MessageGameShortNameCallbackQuery) -> T) = - messageGameShortNameCallbackQueryOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.messageGameShortNameCallbackQueryOrNull(): MessageGameShortNameCallbackQuery? = - this as? MessageGameShortNameCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.messageGameShortNameCallbackQueryOrThrow(): MessageGameShortNameCallbackQuery = - this as MessageGameShortNameCallbackQuery - -@PreviewFeature -inline fun CallbackQuery.ifUnknownCallbackQueryType(block: (UnknownCallbackQueryType) -> T) = - unknownCallbackQueryTypeOrNull()?.let(block) - -@PreviewFeature -inline fun CallbackQuery.unknownCallbackQueryTypeOrNull(): UnknownCallbackQueryType? = this as? UnknownCallbackQueryType - -@PreviewFeature -inline fun CallbackQuery.unknownCallbackQueryTypeOrThrow(): UnknownCallbackQueryType = this as UnknownCallbackQueryType - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorDataField(block: (PassportElementErrorDataField) -> T) = - passportElementErrorDataFieldOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorDataFieldOrNull(): PassportElementErrorDataField? = - this as? PassportElementErrorDataField - -@PreviewFeature -inline fun PassportElementError.passportElementErrorDataFieldOrThrow(): PassportElementErrorDataField = - this as PassportElementErrorDataField - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorFile(block: (PassportElementErrorFile) -> T) = - passportElementErrorFileOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorFileOrNull(): PassportElementErrorFile? = - this as? PassportElementErrorFile - -@PreviewFeature -inline fun PassportElementError.passportElementErrorFileOrThrow(): PassportElementErrorFile = - this as PassportElementErrorFile - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorFiles(block: (PassportElementErrorFiles) -> T) = - passportElementErrorFilesOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorFilesOrNull(): PassportElementErrorFiles? = - this as? PassportElementErrorFiles - -@PreviewFeature -inline fun PassportElementError.passportElementErrorFilesOrThrow(): PassportElementErrorFiles = - this as PassportElementErrorFiles - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorFrontSide(block: (PassportElementErrorFrontSide) -> T) = - passportElementErrorFrontSideOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorFrontSideOrNull(): PassportElementErrorFrontSide? = - this as? PassportElementErrorFrontSide - -@PreviewFeature -inline fun PassportElementError.passportElementErrorFrontSideOrThrow(): PassportElementErrorFrontSide = - this as PassportElementErrorFrontSide - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorReverseSide(block: (PassportElementErrorReverseSide) -> T) = - passportElementErrorReverseSideOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorReverseSideOrNull(): PassportElementErrorReverseSide? = - this as? PassportElementErrorReverseSide - -@PreviewFeature -inline fun PassportElementError.passportElementErrorReverseSideOrThrow(): PassportElementErrorReverseSide = - this as PassportElementErrorReverseSide - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorSelfie(block: (PassportElementErrorSelfie) -> T) = - passportElementErrorSelfieOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorSelfieOrNull(): PassportElementErrorSelfie? = - this as? PassportElementErrorSelfie - -@PreviewFeature -inline fun PassportElementError.passportElementErrorSelfieOrThrow(): PassportElementErrorSelfie = - this as PassportElementErrorSelfie - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorTranslationFile(block: (PassportElementErrorTranslationFile) -> T) = - passportElementErrorTranslationFileOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorTranslationFileOrNull(): PassportElementErrorTranslationFile? = - this as? PassportElementErrorTranslationFile - -@PreviewFeature -inline fun PassportElementError.passportElementErrorTranslationFileOrThrow(): PassportElementErrorTranslationFile = - this as PassportElementErrorTranslationFile - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorTranslationFiles(block: (PassportElementErrorTranslationFiles) -> T) = - passportElementErrorTranslationFilesOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorTranslationFilesOrNull(): PassportElementErrorTranslationFiles? = - this as? PassportElementErrorTranslationFiles - -@PreviewFeature -inline fun PassportElementError.passportElementErrorTranslationFilesOrThrow(): PassportElementErrorTranslationFiles = - this as PassportElementErrorTranslationFiles - -@PreviewFeature -inline fun PassportElementError.ifPassportElementErrorUnspecified(block: (PassportElementErrorUnspecified) -> T) = - passportElementErrorUnspecifiedOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementErrorUnspecifiedOrNull(): PassportElementErrorUnspecified? = - this as? PassportElementErrorUnspecified - -@PreviewFeature -inline fun PassportElementError.passportElementErrorUnspecifiedOrThrow(): PassportElementErrorUnspecified = - this as PassportElementErrorUnspecified - -@PreviewFeature -inline fun PassportElementError.ifPassportElementFileError(block: (PassportElementFileError) -> T) = - passportElementFileErrorOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementFileErrorOrNull(): PassportElementFileError? = - this as? PassportElementFileError - -@PreviewFeature -inline fun PassportElementError.passportElementFileErrorOrThrow(): PassportElementFileError = - this as PassportElementFileError - -@PreviewFeature -inline fun PassportElementError.ifPassportElementFilesError(block: (PassportElementFilesError) -> T) = - passportElementFilesErrorOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportElementFilesErrorOrNull(): PassportElementFilesError? = - this as? PassportElementFilesError - -@PreviewFeature -inline fun PassportElementError.passportElementFilesErrorOrThrow(): PassportElementFilesError = - this as PassportElementFilesError - -@PreviewFeature -inline fun PassportElementError.ifPassportMultipleElementsError(block: (PassportMultipleElementsError) -> T) = - passportMultipleElementsErrorOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportMultipleElementsErrorOrNull(): PassportMultipleElementsError? = - this as? PassportMultipleElementsError - -@PreviewFeature -inline fun PassportElementError.passportMultipleElementsErrorOrThrow(): PassportMultipleElementsError = - this as PassportMultipleElementsError - -@PreviewFeature -inline fun PassportElementError.ifPassportSingleElementError(block: (PassportSingleElementError) -> T) = - passportSingleElementErrorOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.passportSingleElementErrorOrNull(): PassportSingleElementError? = - this as? PassportSingleElementError - -@PreviewFeature -inline fun PassportElementError.passportSingleElementErrorOrThrow(): PassportSingleElementError = - this as PassportSingleElementError - -@PreviewFeature -inline fun PassportElementError.ifUnknownPassportElementError(block: (UnknownPassportElementError) -> T) = - unknownPassportElementErrorOrNull()?.let(block) - -@PreviewFeature -inline fun PassportElementError.unknownPassportElementErrorOrNull(): UnknownPassportElementError? = - this as? UnknownPassportElementError - -@PreviewFeature -inline fun PassportElementError.unknownPassportElementErrorOrThrow(): UnknownPassportElementError = - this as UnknownPassportElementError - -@PreviewFeature -inline fun EncryptedPassportElement.ifBankStatement(block: (BankStatement) -> T) = bankStatementOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.bankStatementOrNull(): BankStatement? = this as? BankStatement - -@PreviewFeature -inline fun EncryptedPassportElement.bankStatementOrThrow(): BankStatement = this as BankStatement - -@PreviewFeature -inline fun EncryptedPassportElement.ifCommonPassport(block: (CommonPassport) -> T) = - commonPassportOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.commonPassportOrNull(): CommonPassport? = this as? CommonPassport - -@PreviewFeature -inline fun EncryptedPassportElement.commonPassportOrThrow(): CommonPassport = this as CommonPassport - -@PreviewFeature -inline fun EncryptedPassportElement.ifDriverLicense(block: (DriverLicense) -> T) = driverLicenseOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.driverLicenseOrNull(): DriverLicense? = this as? DriverLicense - -@PreviewFeature -inline fun EncryptedPassportElement.driverLicenseOrThrow(): DriverLicense = this as DriverLicense - -@PreviewFeature -inline fun EncryptedPassportElement.ifEmail(block: (Email) -> T) = emailOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.emailOrNull(): Email? = this as? Email - -@PreviewFeature -inline fun EncryptedPassportElement.emailOrThrow(): Email = this as Email - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedAddress(block: (EncryptedAddress) -> T) = - encryptedAddressOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedAddressOrNull(): EncryptedAddress? = this as? EncryptedAddress - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedAddressOrThrow(): EncryptedAddress = this as EncryptedAddress - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPersonalDetails(block: (EncryptedPersonalDetails) -> T) = - encryptedPersonalDetailsOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPersonalDetailsOrNull(): EncryptedPersonalDetails? = - this as? EncryptedPersonalDetails - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPersonalDetailsOrThrow(): EncryptedPersonalDetails = - this as EncryptedPersonalDetails - -@PreviewFeature -inline fun EncryptedPassportElement.ifIdentityCard(block: (IdentityCard) -> T) = identityCardOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.identityCardOrNull(): IdentityCard? = this as? IdentityCard - -@PreviewFeature -inline fun EncryptedPassportElement.identityCardOrThrow(): IdentityCard = this as IdentityCard - -@PreviewFeature -inline fun EncryptedPassportElement.ifInternalPassport(block: (InternalPassport) -> T) = - internalPassportOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.internalPassportOrNull(): InternalPassport? = this as? InternalPassport - -@PreviewFeature -inline fun EncryptedPassportElement.internalPassportOrThrow(): InternalPassport = this as InternalPassport - -@PreviewFeature -inline fun EncryptedPassportElement.ifPassport(block: (Passport) -> T) = passportOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.passportOrNull(): Passport? = this as? Passport - -@PreviewFeature -inline fun EncryptedPassportElement.passportOrThrow(): Passport = this as Passport - -@PreviewFeature -inline fun EncryptedPassportElement.ifPassportRegistration(block: (PassportRegistration) -> T) = - passportRegistrationOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.passportRegistrationOrNull(): PassportRegistration? = this as? PassportRegistration - -@PreviewFeature -inline fun EncryptedPassportElement.passportRegistrationOrThrow(): PassportRegistration = this as PassportRegistration - -@PreviewFeature -inline fun EncryptedPassportElement.ifPhoneNumber(block: (PhoneNumber) -> T) = phoneNumberOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.phoneNumberOrNull(): PhoneNumber? = this as? PhoneNumber - -@PreviewFeature -inline fun EncryptedPassportElement.phoneNumberOrThrow(): PhoneNumber = this as PhoneNumber - -@PreviewFeature -inline fun EncryptedPassportElement.ifRentalAgreement(block: (RentalAgreement) -> T) = - rentalAgreementOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.rentalAgreementOrNull(): RentalAgreement? = this as? RentalAgreement - -@PreviewFeature -inline fun EncryptedPassportElement.rentalAgreementOrThrow(): RentalAgreement = this as RentalAgreement - -@PreviewFeature -inline fun EncryptedPassportElement.ifTemporaryRegistration(block: (TemporaryRegistration) -> T) = - temporaryRegistrationOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.temporaryRegistrationOrNull(): TemporaryRegistration? = - this as? TemporaryRegistration - -@PreviewFeature -inline fun EncryptedPassportElement.temporaryRegistrationOrThrow(): TemporaryRegistration = - this as TemporaryRegistration - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithTranslatableFilesCollection(block: (EncryptedPassportElementWithTranslatableFilesCollection) -> T) = - encryptedPassportElementWithTranslatableFilesCollectionOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithTranslatableFilesCollectionOrNull(): EncryptedPassportElementWithTranslatableFilesCollection? = - this as? EncryptedPassportElementWithTranslatableFilesCollection - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithTranslatableFilesCollectionOrThrow(): EncryptedPassportElementWithTranslatableFilesCollection = - this as EncryptedPassportElementWithTranslatableFilesCollection - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithTranslatableIDDocument(block: (EncryptedPassportElementWithTranslatableIDDocument) -> T) = - encryptedPassportElementWithTranslatableIDDocumentOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithTranslatableIDDocumentOrNull(): EncryptedPassportElementWithTranslatableIDDocument? = - this as? EncryptedPassportElementWithTranslatableIDDocument - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithTranslatableIDDocumentOrThrow(): EncryptedPassportElementWithTranslatableIDDocument = - this as EncryptedPassportElementWithTranslatableIDDocument - -@PreviewFeature -inline fun EncryptedPassportElement.ifUtilityBill(block: (UtilityBill) -> T) = utilityBillOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.utilityBillOrNull(): UtilityBill? = this as? UtilityBill - -@PreviewFeature -inline fun EncryptedPassportElement.utilityBillOrThrow(): UtilityBill = this as UtilityBill - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithFilesCollection(block: (EncryptedPassportElementWithFilesCollection) -> T) = - encryptedPassportElementWithFilesCollectionOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithFilesCollectionOrNull(): EncryptedPassportElementWithFilesCollection? = - this as? EncryptedPassportElementWithFilesCollection - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithFilesCollectionOrThrow(): EncryptedPassportElementWithFilesCollection = - this as EncryptedPassportElementWithFilesCollection - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementTranslatable(block: (EncryptedPassportElementTranslatable) -> T) = - encryptedPassportElementTranslatableOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementTranslatableOrNull(): EncryptedPassportElementTranslatable? = - this as? EncryptedPassportElementTranslatable - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementTranslatableOrThrow(): EncryptedPassportElementTranslatable = - this as EncryptedPassportElementTranslatable - -@PreviewFeature -inline fun EncryptedPassportElement.ifUnknownEncryptedPassportElement(block: (UnknownEncryptedPassportElement) -> T) = - unknownEncryptedPassportElementOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.unknownEncryptedPassportElementOrNull(): UnknownEncryptedPassportElement? = - this as? UnknownEncryptedPassportElement - -@PreviewFeature -inline fun EncryptedPassportElement.unknownEncryptedPassportElementOrThrow(): UnknownEncryptedPassportElement = - this as UnknownEncryptedPassportElement - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithData(block: (EncryptedPassportElementWithData) -> T) = - encryptedPassportElementWithDataOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithDataOrNull(): EncryptedPassportElementWithData? = - this as? EncryptedPassportElementWithData - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithDataOrThrow(): EncryptedPassportElementWithData = - this as EncryptedPassportElementWithData - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithEmail(block: (EncryptedPassportElementWithEmail) -> T) = - encryptedPassportElementWithEmailOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithEmailOrNull(): EncryptedPassportElementWithEmail? = - this as? EncryptedPassportElementWithEmail - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithEmailOrThrow(): EncryptedPassportElementWithEmail = - this as EncryptedPassportElementWithEmail - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithFrontSide(block: (EncryptedPassportElementWithFrontSide) -> T) = - encryptedPassportElementWithFrontSideOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithFrontSideOrNull(): EncryptedPassportElementWithFrontSide? = - this as? EncryptedPassportElementWithFrontSide - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithFrontSideOrThrow(): EncryptedPassportElementWithFrontSide = - this as EncryptedPassportElementWithFrontSide - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithPhoneNumber(block: (EncryptedPassportElementWithPhoneNumber) -> T) = - encryptedPassportElementWithPhoneNumberOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithPhoneNumberOrNull(): EncryptedPassportElementWithPhoneNumber? = - this as? EncryptedPassportElementWithPhoneNumber - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithPhoneNumberOrThrow(): EncryptedPassportElementWithPhoneNumber = - this as EncryptedPassportElementWithPhoneNumber - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithReverseSide(block: (EncryptedPassportElementWithReverseSide) -> T) = - encryptedPassportElementWithReverseSideOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithReverseSideOrNull(): EncryptedPassportElementWithReverseSide? = - this as? EncryptedPassportElementWithReverseSide - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithReverseSideOrThrow(): EncryptedPassportElementWithReverseSide = - this as EncryptedPassportElementWithReverseSide - -@PreviewFeature -inline fun EncryptedPassportElement.ifEncryptedPassportElementWithSelfie(block: (EncryptedPassportElementWithSelfie) -> T) = - encryptedPassportElementWithSelfieOrNull()?.let(block) - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithSelfieOrNull(): EncryptedPassportElementWithSelfie? = - this as? EncryptedPassportElementWithSelfie - -@PreviewFeature -inline fun EncryptedPassportElement.encryptedPassportElementWithSelfieOrThrow(): EncryptedPassportElementWithSelfie = - this as EncryptedPassportElementWithSelfie - -@PreviewFeature -inline fun SecureValue.ifAddressSecureValue(block: (AddressSecureValue) -> T) = - addressSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.addressSecureValueOrNull(): AddressSecureValue? = this as? AddressSecureValue - -@PreviewFeature -inline fun SecureValue.addressSecureValueOrThrow(): AddressSecureValue = this as AddressSecureValue - -@PreviewFeature -inline fun SecureValue.ifBankStatementSecureValue(block: (BankStatementSecureValue) -> T) = - bankStatementSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.bankStatementSecureValueOrNull(): BankStatementSecureValue? = this as? BankStatementSecureValue - -@PreviewFeature -inline fun SecureValue.bankStatementSecureValueOrThrow(): BankStatementSecureValue = this as BankStatementSecureValue - -@PreviewFeature -inline fun SecureValue.ifCommonPassportSecureValue(block: (CommonPassportSecureValue) -> T) = - commonPassportSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.commonPassportSecureValueOrNull(): CommonPassportSecureValue? = - this as? CommonPassportSecureValue - -@PreviewFeature -inline fun SecureValue.commonPassportSecureValueOrThrow(): CommonPassportSecureValue = this as CommonPassportSecureValue - -@PreviewFeature -inline fun SecureValue.ifDriverLicenseSecureValue(block: (DriverLicenseSecureValue) -> T) = - driverLicenseSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.driverLicenseSecureValueOrNull(): DriverLicenseSecureValue? = this as? DriverLicenseSecureValue - -@PreviewFeature -inline fun SecureValue.driverLicenseSecureValueOrThrow(): DriverLicenseSecureValue = this as DriverLicenseSecureValue - -@PreviewFeature -inline fun SecureValue.ifIdentityCardSecureValue(block: (IdentityCardSecureValue) -> T) = - identityCardSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.identityCardSecureValueOrNull(): IdentityCardSecureValue? = this as? IdentityCardSecureValue - -@PreviewFeature -inline fun SecureValue.identityCardSecureValueOrThrow(): IdentityCardSecureValue = this as IdentityCardSecureValue - -@PreviewFeature -inline fun SecureValue.ifIdentityWithReverseSideSecureValue(block: (IdentityWithReverseSideSecureValue) -> T) = - identityWithReverseSideSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.identityWithReverseSideSecureValueOrNull(): IdentityWithReverseSideSecureValue? = - this as? IdentityWithReverseSideSecureValue - -@PreviewFeature -inline fun SecureValue.identityWithReverseSideSecureValueOrThrow(): IdentityWithReverseSideSecureValue = - this as IdentityWithReverseSideSecureValue - -@PreviewFeature -inline fun SecureValue.ifInternalPassportSecureValue(block: (InternalPassportSecureValue) -> T) = - internalPassportSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.internalPassportSecureValueOrNull(): InternalPassportSecureValue? = - this as? InternalPassportSecureValue - -@PreviewFeature -inline fun SecureValue.internalPassportSecureValueOrThrow(): InternalPassportSecureValue = - this as InternalPassportSecureValue - -@PreviewFeature -inline fun SecureValue.ifOtherDocumentsSecureValue(block: (OtherDocumentsSecureValue) -> T) = - otherDocumentsSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.otherDocumentsSecureValueOrNull(): OtherDocumentsSecureValue? = - this as? OtherDocumentsSecureValue - -@PreviewFeature -inline fun SecureValue.otherDocumentsSecureValueOrThrow(): OtherDocumentsSecureValue = this as OtherDocumentsSecureValue - -@PreviewFeature -inline fun SecureValue.ifPassportRegistrationSecureValue(block: (PassportRegistrationSecureValue) -> T) = - passportRegistrationSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.passportRegistrationSecureValueOrNull(): PassportRegistrationSecureValue? = - this as? PassportRegistrationSecureValue - -@PreviewFeature -inline fun SecureValue.passportRegistrationSecureValueOrThrow(): PassportRegistrationSecureValue = - this as PassportRegistrationSecureValue - -@PreviewFeature -inline fun SecureValue.ifPassportSecureValue(block: (PassportSecureValue) -> T) = - passportSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.passportSecureValueOrNull(): PassportSecureValue? = this as? PassportSecureValue - -@PreviewFeature -inline fun SecureValue.passportSecureValueOrThrow(): PassportSecureValue = this as PassportSecureValue - -@PreviewFeature -inline fun SecureValue.ifPersonalDetailsSecureValue(block: (PersonalDetailsSecureValue) -> T) = - personalDetailsSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.personalDetailsSecureValueOrNull(): PersonalDetailsSecureValue? = - this as? PersonalDetailsSecureValue - -@PreviewFeature -inline fun SecureValue.personalDetailsSecureValueOrThrow(): PersonalDetailsSecureValue = - this as PersonalDetailsSecureValue - -@PreviewFeature -inline fun SecureValue.ifRentalAgreementSecureValue(block: (RentalAgreementSecureValue) -> T) = - rentalAgreementSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.rentalAgreementSecureValueOrNull(): RentalAgreementSecureValue? = - this as? RentalAgreementSecureValue - -@PreviewFeature -inline fun SecureValue.rentalAgreementSecureValueOrThrow(): RentalAgreementSecureValue = - this as RentalAgreementSecureValue - -@PreviewFeature -inline fun SecureValue.ifTemporalRegistrationSecureValue(block: (TemporalRegistrationSecureValue) -> T) = - temporalRegistrationSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.temporalRegistrationSecureValueOrNull(): TemporalRegistrationSecureValue? = - this as? TemporalRegistrationSecureValue - -@PreviewFeature -inline fun SecureValue.temporalRegistrationSecureValueOrThrow(): TemporalRegistrationSecureValue = - this as TemporalRegistrationSecureValue - -@PreviewFeature -inline fun SecureValue.ifUtilityBillSecureValue(block: (UtilityBillSecureValue) -> T) = - utilityBillSecureValueOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.utilityBillSecureValueOrNull(): UtilityBillSecureValue? = this as? UtilityBillSecureValue - -@PreviewFeature -inline fun SecureValue.utilityBillSecureValueOrThrow(): UtilityBillSecureValue = this as UtilityBillSecureValue - -@PreviewFeature -inline fun SecureValue.ifSecureValueIdentity(block: (SecureValueIdentity) -> T) = - secureValueIdentityOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.secureValueIdentityOrNull(): SecureValueIdentity? = this as? SecureValueIdentity - -@PreviewFeature -inline fun SecureValue.secureValueIdentityOrThrow(): SecureValueIdentity = this as SecureValueIdentity - -@PreviewFeature -inline fun SecureValue.ifSecureValueWithData(block: (SecureValueWithData) -> T) = - secureValueWithDataOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.secureValueWithDataOrNull(): SecureValueWithData? = this as? SecureValueWithData - -@PreviewFeature -inline fun SecureValue.secureValueWithDataOrThrow(): SecureValueWithData = this as SecureValueWithData - -@PreviewFeature -inline fun SecureValue.ifSecureValueWithFiles(block: (SecureValueWithFiles) -> T) = - secureValueWithFilesOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.secureValueWithFilesOrNull(): SecureValueWithFiles? = this as? SecureValueWithFiles - -@PreviewFeature -inline fun SecureValue.secureValueWithFilesOrThrow(): SecureValueWithFiles = this as SecureValueWithFiles - -@PreviewFeature -inline fun SecureValue.ifSecureValueWithReverseSide(block: (SecureValueWithReverseSide) -> T) = - secureValueWithReverseSideOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.secureValueWithReverseSideOrNull(): SecureValueWithReverseSide? = - this as? SecureValueWithReverseSide - -@PreviewFeature -inline fun SecureValue.secureValueWithReverseSideOrThrow(): SecureValueWithReverseSide = - this as SecureValueWithReverseSide - -@PreviewFeature -inline fun SecureValue.ifSecureValueWithTranslations(block: (SecureValueWithTranslations) -> T) = - secureValueWithTranslationsOrNull()?.let(block) - -@PreviewFeature -inline fun SecureValue.secureValueWithTranslationsOrNull(): SecureValueWithTranslations? = - this as? SecureValueWithTranslations - -@PreviewFeature -inline fun SecureValue.secureValueWithTranslationsOrThrow(): SecureValueWithTranslations = - this as SecureValueWithTranslations - -@PreviewFeature -inline fun Message.ifAnonymousGroupContentMessageImpl(block: (AnonymousGroupContentMessageImpl) -> T) = - anonymousGroupContentMessageImplOrNull()?.let(block) - -@PreviewFeature -inline fun Message.anonymousGroupContentMessageImplOrNull(): AnonymousGroupContentMessageImpl? = - this as? AnonymousGroupContentMessageImpl - -@PreviewFeature -inline fun Message.anonymousGroupContentMessageImplOrThrow(): AnonymousGroupContentMessageImpl = - this as AnonymousGroupContentMessageImpl - -@PreviewFeature -inline fun Message.ifChannelContentMessageImpl(block: (UnconnectedFromChannelGroupContentMessageImpl) -> T) = - channelContentMessageImplOrNull()?.let(block) - -@PreviewFeature -inline fun Message.channelContentMessageImplOrNull(): UnconnectedFromChannelGroupContentMessageImpl? = - this as? UnconnectedFromChannelGroupContentMessageImpl - -@PreviewFeature -inline fun Message.channelContentMessageImplOrThrow(): UnconnectedFromChannelGroupContentMessageImpl = - this as UnconnectedFromChannelGroupContentMessageImpl - -@PreviewFeature -inline fun Message.ifPassportMessage(block: (PassportMessage) -> T) = passportMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.passportMessageOrNull(): PassportMessage? = this as? PassportMessage - -@PreviewFeature -inline fun Message.passportMessageOrThrow(): PassportMessage = this as PassportMessage - -@PreviewFeature -inline fun Message.ifPrivateContentMessageImpl(block: (PrivateContentMessageImpl) -> T) = - privateContentMessageImplOrNull()?.let(block) - -@PreviewFeature -inline fun Message.privateContentMessageImplOrNull(): PrivateContentMessageImpl? = - this as? PrivateContentMessageImpl - -@PreviewFeature -inline fun Message.privateContentMessageImplOrThrow(): PrivateContentMessageImpl = - this as PrivateContentMessageImpl - -@PreviewFeature -inline fun Message.ifChannelEventMessage(block: (ChannelEventMessage) -> T) = - channelEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.channelEventMessageOrNull(): ChannelEventMessage? = - this as? ChannelEventMessage - -@PreviewFeature -inline fun Message.channelEventMessageOrThrow(): ChannelEventMessage = - this as ChannelEventMessage - -@PreviewFeature -inline fun Message.ifChannelMediaGroupMessage(block: (ChannelMediaGroupMessage) -> T) = - channelMediaGroupMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.channelMediaGroupMessageOrNull(): ChannelMediaGroupMessage? = - this as? ChannelMediaGroupMessage - -@PreviewFeature -inline fun Message.channelMediaGroupMessageOrThrow(): ChannelMediaGroupMessage = - this as ChannelMediaGroupMessage - -@PreviewFeature -inline fun Message.ifCommonGroupEventMessage(block: (CommonGroupEventMessage) -> T) = - commonGroupEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.commonGroupEventMessageOrNull(): CommonGroupEventMessage? = - this as? CommonGroupEventMessage - -@PreviewFeature -inline fun Message.commonGroupEventMessageOrThrow(): CommonGroupEventMessage = - this as CommonGroupEventMessage - -@PreviewFeature -inline fun Message.ifCommonMediaGroupMessage(block: (CommonMediaGroupMessage) -> T) = - commonMediaGroupMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.commonMediaGroupMessageOrNull(): CommonMediaGroupMessage? = - this as? CommonMediaGroupMessage - -@PreviewFeature -inline fun Message.commonMediaGroupMessageOrThrow(): CommonMediaGroupMessage = - this as CommonMediaGroupMessage - -@PreviewFeature -inline fun Message.ifCommonSupergroupEventMessage(block: (CommonSupergroupEventMessage) -> T) = - commonSupergroupEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.commonSupergroupEventMessageOrNull(): CommonSupergroupEventMessage? = - this as? CommonSupergroupEventMessage - -@PreviewFeature -inline fun Message.commonSupergroupEventMessageOrThrow(): CommonSupergroupEventMessage = - this as CommonSupergroupEventMessage - -@PreviewFeature -inline fun Message.ifAnonymousGroupContentMessage(block: (AnonymousGroupContentMessage) -> T) = - anonymousGroupContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.anonymousGroupContentMessageOrNull(): AnonymousGroupContentMessage? = - this as? AnonymousGroupContentMessage - -@PreviewFeature -inline fun Message.anonymousGroupContentMessageOrThrow(): AnonymousGroupContentMessage = - this as AnonymousGroupContentMessage - -@PreviewFeature -inline fun Message.ifChannelContentMessage(block: (ChannelContentMessage) -> T) = - channelContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.channelContentMessageOrNull(): ChannelContentMessage? = - this as? ChannelContentMessage - -@PreviewFeature -inline fun Message.channelContentMessageOrThrow(): ChannelContentMessage = - this as ChannelContentMessage - -@PreviewFeature -inline fun Message.ifConnectedFromChannelGroupContentMessage(block: (ConnectedFromChannelGroupContentMessage) -> T) = - connectedFromChannelGroupContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.connectedFromChannelGroupContentMessageOrNull(): ConnectedFromChannelGroupContentMessage? = - this as? ConnectedFromChannelGroupContentMessage - -@PreviewFeature -inline fun Message.connectedFromChannelGroupContentMessageOrThrow(): ConnectedFromChannelGroupContentMessage = - this as ConnectedFromChannelGroupContentMessage - -@PreviewFeature -inline fun Message.ifUnconnectedFromChannelGroupContentMessage(block: (UnconnectedFromChannelGroupContentMessage) -> T) = - unconnectedFromChannelGroupContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.unconnectedFromChannelGroupContentMessageOrNull(): UnconnectedFromChannelGroupContentMessage? = - this as? UnconnectedFromChannelGroupContentMessage - -@PreviewFeature -inline fun Message.unconnectedFromChannelGroupContentMessageOrThrow(): UnconnectedFromChannelGroupContentMessage = - this as UnconnectedFromChannelGroupContentMessage - -@PreviewFeature -inline fun Message.ifChatEventMessage(block: (ChatEventMessage) -> T) = - chatEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.chatEventMessageOrNull(): ChatEventMessage? = this as? ChatEventMessage - -@PreviewFeature -inline fun Message.chatEventMessageOrThrow(): ChatEventMessage = this as ChatEventMessage - -@PreviewFeature -inline fun Message.ifCommonGroupContentMessage(block: (CommonGroupContentMessage) -> T) = - commonGroupContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.commonGroupContentMessageOrNull(): CommonGroupContentMessage? = - this as? CommonGroupContentMessage - -@PreviewFeature -inline fun Message.commonGroupContentMessageOrThrow(): CommonGroupContentMessage = - this as CommonGroupContentMessage - -@PreviewFeature -inline fun Message.ifCommonMessage(block: (CommonMessage) -> T) = commonMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.commonMessageOrNull(): CommonMessage? = this as? CommonMessage - -@PreviewFeature -inline fun Message.commonMessageOrThrow(): CommonMessage = this as CommonMessage - -@PreviewFeature -inline fun Message.ifContentMessage(block: (ContentMessage) -> T) = - contentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.contentMessageOrNull(): ContentMessage? = this as? ContentMessage - -@PreviewFeature -inline fun Message.contentMessageOrThrow(): ContentMessage = this as ContentMessage - -@PreviewFeature -inline fun Message.ifFromChannelGroupContentMessage(block: (FromChannelGroupContentMessage) -> T) = - fromChannelGroupContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.fromChannelGroupContentMessageOrNull(): FromChannelGroupContentMessage? = - this as? FromChannelGroupContentMessage - -@PreviewFeature -inline fun Message.fromChannelGroupContentMessageOrThrow(): FromChannelGroupContentMessage = - this as FromChannelGroupContentMessage - -@PreviewFeature -inline fun Message.ifGroupEventMessage(block: (GroupEventMessage) -> T) = - groupEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.groupEventMessageOrNull(): GroupEventMessage? = this as? GroupEventMessage - -@PreviewFeature -inline fun Message.groupEventMessageOrThrow(): GroupEventMessage = this as GroupEventMessage - -@PreviewFeature -inline fun Message.ifPrivateEventMessage(block: (PrivateEventMessage) -> T) = - privateEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.privateEventMessageOrNull(): PrivateEventMessage? = - this as? PrivateEventMessage - -@PreviewFeature -inline fun Message.privateEventMessageOrThrow(): PrivateEventMessage = - this as PrivateEventMessage - -@PreviewFeature -inline fun Message.ifGroupContentMessage(block: (GroupContentMessage) -> T) = - groupContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.groupContentMessageOrNull(): GroupContentMessage? = - this as? GroupContentMessage - -@PreviewFeature -inline fun Message.groupContentMessageOrThrow(): GroupContentMessage = - this as GroupContentMessage - -@PreviewFeature -inline fun Message.ifMediaGroupMessage(block: (MediaGroupMessage) -> T) = - mediaGroupMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.mediaGroupMessageOrNull(): MediaGroupMessage? = - this as? MediaGroupMessage - -@PreviewFeature -inline fun Message.mediaGroupMessageOrThrow(): MediaGroupMessage = - this as MediaGroupMessage - -@PreviewFeature -inline fun Message.ifPossiblyEditedMessage(block: (PossiblyEditedMessage) -> T) = - possiblyEditedMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.possiblyEditedMessageOrNull(): PossiblyEditedMessage? = this as? PossiblyEditedMessage - -@PreviewFeature -inline fun Message.possiblyEditedMessageOrThrow(): PossiblyEditedMessage = this as PossiblyEditedMessage - -@PreviewFeature -inline fun Message.ifPossiblyReplyMessage(block: (PossiblyReplyMessage) -> T) = - possiblyReplyMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.possiblyReplyMessageOrNull(): PossiblyReplyMessage? = this as? PossiblyReplyMessage - -@PreviewFeature -inline fun Message.possiblyReplyMessageOrThrow(): PossiblyReplyMessage = this as PossiblyReplyMessage - -@PreviewFeature -inline fun Message.ifPossiblyForwardedMessage(block: (PossiblyForwardedMessage) -> T) = - possiblyForwardedMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.possiblyForwardedMessageOrNull(): PossiblyForwardedMessage? = this as? PossiblyForwardedMessage - -@PreviewFeature -inline fun Message.possiblyForwardedMessageOrThrow(): PossiblyForwardedMessage = this as PossiblyForwardedMessage - -@PreviewFeature -inline fun Message.ifPossiblyPaymentMessage(block: (PossiblyPaymentMessage) -> T) = - possiblyPaymentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.possiblyPaymentMessageOrNull(): PossiblyPaymentMessage? = this as? PossiblyPaymentMessage - -@PreviewFeature -inline fun Message.possiblyPaymentMessageOrThrow(): PossiblyPaymentMessage = this as PossiblyPaymentMessage - -@PreviewFeature -inline fun Message.ifPrivateContentMessage(block: (PrivateContentMessage) -> T) = - privateContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.privateContentMessageOrNull(): PrivateContentMessage? = - this as? PrivateContentMessage - -@PreviewFeature -inline fun Message.privateContentMessageOrThrow(): PrivateContentMessage = - this as PrivateContentMessage - -@PreviewFeature -inline fun Message.ifPublicContentMessage(block: (PublicContentMessage) -> T) = - publicContentMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.publicContentMessageOrNull(): PublicContentMessage? = - this as? PublicContentMessage - -@PreviewFeature -inline fun Message.publicContentMessageOrThrow(): PublicContentMessage = - this as PublicContentMessage - -@PreviewFeature -inline fun Message.ifSignedMessage(block: (SignedMessage) -> T) = signedMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.signedMessageOrNull(): SignedMessage? = this as? SignedMessage - -@PreviewFeature -inline fun Message.signedMessageOrThrow(): SignedMessage = this as SignedMessage - -@PreviewFeature -inline fun Message.ifSupergroupEventMessage(block: (SupergroupEventMessage) -> T) = - supergroupEventMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.supergroupEventMessageOrNull(): SupergroupEventMessage? = - this as? SupergroupEventMessage - -@PreviewFeature -inline fun Message.supergroupEventMessageOrThrow(): SupergroupEventMessage = - this as SupergroupEventMessage - -@PreviewFeature -inline fun Message.ifUnknownMessageType(block: (UnknownMessageType) -> T) = unknownMessageTypeOrNull()?.let(block) - -@PreviewFeature -inline fun Message.unknownMessageTypeOrNull(): UnknownMessageType? = this as? UnknownMessageType - -@PreviewFeature -inline fun Message.unknownMessageTypeOrThrow(): UnknownMessageType = this as UnknownMessageType - -@PreviewFeature -inline fun Message.ifPossiblySentViaBotCommonMessage(block: (PossiblySentViaBotCommonMessage) -> T) = - possiblySentViaBotCommonMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.possiblySentViaBotCommonMessageOrNull(): PossiblySentViaBotCommonMessage? = - this as? PossiblySentViaBotCommonMessage - -@PreviewFeature -inline fun Message.possiblySentViaBotCommonMessageOrThrow(): PossiblySentViaBotCommonMessage = - this as PossiblySentViaBotCommonMessage - -@PreviewFeature -inline fun Message.ifFromUserMessage(block: (FromUserMessage) -> T) = fromUserMessageOrNull()?.let(block) - -@PreviewFeature -inline fun Message.fromUserMessageOrNull(): FromUserMessage? = this as? FromUserMessage - -@PreviewFeature -inline fun Message.fromUserMessageOrThrow(): FromUserMessage = this as FromUserMessage - -@PreviewFeature -inline fun BotAction.ifFindLocationAction(block: (FindLocationAction) -> T) = findLocationActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.findLocationActionOrNull(): FindLocationAction? = this as? FindLocationAction - -@PreviewFeature -inline fun BotAction.findLocationActionOrThrow(): FindLocationAction = this as FindLocationAction - -@PreviewFeature -inline fun BotAction.ifRecordVoiceAction(block: (RecordVoiceAction) -> T) = recordVoiceActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.recordVoiceActionOrNull(): RecordVoiceAction? = this as? RecordVoiceAction - -@PreviewFeature -inline fun BotAction.recordVoiceActionOrThrow(): RecordVoiceAction = this as RecordVoiceAction - -@PreviewFeature -inline fun BotAction.ifRecordVideoAction(block: (RecordVideoAction) -> T) = recordVideoActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.recordVideoActionOrNull(): RecordVideoAction? = this as? RecordVideoAction - -@PreviewFeature -inline fun BotAction.recordVideoActionOrThrow(): RecordVideoAction = this as RecordVideoAction - -@PreviewFeature -inline fun BotAction.ifRecordVideoNoteAction(block: (RecordVideoNoteAction) -> T) = - recordVideoNoteActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.recordVideoNoteActionOrNull(): RecordVideoNoteAction? = this as? RecordVideoNoteAction - -@PreviewFeature -inline fun BotAction.recordVideoNoteActionOrThrow(): RecordVideoNoteAction = this as RecordVideoNoteAction - -@PreviewFeature -inline fun BotAction.ifTypingAction(block: (TypingAction) -> T) = typingActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.typingActionOrNull(): TypingAction? = this as? TypingAction - -@PreviewFeature -inline fun BotAction.typingActionOrThrow(): TypingAction = this as TypingAction - -@PreviewFeature -inline fun BotAction.ifChooseStickerAction(block: (ChooseStickerAction) -> T) = - chooseStickerActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.chooseStickerActionOrNull(): ChooseStickerAction? = this as? ChooseStickerAction - -@PreviewFeature -inline fun BotAction.chooseStickerActionOrThrow(): ChooseStickerAction = this as ChooseStickerAction - -@PreviewFeature -inline fun BotAction.ifUploadVoiceAction(block: (UploadVoiceAction) -> T) = uploadVoiceActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.uploadVoiceActionOrNull(): UploadVoiceAction? = this as? UploadVoiceAction - -@PreviewFeature -inline fun BotAction.uploadVoiceActionOrThrow(): UploadVoiceAction = this as UploadVoiceAction - -@PreviewFeature -inline fun BotAction.ifUploadDocumentAction(block: (UploadDocumentAction) -> T) = - uploadDocumentActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.uploadDocumentActionOrNull(): UploadDocumentAction? = this as? UploadDocumentAction - -@PreviewFeature -inline fun BotAction.uploadDocumentActionOrThrow(): UploadDocumentAction = this as UploadDocumentAction - -@PreviewFeature -inline fun BotAction.ifUploadPhotoAction(block: (UploadPhotoAction) -> T) = uploadPhotoActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.uploadPhotoActionOrNull(): UploadPhotoAction? = this as? UploadPhotoAction - -@PreviewFeature -inline fun BotAction.uploadPhotoActionOrThrow(): UploadPhotoAction = this as UploadPhotoAction - -@PreviewFeature -inline fun BotAction.ifUploadVideoAction(block: (UploadVideoAction) -> T) = uploadVideoActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.uploadVideoActionOrNull(): UploadVideoAction? = this as? UploadVideoAction - -@PreviewFeature -inline fun BotAction.uploadVideoActionOrThrow(): UploadVideoAction = this as UploadVideoAction - -@PreviewFeature -inline fun BotAction.ifUploadVideoNoteAction(block: (UploadVideoNoteAction) -> T) = - uploadVideoNoteActionOrNull()?.let(block) - -@PreviewFeature -inline fun BotAction.uploadVideoNoteActionOrNull(): UploadVideoNoteAction? = this as? UploadVideoNoteAction - -@PreviewFeature -inline fun BotAction.uploadVideoNoteActionOrThrow(): UploadVideoNoteAction = this as UploadVideoNoteAction - -@PreviewFeature -inline fun InlineQuery.ifBaseInlineQuery(block: (BaseInlineQuery) -> T) = baseInlineQueryOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQuery.baseInlineQueryOrNull(): BaseInlineQuery? = - this as? BaseInlineQuery - -@PreviewFeature -inline fun InlineQuery.baseInlineQueryOrThrow(): BaseInlineQuery = - this as BaseInlineQuery - -@PreviewFeature -inline fun InlineQuery.ifLocationInlineQuery(block: (LocationInlineQuery) -> T) = - locationInlineQueryOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQuery.locationInlineQueryOrNull(): LocationInlineQuery? = - this as? LocationInlineQuery - -@PreviewFeature -inline fun InlineQuery.locationInlineQueryOrThrow(): LocationInlineQuery = - this as LocationInlineQuery - -@PreviewFeature -inline fun InputMessageContent.ifInputContactMessageContent(block: (InputContactMessageContent) -> T) = - inputContactMessageContentOrNull()?.let(block) - -@PreviewFeature -inline fun InputMessageContent.inputContactMessageContentOrNull(): InputContactMessageContent? = - this as? InputContactMessageContent - -@PreviewFeature -inline fun InputMessageContent.inputContactMessageContentOrThrow(): InputContactMessageContent = - this as InputContactMessageContent - -@PreviewFeature -inline fun InputMessageContent.ifInputLocationMessageContent(block: (InputLocationMessageContent) -> T) = - inputLocationMessageContentOrNull()?.let(block) - -@PreviewFeature -inline fun InputMessageContent.inputLocationMessageContentOrNull(): InputLocationMessageContent? = - this as? InputLocationMessageContent - -@PreviewFeature -inline fun InputMessageContent.inputLocationMessageContentOrThrow(): InputLocationMessageContent = - this as InputLocationMessageContent - -@PreviewFeature -inline fun InputMessageContent.ifInputTextMessageContent(block: (InputTextMessageContent) -> T) = - inputTextMessageContentOrNull()?.let(block) - -@PreviewFeature -inline fun InputMessageContent.inputTextMessageContentOrNull(): InputTextMessageContent? = - this as? InputTextMessageContent - -@PreviewFeature -inline fun InputMessageContent.inputTextMessageContentOrThrow(): InputTextMessageContent = - this as InputTextMessageContent - -@PreviewFeature -inline fun InputMessageContent.ifInputVenueMessageContent(block: (InputVenueMessageContent) -> T) = - inputVenueMessageContentOrNull()?.let(block) - -@PreviewFeature -inline fun InputMessageContent.inputVenueMessageContentOrNull(): InputVenueMessageContent? = - this as? InputVenueMessageContent - -@PreviewFeature -inline fun InputMessageContent.inputVenueMessageContentOrThrow(): InputVenueMessageContent = - this as InputVenueMessageContent - -@PreviewFeature -inline fun InputMessageContent.ifInputInvoiceMessageContent(block: (InputInvoiceMessageContent) -> T) = - inputInvoiceMessageContentOrNull()?.let(block) - -@PreviewFeature -inline fun InputMessageContent.inputInvoiceMessageContentOrNull(): InputInvoiceMessageContent? = - this as? InputInvoiceMessageContent - -@PreviewFeature -inline fun InputMessageContent.inputInvoiceMessageContentOrThrow(): InputInvoiceMessageContent = - this as InputInvoiceMessageContent - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultArticle(block: (InlineQueryResultArticle) -> T) = - inlineQueryResultArticleOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultArticleOrNull(): InlineQueryResultArticle? = - this as? InlineQueryResultArticle - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultArticleOrThrow(): InlineQueryResultArticle = - this as InlineQueryResultArticle - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultContact(block: (InlineQueryResultContact) -> T) = - inlineQueryResultContactOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultContactOrNull(): InlineQueryResultContact? = - this as? InlineQueryResultContact - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultContactOrThrow(): InlineQueryResultContact = - this as InlineQueryResultContact - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultGame(block: (InlineQueryResultGame) -> T) = - inlineQueryResultGameOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGameOrNull(): InlineQueryResultGame? = this as? InlineQueryResultGame - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGameOrThrow(): InlineQueryResultGame = this as InlineQueryResultGame - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultLocation(block: (InlineQueryResultLocation) -> T) = - inlineQueryResultLocationOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultLocationOrNull(): InlineQueryResultLocation? = - this as? InlineQueryResultLocation - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultLocationOrThrow(): InlineQueryResultLocation = - this as InlineQueryResultLocation - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultStickerCached(block: (InlineQueryResultStickerCached) -> T) = - inlineQueryResultStickerCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultStickerCachedOrNull(): InlineQueryResultStickerCached? = - this as? InlineQueryResultStickerCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultStickerCachedOrThrow(): InlineQueryResultStickerCached = - this as InlineQueryResultStickerCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVenue(block: (InlineQueryResultVenue) -> T) = - inlineQueryResultVenueOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVenueOrNull(): InlineQueryResultVenue? = this as? InlineQueryResultVenue - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVenueOrThrow(): InlineQueryResultVenue = this as InlineQueryResultVenue - -@PreviewFeature -inline fun InlineQueryResult.ifDescribedInlineQueryResult(block: (DescribedInlineQueryResult) -> T) = - describedInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.describedInlineQueryResultOrNull(): DescribedInlineQueryResult? = - this as? DescribedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.describedInlineQueryResultOrThrow(): DescribedInlineQueryResult = - this as DescribedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifFileInlineQueryResult(block: (FileInlineQueryResult) -> T) = - fileInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.fileInlineQueryResultOrNull(): FileInlineQueryResult? = this as? FileInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.fileInlineQueryResultOrThrow(): FileInlineQueryResult = this as FileInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifOptionallyTitledInlineQueryResult(block: (OptionallyTitledInlineQueryResult) -> T) = - optionallyTitledInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.optionallyTitledInlineQueryResultOrNull(): OptionallyTitledInlineQueryResult? = - this as? OptionallyTitledInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.optionallyTitledInlineQueryResultOrThrow(): OptionallyTitledInlineQueryResult = - this as OptionallyTitledInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifSizedInlineQueryResult(block: (SizedInlineQueryResult) -> T) = - sizedInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.sizedInlineQueryResultOrNull(): SizedInlineQueryResult? = this as? SizedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.sizedInlineQueryResultOrThrow(): SizedInlineQueryResult = this as SizedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifThumbSizedInlineQueryResult(block: (ThumbSizedInlineQueryResult) -> T) = - thumbSizedInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.thumbSizedInlineQueryResultOrNull(): ThumbSizedInlineQueryResult? = - this as? ThumbSizedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.thumbSizedInlineQueryResultOrThrow(): ThumbSizedInlineQueryResult = - this as ThumbSizedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifThumbedInlineQueryResult(block: (ThumbedInlineQueryResult) -> T) = - thumbedInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.thumbedInlineQueryResultOrNull(): ThumbedInlineQueryResult? = - this as? ThumbedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.thumbedInlineQueryResultOrThrow(): ThumbedInlineQueryResult = - this as ThumbedInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifThumbedWithMimeTypeInlineQueryResult(block: (ThumbedWithMimeTypeInlineQueryResult) -> T) = - thumbedWithMimeTypeInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.thumbedWithMimeTypeInlineQueryResultOrNull(): ThumbedWithMimeTypeInlineQueryResult? = - this as? ThumbedWithMimeTypeInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.thumbedWithMimeTypeInlineQueryResultOrThrow(): ThumbedWithMimeTypeInlineQueryResult = - this as ThumbedWithMimeTypeInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifTitledInlineQueryResult(block: (TitledInlineQueryResult) -> T) = - titledInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.titledInlineQueryResultOrNull(): TitledInlineQueryResult? = - this as? TitledInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.titledInlineQueryResultOrThrow(): TitledInlineQueryResult = this as TitledInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifUrlInlineQueryResult(block: (UrlInlineQueryResult) -> T) = - urlInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.urlInlineQueryResultOrNull(): UrlInlineQueryResult? = this as? UrlInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.urlInlineQueryResultOrThrow(): UrlInlineQueryResult = this as UrlInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifWithInputMessageContentInlineQueryResult(block: (WithInputMessageContentInlineQueryResult) -> T) = - withInputMessageContentInlineQueryResultOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.withInputMessageContentInlineQueryResultOrNull(): WithInputMessageContentInlineQueryResult? = - this as? WithInputMessageContentInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.withInputMessageContentInlineQueryResultOrThrow(): WithInputMessageContentInlineQueryResult = - this as WithInputMessageContentInlineQueryResult - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultAudio(block: (InlineQueryResultAudio) -> T) = - inlineQueryResultAudioOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultAudioOrNull(): InlineQueryResultAudio? = this as? InlineQueryResultAudio - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultAudioOrThrow(): InlineQueryResultAudio = this as InlineQueryResultAudio - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultAudioCached(block: (InlineQueryResultAudioCached) -> T) = - inlineQueryResultAudioCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultAudioCachedOrNull(): InlineQueryResultAudioCached? = - this as? InlineQueryResultAudioCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultAudioCachedOrThrow(): InlineQueryResultAudioCached = - this as InlineQueryResultAudioCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultAudioCommon(block: (InlineQueryResultAudioCommon) -> T) = - inlineQueryResultAudioCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultAudioCommonOrNull(): InlineQueryResultAudioCommon? = - this as? InlineQueryResultAudioCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultAudioCommonOrThrow(): InlineQueryResultAudioCommon = - this as InlineQueryResultAudioCommon - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultDocument(block: (InlineQueryResultDocument) -> T) = - inlineQueryResultDocumentOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultDocumentOrNull(): InlineQueryResultDocument? = - this as? InlineQueryResultDocument - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultDocumentOrThrow(): InlineQueryResultDocument = - this as InlineQueryResultDocument - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultDocumentCached(block: (InlineQueryResultDocumentCached) -> T) = - inlineQueryResultDocumentCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultDocumentCachedOrNull(): InlineQueryResultDocumentCached? = - this as? InlineQueryResultDocumentCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultDocumentCachedOrThrow(): InlineQueryResultDocumentCached = - this as InlineQueryResultDocumentCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultDocumentCommon(block: (InlineQueryResultDocumentCommon) -> T) = - inlineQueryResultDocumentCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultDocumentCommonOrNull(): InlineQueryResultDocumentCommon? = - this as? InlineQueryResultDocumentCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultDocumentCommonOrThrow(): InlineQueryResultDocumentCommon = - this as InlineQueryResultDocumentCommon - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultGif(block: (InlineQueryResultGif) -> T) = - inlineQueryResultGifOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGifOrNull(): InlineQueryResultGif? = this as? InlineQueryResultGif - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGifOrThrow(): InlineQueryResultGif = this as InlineQueryResultGif - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultGifCached(block: (InlineQueryResultGifCached) -> T) = - inlineQueryResultGifCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGifCachedOrNull(): InlineQueryResultGifCached? = - this as? InlineQueryResultGifCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGifCachedOrThrow(): InlineQueryResultGifCached = - this as InlineQueryResultGifCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultGifCommon(block: (InlineQueryResultGifCommon) -> T) = - inlineQueryResultGifCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGifCommonOrNull(): InlineQueryResultGifCommon? = - this as? InlineQueryResultGifCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultGifCommonOrThrow(): InlineQueryResultGifCommon = - this as InlineQueryResultGifCommon - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultMpeg4Gif(block: (InlineQueryResultMpeg4Gif) -> T) = - inlineQueryResultMpeg4GifOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultMpeg4GifOrNull(): InlineQueryResultMpeg4Gif? = - this as? InlineQueryResultMpeg4Gif - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultMpeg4GifOrThrow(): InlineQueryResultMpeg4Gif = - this as InlineQueryResultMpeg4Gif - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultMpeg4GifCached(block: (InlineQueryResultMpeg4GifCached) -> T) = - inlineQueryResultMpeg4GifCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultMpeg4GifCachedOrNull(): InlineQueryResultMpeg4GifCached? = - this as? InlineQueryResultMpeg4GifCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultMpeg4GifCachedOrThrow(): InlineQueryResultMpeg4GifCached = - this as InlineQueryResultMpeg4GifCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultMpeg4GifCommon(block: (InlineQueryResultMpeg4GifCommon) -> T) = - inlineQueryResultMpeg4GifCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultMpeg4GifCommonOrNull(): InlineQueryResultMpeg4GifCommon? = - this as? InlineQueryResultMpeg4GifCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultMpeg4GifCommonOrThrow(): InlineQueryResultMpeg4GifCommon = - this as InlineQueryResultMpeg4GifCommon - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultPhoto(block: (InlineQueryResultPhoto) -> T) = - inlineQueryResultPhotoOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultPhotoOrNull(): InlineQueryResultPhoto? = this as? InlineQueryResultPhoto - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultPhotoOrThrow(): InlineQueryResultPhoto = this as InlineQueryResultPhoto - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultPhotoCached(block: (InlineQueryResultPhotoCached) -> T) = - inlineQueryResultPhotoCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultPhotoCachedOrNull(): InlineQueryResultPhotoCached? = - this as? InlineQueryResultPhotoCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultPhotoCachedOrThrow(): InlineQueryResultPhotoCached = - this as InlineQueryResultPhotoCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultPhotoCommon(block: (InlineQueryResultPhotoCommon) -> T) = - inlineQueryResultPhotoCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultPhotoCommonOrNull(): InlineQueryResultPhotoCommon? = - this as? InlineQueryResultPhotoCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultPhotoCommonOrThrow(): InlineQueryResultPhotoCommon = - this as InlineQueryResultPhotoCommon - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVideo(block: (InlineQueryResultVideo) -> T) = - inlineQueryResultVideoOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVideoOrNull(): InlineQueryResultVideo? = this as? InlineQueryResultVideo - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVideoOrThrow(): InlineQueryResultVideo = this as InlineQueryResultVideo - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVideoCached(block: (InlineQueryResultVideoCached) -> T) = - inlineQueryResultVideoCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVideoCachedOrNull(): InlineQueryResultVideoCached? = - this as? InlineQueryResultVideoCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVideoCachedOrThrow(): InlineQueryResultVideoCached = - this as InlineQueryResultVideoCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVideoCommon(block: (InlineQueryResultVideoCommon) -> T) = - inlineQueryResultVideoCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVideoCommonOrNull(): InlineQueryResultVideoCommon? = - this as? InlineQueryResultVideoCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVideoCommonOrThrow(): InlineQueryResultVideoCommon = - this as InlineQueryResultVideoCommon - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVoice(block: (InlineQueryResultVoice) -> T) = - inlineQueryResultVoiceOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVoiceOrNull(): InlineQueryResultVoice? = this as? InlineQueryResultVoice - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVoiceOrThrow(): InlineQueryResultVoice = this as InlineQueryResultVoice - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVoiceCached(block: (InlineQueryResultVoiceCached) -> T) = - inlineQueryResultVoiceCachedOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVoiceCachedOrNull(): InlineQueryResultVoiceCached? = - this as? InlineQueryResultVoiceCached - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVoiceCachedOrThrow(): InlineQueryResultVoiceCached = - this as InlineQueryResultVoiceCached - -@PreviewFeature -inline fun InlineQueryResult.ifInlineQueryResultVoiceCommon(block: (InlineQueryResultVoiceCommon) -> T) = - inlineQueryResultVoiceCommonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVoiceCommonOrNull(): InlineQueryResultVoiceCommon? = - this as? InlineQueryResultVoiceCommon - -@PreviewFeature -inline fun InlineQueryResult.inlineQueryResultVoiceCommonOrThrow(): InlineQueryResultVoiceCommon = - this as InlineQueryResultVoiceCommon - -@PreviewFeature -inline fun ChatMember.ifOwnerChatMember(block: (OwnerChatMember) -> T) = ownerChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.ownerChatMemberOrNull(): OwnerChatMember? = this as? OwnerChatMember - -@PreviewFeature -inline fun ChatMember.ownerChatMemberOrThrow(): OwnerChatMember = this as OwnerChatMember - -@PreviewFeature -inline fun ChatMember.ifKickedChatMember(block: (KickedChatMember) -> T) = kickedChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.kickedChatMemberOrNull(): KickedChatMember? = this as? KickedChatMember - -@PreviewFeature -inline fun ChatMember.kickedChatMemberOrThrow(): KickedChatMember = this as KickedChatMember - -@PreviewFeature -inline fun ChatMember.ifLeftChatMember(block: (LeftChatMember) -> T) = leftChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.leftChatMemberOrNull(): LeftChatMember? = this as? LeftChatMember - -@PreviewFeature -inline fun ChatMember.leftChatMemberOrThrow(): LeftChatMember = this as LeftChatMember - -@PreviewFeature -inline fun ChatMember.ifMemberChatMember(block: (MemberChatMember) -> T) = memberChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.memberChatMemberOrNull(): MemberChatMember? = this as? MemberChatMember - -@PreviewFeature -inline fun ChatMember.memberChatMemberOrThrow(): MemberChatMember = this as MemberChatMember - -@PreviewFeature -inline fun ChatMember.ifRestrictedChatMember(block: (RestrictedChatMember) -> T) = - restrictedChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.restrictedChatMemberOrNull(): RestrictedChatMember? = this as? RestrictedChatMember - -@PreviewFeature -inline fun ChatMember.restrictedChatMemberOrThrow(): RestrictedChatMember = this as RestrictedChatMember - -@PreviewFeature -inline fun ChatMember.ifAdministratorChatMember(block: (AdministratorChatMember) -> T) = - administratorChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.administratorChatMemberOrNull(): AdministratorChatMember? = this as? AdministratorChatMember - -@PreviewFeature -inline fun ChatMember.administratorChatMemberOrThrow(): AdministratorChatMember = this as AdministratorChatMember - -@PreviewFeature -inline fun ChatMember.ifBannedChatMember(block: (BannedChatMember) -> T) = bannedChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.bannedChatMemberOrNull(): BannedChatMember? = this as? BannedChatMember - -@PreviewFeature -inline fun ChatMember.bannedChatMemberOrThrow(): BannedChatMember = this as BannedChatMember - -@PreviewFeature -inline fun ChatMember.ifSpecialRightsChatMember(block: (SpecialRightsChatMember) -> T) = - specialRightsChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatMember.specialRightsChatMemberOrNull(): SpecialRightsChatMember? = this as? SpecialRightsChatMember - -@PreviewFeature -inline fun ChatMember.specialRightsChatMemberOrThrow(): SpecialRightsChatMember = this as SpecialRightsChatMember - -@PreviewFeature -inline fun TelegramMedia.ifAudioMediaGroupMemberTelegramMedia(block: (AudioMediaGroupMemberTelegramMedia) -> T) = - audioMediaGroupMemberTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.audioMediaGroupMemberTelegramMediaOrNull(): AudioMediaGroupMemberTelegramMedia? = - this as? AudioMediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.audioMediaGroupMemberTelegramMediaOrThrow(): AudioMediaGroupMemberTelegramMedia = - this as AudioMediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifDocumentMediaGroupMemberTelegramMedia(block: (DocumentMediaGroupMemberTelegramMedia) -> T) = - documentMediaGroupMemberTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.documentMediaGroupMemberTelegramMediaOrNull(): DocumentMediaGroupMemberTelegramMedia? = - this as? DocumentMediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.documentMediaGroupMemberTelegramMediaOrThrow(): DocumentMediaGroupMemberTelegramMedia = - this as DocumentMediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifDuratedTelegramMedia(block: (DuratedTelegramMedia) -> T) = - duratedTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.duratedTelegramMediaOrNull(): DuratedTelegramMedia? = this as? DuratedTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.duratedTelegramMediaOrThrow(): DuratedTelegramMedia = this as DuratedTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifTelegramMediaAnimation(block: (TelegramMediaAnimation) -> T) = - telegramMediaAnimationOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.telegramMediaAnimationOrNull(): TelegramMediaAnimation? = this as? TelegramMediaAnimation - -@PreviewFeature -inline fun TelegramMedia.telegramMediaAnimationOrThrow(): TelegramMediaAnimation = this as TelegramMediaAnimation - -@PreviewFeature -inline fun TelegramMedia.ifTelegramMediaAudio(block: (TelegramMediaAudio) -> T) = - telegramMediaAudioOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.telegramMediaAudioOrNull(): TelegramMediaAudio? = this as? TelegramMediaAudio - -@PreviewFeature -inline fun TelegramMedia.telegramMediaAudioOrThrow(): TelegramMediaAudio = this as TelegramMediaAudio - -@PreviewFeature -inline fun TelegramMedia.ifTelegramMediaDocument(block: (TelegramMediaDocument) -> T) = - telegramMediaDocumentOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.telegramMediaDocumentOrNull(): TelegramMediaDocument? = this as? TelegramMediaDocument - -@PreviewFeature -inline fun TelegramMedia.telegramMediaDocumentOrThrow(): TelegramMediaDocument = this as TelegramMediaDocument - -@PreviewFeature -inline fun TelegramMedia.ifTelegramMediaPhoto(block: (TelegramMediaPhoto) -> T) = - telegramMediaPhotoOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.telegramMediaPhotoOrNull(): TelegramMediaPhoto? = this as? TelegramMediaPhoto - -@PreviewFeature -inline fun TelegramMedia.telegramMediaPhotoOrThrow(): TelegramMediaPhoto = this as TelegramMediaPhoto - -@PreviewFeature -inline fun TelegramMedia.ifTelegramMediaVideo(block: (TelegramMediaVideo) -> T) = - telegramMediaVideoOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.telegramMediaVideoOrNull(): TelegramMediaVideo? = this as? TelegramMediaVideo - -@PreviewFeature -inline fun TelegramMedia.telegramMediaVideoOrThrow(): TelegramMediaVideo = this as TelegramMediaVideo - -@PreviewFeature -inline fun TelegramMedia.ifMediaGroupMemberTelegramMedia(block: (MediaGroupMemberTelegramMedia) -> T) = - mediaGroupMemberTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.mediaGroupMemberTelegramMediaOrNull(): MediaGroupMemberTelegramMedia? = - this as? MediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.mediaGroupMemberTelegramMediaOrThrow(): MediaGroupMemberTelegramMedia = - this as MediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifSizedTelegramMedia(block: (SizedTelegramMedia) -> T) = - sizedTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.sizedTelegramMediaOrNull(): SizedTelegramMedia? = this as? SizedTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.sizedTelegramMediaOrThrow(): SizedTelegramMedia = this as SizedTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifThumbedTelegramMedia(block: (ThumbedTelegramMedia) -> T) = - thumbedTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.thumbedTelegramMediaOrNull(): ThumbedTelegramMedia? = this as? ThumbedTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.thumbedTelegramMediaOrThrow(): ThumbedTelegramMedia = this as ThumbedTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifTitledTelegramMedia(block: (TitledTelegramMedia) -> T) = - titledTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.titledTelegramMediaOrNull(): TitledTelegramMedia? = this as? TitledTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.titledTelegramMediaOrThrow(): TitledTelegramMedia = this as TitledTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.ifVisualMediaGroupMemberTelegramMedia(block: (VisualMediaGroupMemberTelegramMedia) -> T) = - visualMediaGroupMemberTelegramMediaOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMedia.visualMediaGroupMemberTelegramMediaOrNull(): VisualMediaGroupMemberTelegramMedia? = - this as? VisualMediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun TelegramMedia.visualMediaGroupMemberTelegramMediaOrThrow(): VisualMediaGroupMemberTelegramMedia = - this as VisualMediaGroupMemberTelegramMedia - -@PreviewFeature -inline fun Update.ifCallbackQueryUpdate(block: (CallbackQueryUpdate) -> T) = callbackQueryUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.callbackQueryUpdateOrNull(): CallbackQueryUpdate? = this as? CallbackQueryUpdate - -@PreviewFeature -inline fun Update.callbackQueryUpdateOrThrow(): CallbackQueryUpdate = this as CallbackQueryUpdate - -@PreviewFeature -inline fun Update.ifChannelPostUpdate(block: (ChannelPostUpdate) -> T) = channelPostUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.channelPostUpdateOrNull(): ChannelPostUpdate? = this as? ChannelPostUpdate - -@PreviewFeature -inline fun Update.channelPostUpdateOrThrow(): ChannelPostUpdate = this as ChannelPostUpdate - -@PreviewFeature -inline fun Update.ifChosenInlineResultUpdate(block: (ChosenInlineResultUpdate) -> T) = - chosenInlineResultUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.chosenInlineResultUpdateOrNull(): ChosenInlineResultUpdate? = this as? ChosenInlineResultUpdate - -@PreviewFeature -inline fun Update.chosenInlineResultUpdateOrThrow(): ChosenInlineResultUpdate = this as ChosenInlineResultUpdate - -@PreviewFeature -inline fun Update.ifEditChannelPostUpdate(block: (EditChannelPostUpdate) -> T) = - editChannelPostUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.editChannelPostUpdateOrNull(): EditChannelPostUpdate? = this as? EditChannelPostUpdate - -@PreviewFeature -inline fun Update.editChannelPostUpdateOrThrow(): EditChannelPostUpdate = this as EditChannelPostUpdate - -@PreviewFeature -inline fun Update.ifEditMessageUpdate(block: (EditMessageUpdate) -> T) = editMessageUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.editMessageUpdateOrNull(): EditMessageUpdate? = this as? EditMessageUpdate - -@PreviewFeature -inline fun Update.editMessageUpdateOrThrow(): EditMessageUpdate = this as EditMessageUpdate - -@PreviewFeature -inline fun Update.ifInlineQueryUpdate(block: (InlineQueryUpdate) -> T) = inlineQueryUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.inlineQueryUpdateOrNull(): InlineQueryUpdate? = this as? InlineQueryUpdate - -@PreviewFeature -inline fun Update.inlineQueryUpdateOrThrow(): InlineQueryUpdate = this as InlineQueryUpdate - -@PreviewFeature -inline fun Update.ifChannelPostMediaGroupUpdate(block: (ChannelPostMediaGroupUpdate) -> T) = - channelPostMediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.channelPostMediaGroupUpdateOrNull(): ChannelPostMediaGroupUpdate? = - this as? ChannelPostMediaGroupUpdate - -@PreviewFeature -inline fun Update.channelPostMediaGroupUpdateOrThrow(): ChannelPostMediaGroupUpdate = - this as ChannelPostMediaGroupUpdate - -@PreviewFeature -inline fun Update.ifEditChannelPostMediaGroupUpdate(block: (EditChannelPostMediaGroupUpdate) -> T) = - editChannelPostMediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.editChannelPostMediaGroupUpdateOrNull(): EditChannelPostMediaGroupUpdate? = - this as? EditChannelPostMediaGroupUpdate - -@PreviewFeature -inline fun Update.editChannelPostMediaGroupUpdateOrThrow(): EditChannelPostMediaGroupUpdate = - this as EditChannelPostMediaGroupUpdate - -@PreviewFeature -inline fun Update.ifEditMediaGroupUpdate(block: (EditMediaGroupUpdate) -> T) = - editMediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.editMediaGroupUpdateOrNull(): EditMediaGroupUpdate? = this as? EditMediaGroupUpdate - -@PreviewFeature -inline fun Update.editMediaGroupUpdateOrThrow(): EditMediaGroupUpdate = this as EditMediaGroupUpdate - -@PreviewFeature -inline fun Update.ifEditMessageMediaGroupUpdate(block: (EditMessageMediaGroupUpdate) -> T) = - editMessageMediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.editMessageMediaGroupUpdateOrNull(): EditMessageMediaGroupUpdate? = - this as? EditMessageMediaGroupUpdate - -@PreviewFeature -inline fun Update.editMessageMediaGroupUpdateOrThrow(): EditMessageMediaGroupUpdate = - this as EditMessageMediaGroupUpdate - -@PreviewFeature -inline fun Update.ifMediaGroupUpdate(block: (MediaGroupUpdate) -> T) = mediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.mediaGroupUpdateOrNull(): MediaGroupUpdate? = this as? MediaGroupUpdate - -@PreviewFeature -inline fun Update.mediaGroupUpdateOrThrow(): MediaGroupUpdate = this as MediaGroupUpdate - -@PreviewFeature -inline fun Update.ifMessageMediaGroupUpdate(block: (MessageMediaGroupUpdate) -> T) = - messageMediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.messageMediaGroupUpdateOrNull(): MessageMediaGroupUpdate? = this as? MessageMediaGroupUpdate - -@PreviewFeature -inline fun Update.messageMediaGroupUpdateOrThrow(): MessageMediaGroupUpdate = this as MessageMediaGroupUpdate - -@PreviewFeature -inline fun Update.ifSentMediaGroupUpdate(block: (SentMediaGroupUpdate) -> T) = - sentMediaGroupUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.sentMediaGroupUpdateOrNull(): SentMediaGroupUpdate? = this as? SentMediaGroupUpdate - -@PreviewFeature -inline fun Update.sentMediaGroupUpdateOrThrow(): SentMediaGroupUpdate = this as SentMediaGroupUpdate - -@PreviewFeature -inline fun Update.ifMessageUpdate(block: (MessageUpdate) -> T) = messageUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.messageUpdateOrNull(): MessageUpdate? = this as? MessageUpdate - -@PreviewFeature -inline fun Update.messageUpdateOrThrow(): MessageUpdate = this as MessageUpdate - -@PreviewFeature -inline fun Update.ifPollAnswerUpdate(block: (PollAnswerUpdate) -> T) = pollAnswerUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.pollAnswerUpdateOrNull(): PollAnswerUpdate? = this as? PollAnswerUpdate - -@PreviewFeature -inline fun Update.pollAnswerUpdateOrThrow(): PollAnswerUpdate = this as PollAnswerUpdate - -@PreviewFeature -inline fun Update.ifPollUpdate(block: (PollUpdate) -> T) = pollUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.pollUpdateOrNull(): PollUpdate? = this as? PollUpdate - -@PreviewFeature -inline fun Update.pollUpdateOrThrow(): PollUpdate = this as PollUpdate - -@PreviewFeature -inline fun Update.ifPreCheckoutQueryUpdate(block: (PreCheckoutQueryUpdate) -> T) = - preCheckoutQueryUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.preCheckoutQueryUpdateOrNull(): PreCheckoutQueryUpdate? = this as? PreCheckoutQueryUpdate - -@PreviewFeature -inline fun Update.preCheckoutQueryUpdateOrThrow(): PreCheckoutQueryUpdate = this as PreCheckoutQueryUpdate - -@PreviewFeature -inline fun Update.ifShippingQueryUpdate(block: (ShippingQueryUpdate) -> T) = shippingQueryUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.shippingQueryUpdateOrNull(): ShippingQueryUpdate? = this as? ShippingQueryUpdate - -@PreviewFeature -inline fun Update.shippingQueryUpdateOrThrow(): ShippingQueryUpdate = this as ShippingQueryUpdate - -@PreviewFeature -inline fun Update.ifBaseEditMessageUpdate(block: (BaseEditMessageUpdate) -> T) = - baseEditMessageUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.baseEditMessageUpdateOrNull(): BaseEditMessageUpdate? = this as? BaseEditMessageUpdate - -@PreviewFeature -inline fun Update.baseEditMessageUpdateOrThrow(): BaseEditMessageUpdate = this as BaseEditMessageUpdate - -@PreviewFeature -inline fun Update.ifBaseMessageUpdate(block: (BaseMessageUpdate) -> T) = baseMessageUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.baseMessageUpdateOrNull(): BaseMessageUpdate? = this as? BaseMessageUpdate - -@PreviewFeature -inline fun Update.baseMessageUpdateOrThrow(): BaseMessageUpdate = this as BaseMessageUpdate - -@PreviewFeature -inline fun Update.ifBaseSentMessageUpdate(block: (BaseSentMessageUpdate) -> T) = - baseSentMessageUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.baseSentMessageUpdateOrNull(): BaseSentMessageUpdate? = this as? BaseSentMessageUpdate - -@PreviewFeature -inline fun Update.baseSentMessageUpdateOrThrow(): BaseSentMessageUpdate = this as BaseSentMessageUpdate - -@PreviewFeature -inline fun Update.ifUnknownUpdate(block: (UnknownUpdate) -> T) = unknownUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.unknownUpdateOrNull(): UnknownUpdate? = this as? UnknownUpdate - -@PreviewFeature -inline fun Update.unknownUpdateOrThrow(): UnknownUpdate = this as UnknownUpdate - -@PreviewFeature -inline fun Update.ifCommonChatMemberUpdatedUpdate(block: (CommonChatMemberUpdatedUpdate) -> T) = - commonChatMemberUpdatedUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.commonChatMemberUpdatedUpdateOrNull(): CommonChatMemberUpdatedUpdate? = - this as? CommonChatMemberUpdatedUpdate - -@PreviewFeature -inline fun Update.commonChatMemberUpdatedUpdateOrThrow(): CommonChatMemberUpdatedUpdate = - this as CommonChatMemberUpdatedUpdate - -@PreviewFeature -inline fun Update.ifMyChatMemberUpdatedUpdate(block: (MyChatMemberUpdatedUpdate) -> T) = - myChatMemberUpdatedUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.myChatMemberUpdatedUpdateOrNull(): MyChatMemberUpdatedUpdate? = this as? MyChatMemberUpdatedUpdate - -@PreviewFeature -inline fun Update.myChatMemberUpdatedUpdateOrThrow(): MyChatMemberUpdatedUpdate = this as MyChatMemberUpdatedUpdate - -@PreviewFeature -inline fun Update.ifChatMemberUpdatedUpdate(block: (ChatMemberUpdatedUpdate) -> T) = - chatMemberUpdatedUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.chatMemberUpdatedUpdateOrNull(): ChatMemberUpdatedUpdate? = this as? ChatMemberUpdatedUpdate - -@PreviewFeature -inline fun Update.chatMemberUpdatedUpdateOrThrow(): ChatMemberUpdatedUpdate = this as ChatMemberUpdatedUpdate - -@PreviewFeature -inline fun Update.ifChatJoinRequestUpdate(block: (ChatJoinRequestUpdate) -> T) = - chatJoinRequestUpdateOrNull()?.let(block) - -@PreviewFeature -inline fun Update.chatJoinRequestUpdateOrNull(): ChatJoinRequestUpdate? = this as? ChatJoinRequestUpdate - -@PreviewFeature -inline fun Update.chatJoinRequestUpdateOrThrow(): ChatJoinRequestUpdate = this as ChatJoinRequestUpdate - -@PreviewFeature -inline fun TelegramMediaFile.ifAnimationFile(block: (AnimationFile) -> T) = animationFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.animationFileOrNull(): AnimationFile? = this as? AnimationFile - -@PreviewFeature -inline fun TelegramMediaFile.animationFileOrThrow(): AnimationFile = this as AnimationFile - -@PreviewFeature -inline fun TelegramMediaFile.ifAudioFile(block: (AudioFile) -> T) = audioFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.audioFileOrNull(): AudioFile? = this as? AudioFile - -@PreviewFeature -inline fun TelegramMediaFile.audioFileOrThrow(): AudioFile = this as AudioFile - -@PreviewFeature -inline fun TelegramMediaFile.ifDocumentFile(block: (DocumentFile) -> T) = documentFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.documentFileOrNull(): DocumentFile? = this as? DocumentFile - -@PreviewFeature -inline fun TelegramMediaFile.documentFileOrThrow(): DocumentFile = this as DocumentFile - -@PreviewFeature -inline fun TelegramMediaFile.ifFile(block: (File) -> T) = fileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.fileOrNull(): File? = this as? File - -@PreviewFeature -inline fun TelegramMediaFile.fileOrThrow(): File = this as File - -@PreviewFeature -inline fun TelegramMediaFile.ifPathedFile(block: (PathedFile) -> T) = pathedFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.pathedFileOrNull(): PathedFile? = this as? PathedFile - -@PreviewFeature -inline fun TelegramMediaFile.pathedFileOrThrow(): PathedFile = this as PathedFile - -@PreviewFeature -inline fun TelegramMediaFile.ifPhotoSize(block: (PhotoSize) -> T) = photoSizeOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.photoSizeOrNull(): PhotoSize? = this as? PhotoSize - -@PreviewFeature -inline fun TelegramMediaFile.photoSizeOrThrow(): PhotoSize = this as PhotoSize - -@PreviewFeature -inline fun TelegramMediaFile.ifSticker(block: (Sticker) -> T) = stickerOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.stickerOrNull(): Sticker? = this as? Sticker - -@PreviewFeature -inline fun TelegramMediaFile.stickerOrThrow(): Sticker = this as Sticker - -@PreviewFeature -inline fun TelegramMediaFile.ifSimpleSticker(block: (SimpleSticker) -> T) = simpleStickerOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.simpleStickerOrNull(): SimpleSticker? = this as? SimpleSticker - -@PreviewFeature -inline fun TelegramMediaFile.simpleStickerOrThrow(): SimpleSticker = this as SimpleSticker - -@PreviewFeature -inline fun TelegramMediaFile.ifAnimatedSticker(block: (AnimatedSticker) -> T) = animatedStickerOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.animatedStickerOrNull(): AnimatedSticker? = this as? AnimatedSticker - -@PreviewFeature -inline fun TelegramMediaFile.animatedStickerOrThrow(): AnimatedSticker = this as AnimatedSticker - -@PreviewFeature -inline fun TelegramMediaFile.ifVideoSticker(block: (VideoSticker) -> T) = videoStickerOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.videoStickerOrNull(): VideoSticker? = this as? VideoSticker - -@PreviewFeature -inline fun TelegramMediaFile.videoStickerOrThrow(): VideoSticker = this as VideoSticker - -@PreviewFeature -inline fun TelegramMediaFile.ifVideoFile(block: (VideoFile) -> T) = videoFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.videoFileOrNull(): VideoFile? = this as? VideoFile - -@PreviewFeature -inline fun TelegramMediaFile.videoFileOrThrow(): VideoFile = this as VideoFile - -@PreviewFeature -inline fun TelegramMediaFile.ifVideoNoteFile(block: (VideoNoteFile) -> T) = videoNoteFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.videoNoteFileOrNull(): VideoNoteFile? = this as? VideoNoteFile - -@PreviewFeature -inline fun TelegramMediaFile.videoNoteFileOrThrow(): VideoNoteFile = this as VideoNoteFile - -@PreviewFeature -inline fun TelegramMediaFile.ifVoiceFile(block: (VoiceFile) -> T) = voiceFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.voiceFileOrNull(): VoiceFile? = this as? VoiceFile - -@PreviewFeature -inline fun TelegramMediaFile.voiceFileOrThrow(): VoiceFile = this as VoiceFile - -@PreviewFeature -inline fun TelegramMediaFile.ifMimedMediaFile(block: (MimedMediaFile) -> T) = mimedMediaFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.mimedMediaFileOrNull(): MimedMediaFile? = this as? MimedMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.mimedMediaFileOrThrow(): MimedMediaFile = this as MimedMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.ifPlayableMediaFile(block: (PlayableMediaFile) -> T) = - playableMediaFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.playableMediaFileOrNull(): PlayableMediaFile? = this as? PlayableMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.playableMediaFileOrThrow(): PlayableMediaFile = this as PlayableMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.ifSizedMediaFile(block: (SizedMediaFile) -> T) = sizedMediaFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.sizedMediaFileOrNull(): SizedMediaFile? = this as? SizedMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.sizedMediaFileOrThrow(): SizedMediaFile = this as SizedMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.ifThumbedMediaFile(block: (ThumbedMediaFile) -> T) = - thumbedMediaFileOrNull()?.let(block) - -@PreviewFeature -inline fun TelegramMediaFile.thumbedMediaFileOrNull(): ThumbedMediaFile? = this as? ThumbedMediaFile - -@PreviewFeature -inline fun TelegramMediaFile.thumbedMediaFileOrThrow(): ThumbedMediaFile = this as ThumbedMediaFile - -@PreviewFeature -inline fun KeyboardMarkup.ifForceReply(block: (ReplyForce) -> T) = forceReplyOrNull()?.let(block) - -@PreviewFeature -inline fun KeyboardMarkup.forceReplyOrNull(): ReplyForce? = this as? ReplyForce - -@PreviewFeature -inline fun KeyboardMarkup.forceReplyOrThrow(): ReplyForce = this as ReplyForce - -@PreviewFeature -inline fun KeyboardMarkup.ifInlineKeyboardMarkup(block: (InlineKeyboardMarkup) -> T) = - inlineKeyboardMarkupOrNull()?.let(block) - -@PreviewFeature -inline fun KeyboardMarkup.inlineKeyboardMarkupOrNull(): InlineKeyboardMarkup? = this as? InlineKeyboardMarkup - -@PreviewFeature -inline fun KeyboardMarkup.inlineKeyboardMarkupOrThrow(): InlineKeyboardMarkup = this as InlineKeyboardMarkup - -@PreviewFeature -inline fun KeyboardMarkup.ifReplyKeyboardMarkup(block: (ReplyKeyboardMarkup) -> T) = - replyKeyboardMarkupOrNull()?.let(block) - -@PreviewFeature -inline fun KeyboardMarkup.replyKeyboardMarkupOrNull(): ReplyKeyboardMarkup? = this as? ReplyKeyboardMarkup - -@PreviewFeature -inline fun KeyboardMarkup.replyKeyboardMarkupOrThrow(): ReplyKeyboardMarkup = this as ReplyKeyboardMarkup - -@PreviewFeature -inline fun KeyboardMarkup.ifReplyKeyboardRemove(block: (ReplyKeyboardRemove) -> T) = - replyKeyboardRemoveOrNull()?.let(block) - -@PreviewFeature -inline fun KeyboardMarkup.replyKeyboardRemoveOrNull(): ReplyKeyboardRemove? = this as? ReplyKeyboardRemove - -@PreviewFeature -inline fun KeyboardMarkup.replyKeyboardRemoveOrThrow(): ReplyKeyboardRemove = this as ReplyKeyboardRemove - -@PreviewFeature -inline fun InlineKeyboardButton.ifCallbackDataInlineKeyboardButton(block: (CallbackDataInlineKeyboardButton) -> T) = - callbackDataInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.callbackDataInlineKeyboardButtonOrNull(): CallbackDataInlineKeyboardButton? = - this as? CallbackDataInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.callbackDataInlineKeyboardButtonOrThrow(): CallbackDataInlineKeyboardButton = - this as CallbackDataInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifCallbackGameInlineKeyboardButton(block: (CallbackGameInlineKeyboardButton) -> T) = - callbackGameInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.callbackGameInlineKeyboardButtonOrNull(): CallbackGameInlineKeyboardButton? = - this as? CallbackGameInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.callbackGameInlineKeyboardButtonOrThrow(): CallbackGameInlineKeyboardButton = - this as CallbackGameInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifLoginURLInlineKeyboardButton(block: (LoginURLInlineKeyboardButton) -> T) = - loginURLInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.loginURLInlineKeyboardButtonOrNull(): LoginURLInlineKeyboardButton? = - this as? LoginURLInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.loginURLInlineKeyboardButtonOrThrow(): LoginURLInlineKeyboardButton = - this as LoginURLInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifPayInlineKeyboardButton(block: (PayInlineKeyboardButton) -> T) = - payInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.payInlineKeyboardButtonOrNull(): PayInlineKeyboardButton? = - this as? PayInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.payInlineKeyboardButtonOrThrow(): PayInlineKeyboardButton = - this as PayInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifSwitchInlineQueryCurrentChatInlineKeyboardButton(block: (SwitchInlineQueryCurrentChatInlineKeyboardButton) -> T) = - switchInlineQueryCurrentChatInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.switchInlineQueryCurrentChatInlineKeyboardButtonOrNull(): SwitchInlineQueryCurrentChatInlineKeyboardButton? = - this as? SwitchInlineQueryCurrentChatInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.switchInlineQueryCurrentChatInlineKeyboardButtonOrThrow(): SwitchInlineQueryCurrentChatInlineKeyboardButton = - this as SwitchInlineQueryCurrentChatInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifSwitchInlineQueryInlineKeyboardButton(block: (SwitchInlineQueryInlineKeyboardButton) -> T) = - switchInlineQueryInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.switchInlineQueryInlineKeyboardButtonOrNull(): SwitchInlineQueryInlineKeyboardButton? = - this as? SwitchInlineQueryInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.switchInlineQueryInlineKeyboardButtonOrThrow(): SwitchInlineQueryInlineKeyboardButton = - this as SwitchInlineQueryInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifURLInlineKeyboardButton(block: (URLInlineKeyboardButton) -> T) = - uRLInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.uRLInlineKeyboardButtonOrNull(): URLInlineKeyboardButton? = - this as? URLInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.uRLInlineKeyboardButtonOrThrow(): URLInlineKeyboardButton = - this as URLInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifWebAppKeyboardButton(block: (WebAppKeyboardButton) -> T) = - webAppKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.webAppKeyboardButtonOrNull(): WebAppKeyboardButton? = this as? WebAppKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.webAppKeyboardButtonOrThrow(): WebAppKeyboardButton = - this as WebAppKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.ifUnknownInlineKeyboardButton(block: (UnknownInlineKeyboardButton) -> T) = - unknownInlineKeyboardButtonOrNull()?.let(block) - -@PreviewFeature -inline fun InlineKeyboardButton.unknownInlineKeyboardButtonOrNull(): UnknownInlineKeyboardButton? = - this as? UnknownInlineKeyboardButton - -@PreviewFeature -inline fun InlineKeyboardButton.unknownInlineKeyboardButtonOrThrow(): UnknownInlineKeyboardButton = - this as UnknownInlineKeyboardButton - -@PreviewFeature -inline fun Poll.ifMultipleAnswersPoll(block: (MultipleAnswersPoll) -> T) = multipleAnswersPollOrNull()?.let(block) - -@PreviewFeature -inline fun Poll.multipleAnswersPollOrNull(): MultipleAnswersPoll? = this as? MultipleAnswersPoll - -@PreviewFeature -inline fun Poll.multipleAnswersPollOrThrow(): MultipleAnswersPoll = this as MultipleAnswersPoll - -@PreviewFeature -inline fun Poll.ifQuizPoll(block: (QuizPoll) -> T) = quizPollOrNull()?.let(block) - -@PreviewFeature -inline fun Poll.quizPollOrNull(): QuizPoll? = this as? QuizPoll - -@PreviewFeature -inline fun Poll.quizPollOrThrow(): QuizPoll = this as QuizPoll - -@PreviewFeature -inline fun Poll.ifRegularPoll(block: (RegularPoll) -> T) = regularPollOrNull()?.let(block) - -@PreviewFeature -inline fun Poll.regularPollOrNull(): RegularPoll? = this as? RegularPoll - -@PreviewFeature -inline fun Poll.regularPollOrThrow(): RegularPoll = this as RegularPoll - -@PreviewFeature -inline fun Poll.ifUnknownPollType(block: (UnknownPollType) -> T) = unknownPollTypeOrNull()?.let(block) - -@PreviewFeature -inline fun Poll.unknownPollTypeOrNull(): UnknownPollType? = this as? UnknownPollType - -@PreviewFeature -inline fun Poll.unknownPollTypeOrThrow(): UnknownPollType = this as UnknownPollType - -@PreviewFeature -inline fun ResendableContent.ifContactContent(block: (ContactContent) -> T) = contactContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.contactContentOrNull(): ContactContent? = this as? ContactContent - -@PreviewFeature -inline fun ResendableContent.contactContentOrThrow(): ContactContent = this as ContactContent - -@PreviewFeature -inline fun ResendableContent.ifDiceContent(block: (DiceContent) -> T) = diceContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.diceContentOrNull(): DiceContent? = this as? DiceContent - -@PreviewFeature -inline fun ResendableContent.diceContentOrThrow(): DiceContent = this as DiceContent - -@PreviewFeature -inline fun ResendableContent.ifGameContent(block: (GameContent) -> T) = gameContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.gameContentOrNull(): GameContent? = this as? GameContent - -@PreviewFeature -inline fun ResendableContent.gameContentOrThrow(): GameContent = this as GameContent - -@PreviewFeature -inline fun ResendableContent.ifLocationContent(block: (LocationContent) -> T) = locationContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.locationContentOrNull(): LocationContent? = this as? LocationContent - -@PreviewFeature -inline fun ResendableContent.locationContentOrThrow(): LocationContent = this as LocationContent - -@PreviewFeature -inline fun ResendableContent.ifLiveLocationContent(block: (LiveLocationContent) -> T) = - liveLocationContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.liveLocationContentOrNull(): LiveLocationContent? = this as? LiveLocationContent - -@PreviewFeature -inline fun ResendableContent.liveLocationContentOrThrow(): LiveLocationContent = this as LiveLocationContent - -@PreviewFeature -inline fun ResendableContent.ifStaticLocationContent(block: (StaticLocationContent) -> T) = - staticLocationContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.staticLocationContentOrNull(): StaticLocationContent? = this as? StaticLocationContent - -@PreviewFeature -inline fun ResendableContent.staticLocationContentOrThrow(): StaticLocationContent = this as StaticLocationContent - -@PreviewFeature -inline fun ResendableContent.ifPollContent(block: (PollContent) -> T) = pollContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.pollContentOrNull(): PollContent? = this as? PollContent - -@PreviewFeature -inline fun ResendableContent.pollContentOrThrow(): PollContent = this as PollContent - -@PreviewFeature -inline fun ResendableContent.ifTextContent(block: (TextContent) -> T) = textContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.textContentOrNull(): TextContent? = this as? TextContent - -@PreviewFeature -inline fun ResendableContent.textContentOrThrow(): TextContent = this as TextContent - -@PreviewFeature -inline fun ResendableContent.ifVenueContent(block: (VenueContent) -> T) = venueContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.venueContentOrNull(): VenueContent? = this as? VenueContent - -@PreviewFeature -inline fun ResendableContent.venueContentOrThrow(): VenueContent = this as VenueContent - -@PreviewFeature -inline fun ResendableContent.ifAudioMediaGroupContent(block: (AudioMediaGroupContent) -> T) = - audioMediaGroupContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.audioMediaGroupContentOrNull(): AudioMediaGroupContent? = this as? AudioMediaGroupContent - -@PreviewFeature -inline fun ResendableContent.audioMediaGroupContentOrThrow(): AudioMediaGroupContent = this as AudioMediaGroupContent - -@PreviewFeature -inline fun ResendableContent.ifDocumentMediaGroupContent(block: (DocumentMediaGroupContent) -> T) = - documentMediaGroupContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.documentMediaGroupContentOrNull(): DocumentMediaGroupContent? = - this as? DocumentMediaGroupContent - -@PreviewFeature -inline fun ResendableContent.documentMediaGroupContentOrThrow(): DocumentMediaGroupContent = - this as DocumentMediaGroupContent - -@PreviewFeature -inline fun ResendableContent.ifMediaCollectionContent(block: (MediaCollectionContent) -> T) = - mediaCollectionContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.mediaCollectionContentOrNull(): MediaCollectionContent? = - this as? MediaCollectionContent - -@PreviewFeature -inline fun ResendableContent.mediaCollectionContentOrThrow(): MediaCollectionContent = - this as MediaCollectionContent - -@PreviewFeature -inline fun ResendableContent.ifTextedMediaContent(block: (TextedMediaContent) -> T) = - textedMediaContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.textedMediaContentOrNull(): TextedMediaContent? = - this as? TextedMediaContent - -@PreviewFeature -inline fun ResendableContent.textedMediaContentOrThrow(): TextedMediaContent = - this as TextedMediaContent - -@PreviewFeature -inline fun ResendableContent.ifMediaContent(block: (MediaContent) -> T) = mediaContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.mediaContentOrNull(): MediaContent? = this as? MediaContent - -@PreviewFeature -inline fun ResendableContent.mediaContentOrThrow(): MediaContent = this as MediaContent - -@PreviewFeature -inline fun ResendableContent.ifMediaGroupContent(block: (MediaGroupContent) -> T) = - mediaGroupContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.mediaGroupContentOrNull(): MediaGroupContent? = this as? MediaGroupContent - -@PreviewFeature -inline fun ResendableContent.mediaGroupContentOrThrow(): MediaGroupContent = this as MediaGroupContent - -@PreviewFeature -inline fun ResendableContent.ifMessageContent(block: (MessageContent) -> T) = messageContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.messageContentOrNull(): MessageContent? = this as? MessageContent - -@PreviewFeature -inline fun ResendableContent.messageContentOrThrow(): MessageContent = this as MessageContent - -@PreviewFeature -inline fun ResendableContent.ifVisualMediaGroupContent(block: (VisualMediaGroupContent) -> T) = - visualMediaGroupContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.visualMediaGroupContentOrNull(): VisualMediaGroupContent? = - this as? VisualMediaGroupContent - -@PreviewFeature -inline fun ResendableContent.visualMediaGroupContentOrThrow(): VisualMediaGroupContent = this as VisualMediaGroupContent - -@PreviewFeature -inline fun ResendableContent.ifAnimationContent(block: (AnimationContent) -> T) = - animationContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.animationContentOrNull(): AnimationContent? = this as? AnimationContent - -@PreviewFeature -inline fun ResendableContent.animationContentOrThrow(): AnimationContent = this as AnimationContent - -@PreviewFeature -inline fun ResendableContent.ifAudioContent(block: (AudioContent) -> T) = audioContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.audioContentOrNull(): AudioContent? = this as? AudioContent - -@PreviewFeature -inline fun ResendableContent.audioContentOrThrow(): AudioContent = this as AudioContent - -@PreviewFeature -inline fun ResendableContent.ifDocumentContent(block: (DocumentContent) -> T) = documentContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.documentContentOrNull(): DocumentContent? = this as? DocumentContent - -@PreviewFeature -inline fun ResendableContent.documentContentOrThrow(): DocumentContent = this as DocumentContent - -@PreviewFeature -inline fun ResendableContent.ifPhotoContent(block: (PhotoContent) -> T) = photoContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.photoContentOrNull(): PhotoContent? = this as? PhotoContent - -@PreviewFeature -inline fun ResendableContent.photoContentOrThrow(): PhotoContent = this as PhotoContent - -@PreviewFeature -inline fun ResendableContent.ifStickerContent(block: (StickerContent) -> T) = stickerContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.stickerContentOrNull(): StickerContent? = this as? StickerContent - -@PreviewFeature -inline fun ResendableContent.stickerContentOrThrow(): StickerContent = this as StickerContent - -@PreviewFeature -inline fun ResendableContent.ifVideoContent(block: (VideoContent) -> T) = videoContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.videoContentOrNull(): VideoContent? = this as? VideoContent - -@PreviewFeature -inline fun ResendableContent.videoContentOrThrow(): VideoContent = this as VideoContent - -@PreviewFeature -inline fun ResendableContent.ifVideoNoteContent(block: (VideoNoteContent) -> T) = - videoNoteContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.videoNoteContentOrNull(): VideoNoteContent? = this as? VideoNoteContent - -@PreviewFeature -inline fun ResendableContent.videoNoteContentOrThrow(): VideoNoteContent = this as VideoNoteContent - -@PreviewFeature -inline fun ResendableContent.ifVoiceContent(block: (VoiceContent) -> T) = voiceContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.voiceContentOrNull(): VoiceContent? = this as? VoiceContent - -@PreviewFeature -inline fun ResendableContent.voiceContentOrThrow(): VoiceContent = this as VoiceContent - -@PreviewFeature -inline fun ResendableContent.ifInvoiceContent(block: (InvoiceContent) -> T) = invoiceContentOrNull()?.let(block) - -@PreviewFeature -inline fun ResendableContent.invoiceContentOrNull(): InvoiceContent? = this as? InvoiceContent - -@PreviewFeature -inline fun ResendableContent.invoiceContentOrThrow(): InvoiceContent = this as InvoiceContent - -@PreviewFeature -inline fun TextSource.ifMultilevelTextSource(block: (MultilevelTextSource) -> T) = - multilevelTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.multilevelTextSourceOrNull(): MultilevelTextSource? = this as? MultilevelTextSource - -@PreviewFeature -inline fun TextSource.multilevelTextSourceOrThrow(): MultilevelTextSource = this as MultilevelTextSource - -@PreviewFeature -inline fun TextSource.ifBoldTextSource(block: (BoldTextSource) -> T) = boldTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.boldTextSourceOrNull(): BoldTextSource? = this as? BoldTextSource - -@PreviewFeature -inline fun TextSource.boldTextSourceOrThrow(): BoldTextSource = this as BoldTextSource - -@PreviewFeature -inline fun TextSource.ifBotCommandTextSource(block: (BotCommandTextSource) -> T) = - botCommandTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.botCommandTextSourceOrNull(): BotCommandTextSource? = this as? BotCommandTextSource - -@PreviewFeature -inline fun TextSource.botCommandTextSourceOrThrow(): BotCommandTextSource = this as BotCommandTextSource - -@PreviewFeature -inline fun TextSource.ifCashTagTextSource(block: (CashTagTextSource) -> T) = cashTagTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.cashTagTextSourceOrNull(): CashTagTextSource? = this as? CashTagTextSource - -@PreviewFeature -inline fun TextSource.cashTagTextSourceOrThrow(): CashTagTextSource = this as CashTagTextSource - -@PreviewFeature -inline fun TextSource.ifCodeTextSource(block: (CodeTextSource) -> T) = codeTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.codeTextSourceOrNull(): CodeTextSource? = this as? CodeTextSource - -@PreviewFeature -inline fun TextSource.codeTextSourceOrThrow(): CodeTextSource = this as CodeTextSource - -@PreviewFeature -inline fun TextSource.ifEMailTextSource(block: (EMailTextSource) -> T) = eMailTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.eMailTextSourceOrNull(): EMailTextSource? = this as? EMailTextSource - -@PreviewFeature -inline fun TextSource.eMailTextSourceOrThrow(): EMailTextSource = this as EMailTextSource - -@PreviewFeature -inline fun TextSource.ifHashTagTextSource(block: (HashTagTextSource) -> T) = hashTagTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.hashTagTextSourceOrNull(): HashTagTextSource? = this as? HashTagTextSource - -@PreviewFeature -inline fun TextSource.hashTagTextSourceOrThrow(): HashTagTextSource = this as HashTagTextSource - -@PreviewFeature -inline fun TextSource.ifItalicTextSource(block: (ItalicTextSource) -> T) = italicTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.italicTextSourceOrNull(): ItalicTextSource? = this as? ItalicTextSource - -@PreviewFeature -inline fun TextSource.italicTextSourceOrThrow(): ItalicTextSource = this as ItalicTextSource - -@PreviewFeature -inline fun TextSource.ifMentionTextSource(block: (MentionTextSource) -> T) = mentionTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.mentionTextSourceOrNull(): MentionTextSource? = this as? MentionTextSource - -@PreviewFeature -inline fun TextSource.mentionTextSourceOrThrow(): MentionTextSource = this as MentionTextSource - -@PreviewFeature -inline fun TextSource.ifPhoneNumberTextSource(block: (PhoneNumberTextSource) -> T) = - phoneNumberTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.phoneNumberTextSourceOrNull(): PhoneNumberTextSource? = this as? PhoneNumberTextSource - -@PreviewFeature -inline fun TextSource.phoneNumberTextSourceOrThrow(): PhoneNumberTextSource = this as PhoneNumberTextSource - -@PreviewFeature -inline fun TextSource.ifPreTextSource(block: (PreTextSource) -> T) = preTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.preTextSourceOrNull(): PreTextSource? = this as? PreTextSource - -@PreviewFeature -inline fun TextSource.preTextSourceOrThrow(): PreTextSource = this as PreTextSource - -@PreviewFeature -inline fun TextSource.ifRegularTextSource(block: (RegularTextSource) -> T) = regularTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.regularTextSourceOrNull(): RegularTextSource? = this as? RegularTextSource - -@PreviewFeature -inline fun TextSource.regularTextSourceOrThrow(): RegularTextSource = this as RegularTextSource - -@PreviewFeature -inline fun TextSource.ifStrikethroughTextSource(block: (StrikethroughTextSource) -> T) = - strikethroughTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.strikethroughTextSourceOrNull(): StrikethroughTextSource? = this as? StrikethroughTextSource - -@PreviewFeature -inline fun TextSource.strikethroughTextSourceOrThrow(): StrikethroughTextSource = this as StrikethroughTextSource - -@PreviewFeature -inline fun TextSource.ifTextLinkTextSource(block: (TextLinkTextSource) -> T) = - textLinkTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.textLinkTextSourceOrNull(): TextLinkTextSource? = this as? TextLinkTextSource - -@PreviewFeature -inline fun TextSource.textLinkTextSourceOrThrow(): TextLinkTextSource = this as TextLinkTextSource - -@PreviewFeature -inline fun TextSource.ifTextMentionTextSource(block: (TextMentionTextSource) -> T) = - textMentionTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.textMentionTextSourceOrNull(): TextMentionTextSource? = this as? TextMentionTextSource - -@PreviewFeature -inline fun TextSource.textMentionTextSourceOrThrow(): TextMentionTextSource = this as TextMentionTextSource - -@PreviewFeature -inline fun TextSource.ifURLTextSource(block: (URLTextSource) -> T) = uRLTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.uRLTextSourceOrNull(): URLTextSource? = this as? URLTextSource - -@PreviewFeature -inline fun TextSource.uRLTextSourceOrThrow(): URLTextSource = this as URLTextSource - -@PreviewFeature -inline fun TextSource.ifUnderlineTextSource(block: (UnderlineTextSource) -> T) = - underlineTextSourceOrNull()?.let(block) - -@PreviewFeature -inline fun TextSource.underlineTextSourceOrNull(): UnderlineTextSource? = this as? UnderlineTextSource - -@PreviewFeature -inline fun TextSource.underlineTextSourceOrThrow(): UnderlineTextSource = this as UnderlineTextSource - -@PreviewFeature -inline fun DiceAnimationType.ifBasketballDiceAnimationType(block: (BasketballDiceAnimationType) -> T) = - basketballDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.basketballDiceAnimationTypeOrNull(): BasketballDiceAnimationType? = - this as? BasketballDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.basketballDiceAnimationTypeOrThrow(): BasketballDiceAnimationType = - this as BasketballDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.ifBowlingDiceAnimationType(block: (BowlingDiceAnimationType) -> T) = - bowlingDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.bowlingDiceAnimationTypeOrNull(): BowlingDiceAnimationType? = - this as? BowlingDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.bowlingDiceAnimationTypeOrThrow(): BowlingDiceAnimationType = - this as BowlingDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.ifCubeDiceAnimationType(block: (CubeDiceAnimationType) -> T) = - cubeDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.cubeDiceAnimationTypeOrNull(): CubeDiceAnimationType? = this as? CubeDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.cubeDiceAnimationTypeOrThrow(): CubeDiceAnimationType = this as CubeDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.ifCustomDiceAnimationType(block: (CustomDiceAnimationType) -> T) = - customDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.customDiceAnimationTypeOrNull(): CustomDiceAnimationType? = - this as? CustomDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.customDiceAnimationTypeOrThrow(): CustomDiceAnimationType = this as CustomDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.ifDartsDiceAnimationType(block: (DartsDiceAnimationType) -> T) = - dartsDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.dartsDiceAnimationTypeOrNull(): DartsDiceAnimationType? = this as? DartsDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.dartsDiceAnimationTypeOrThrow(): DartsDiceAnimationType = this as DartsDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.ifFootballDiceAnimationType(block: (FootballDiceAnimationType) -> T) = - footballDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.footballDiceAnimationTypeOrNull(): FootballDiceAnimationType? = - this as? FootballDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.footballDiceAnimationTypeOrThrow(): FootballDiceAnimationType = - this as FootballDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.ifSlotMachineDiceAnimationType(block: (SlotMachineDiceAnimationType) -> T) = - slotMachineDiceAnimationTypeOrNull()?.let(block) - -@PreviewFeature -inline fun DiceAnimationType.slotMachineDiceAnimationTypeOrNull(): SlotMachineDiceAnimationType? = - this as? SlotMachineDiceAnimationType - -@PreviewFeature -inline fun DiceAnimationType.slotMachineDiceAnimationTypeOrThrow(): SlotMachineDiceAnimationType = - this as SlotMachineDiceAnimationType - -@PreviewFeature -inline fun ChatEvent.ifChannelChatCreated(block: (ChannelChatCreated) -> T) = channelChatCreatedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.channelChatCreatedOrNull(): ChannelChatCreated? = this as? ChannelChatCreated - -@PreviewFeature -inline fun ChatEvent.channelChatCreatedOrThrow(): ChannelChatCreated = this as ChannelChatCreated - -@PreviewFeature -inline fun ChatEvent.ifDeleteChatPhoto(block: (DeleteChatPhoto) -> T) = deleteChatPhotoOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.deleteChatPhotoOrNull(): DeleteChatPhoto? = this as? DeleteChatPhoto - -@PreviewFeature -inline fun ChatEvent.deleteChatPhotoOrThrow(): DeleteChatPhoto = this as DeleteChatPhoto - -@PreviewFeature -inline fun ChatEvent.ifGroupChatCreated(block: (GroupChatCreated) -> T) = groupChatCreatedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.groupChatCreatedOrNull(): GroupChatCreated? = this as? GroupChatCreated - -@PreviewFeature -inline fun ChatEvent.groupChatCreatedOrThrow(): GroupChatCreated = this as GroupChatCreated - -@PreviewFeature -inline fun ChatEvent.ifLeftChatMember(block: (LeftChatMember) -> T) = leftChatMemberOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.leftChatMemberOrNull(): LeftChatMember? = this as? LeftChatMember - -@PreviewFeature -inline fun ChatEvent.leftChatMemberOrThrow(): LeftChatMember = this as LeftChatMember - -@PreviewFeature -inline fun ChatEvent.ifMessageAutoDeleteTimerChanged(block: (MessageAutoDeleteTimerChanged) -> T) = - messageAutoDeleteTimerChangedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.messageAutoDeleteTimerChangedOrNull(): MessageAutoDeleteTimerChanged? = - this as? MessageAutoDeleteTimerChanged - -@PreviewFeature -inline fun ChatEvent.messageAutoDeleteTimerChangedOrThrow(): MessageAutoDeleteTimerChanged = - this as MessageAutoDeleteTimerChanged - -@PreviewFeature -inline fun ChatEvent.ifNewChatMembers(block: (NewChatMembers) -> T) = newChatMembersOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.newChatMembersOrNull(): NewChatMembers? = this as? NewChatMembers - -@PreviewFeature -inline fun ChatEvent.newChatMembersOrThrow(): NewChatMembers = this as NewChatMembers - -@PreviewFeature -inline fun ChatEvent.ifNewChatPhoto(block: (NewChatPhoto) -> T) = newChatPhotoOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.newChatPhotoOrNull(): NewChatPhoto? = this as? NewChatPhoto - -@PreviewFeature -inline fun ChatEvent.newChatPhotoOrThrow(): NewChatPhoto = this as NewChatPhoto - -@PreviewFeature -inline fun ChatEvent.ifNewChatTitle(block: (NewChatTitle) -> T) = newChatTitleOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.newChatTitleOrNull(): NewChatTitle? = this as? NewChatTitle - -@PreviewFeature -inline fun ChatEvent.newChatTitleOrThrow(): NewChatTitle = this as NewChatTitle - -@PreviewFeature -inline fun ChatEvent.ifPinnedMessage(block: (PinnedMessage) -> T) = pinnedMessageOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.pinnedMessageOrNull(): PinnedMessage? = this as? PinnedMessage - -@PreviewFeature -inline fun ChatEvent.pinnedMessageOrThrow(): PinnedMessage = this as PinnedMessage - -@PreviewFeature -inline fun ChatEvent.ifSuccessfulPaymentEvent(block: (SuccessfulPaymentEvent) -> T) = - successfulPaymentEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.successfulPaymentEventOrNull(): SuccessfulPaymentEvent? = this as? SuccessfulPaymentEvent - -@PreviewFeature -inline fun ChatEvent.successfulPaymentEventOrThrow(): SuccessfulPaymentEvent = this as SuccessfulPaymentEvent - -@PreviewFeature -inline fun ChatEvent.ifProximityAlertTriggered(block: (ProximityAlertTriggered) -> T) = - proximityAlertTriggeredOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.proximityAlertTriggeredOrNull(): ProximityAlertTriggered? = this as? ProximityAlertTriggered - -@PreviewFeature -inline fun ChatEvent.proximityAlertTriggeredOrThrow(): ProximityAlertTriggered = this as ProximityAlertTriggered - -@PreviewFeature -inline fun ChatEvent.ifSupergroupChatCreated(block: (SupergroupChatCreated) -> T) = - supergroupChatCreatedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.supergroupChatCreatedOrNull(): SupergroupChatCreated? = this as? SupergroupChatCreated - -@PreviewFeature -inline fun ChatEvent.supergroupChatCreatedOrThrow(): SupergroupChatCreated = this as SupergroupChatCreated - -@PreviewFeature -inline fun ChatEvent.ifMigratedToSupergroup(block: (MigratedToSupergroup) -> T) = - migratedToSupergroupOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.migratedToSupergroupOrNull(): MigratedToSupergroup? = this as? MigratedToSupergroup - -@PreviewFeature -inline fun ChatEvent.migratedToSupergroupOrThrow(): MigratedToSupergroup = this as MigratedToSupergroup - -@PreviewFeature -inline fun ChatEvent.ifChannelEvent(block: (ChannelEvent) -> T) = channelEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.channelEventOrNull(): ChannelEvent? = this as? ChannelEvent - -@PreviewFeature -inline fun ChatEvent.channelEventOrThrow(): ChannelEvent = this as ChannelEvent - -@PreviewFeature -inline fun ChatEvent.ifPublicChatEvent(block: (PublicChatEvent) -> T) = publicChatEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.publicChatEventOrNull(): PublicChatEvent? = this as? PublicChatEvent - -@PreviewFeature -inline fun ChatEvent.publicChatEventOrThrow(): PublicChatEvent = this as PublicChatEvent - -@PreviewFeature -inline fun ChatEvent.ifCommonEvent(block: (CommonEvent) -> T) = commonEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.commonEventOrNull(): CommonEvent? = this as? CommonEvent - -@PreviewFeature -inline fun ChatEvent.commonEventOrThrow(): CommonEvent = this as CommonEvent - -@PreviewFeature -inline fun ChatEvent.ifGroupEvent(block: (GroupEvent) -> T) = groupEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.groupEventOrNull(): GroupEvent? = this as? GroupEvent - -@PreviewFeature -inline fun ChatEvent.groupEventOrThrow(): GroupEvent = this as GroupEvent - -@PreviewFeature -inline fun ChatEvent.ifSupergroupEvent(block: (SupergroupEvent) -> T) = supergroupEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.supergroupEventOrNull(): SupergroupEvent? = this as? SupergroupEvent - -@PreviewFeature -inline fun ChatEvent.supergroupEventOrThrow(): SupergroupEvent = this as SupergroupEvent - -@PreviewFeature -inline fun ChatEvent.ifVideoChatEvent(block: (VideoChatEvent) -> T) = videoChatEventOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.videoChatEventOrNull(): VideoChatEvent? = this as? VideoChatEvent - -@PreviewFeature -inline fun ChatEvent.videoChatEventOrThrow(): VideoChatEvent = this as VideoChatEvent - -@PreviewFeature -inline fun ChatEvent.ifVideoChatEnded(block: (VideoChatEnded) -> T) = videoChatEndedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.videoChatEndedOrNull(): VideoChatEnded? = this as? VideoChatEnded - -@PreviewFeature -inline fun ChatEvent.videoChatEndedOrThrow(): VideoChatEnded = this as VideoChatEnded - -@PreviewFeature -inline fun ChatEvent.ifVideoChatParticipantsInvited(block: (VideoChatParticipantsInvited) -> T) = - videoChatParticipantsInvitedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.videoChatParticipantsInvitedOrNull(): VideoChatParticipantsInvited? = - this as? VideoChatParticipantsInvited - -@PreviewFeature -inline fun ChatEvent.videoChatParticipantsInvitedOrThrow(): VideoChatParticipantsInvited = - this as VideoChatParticipantsInvited - -@PreviewFeature -inline fun ChatEvent.ifVideoChatStarted(block: (VideoChatStarted) -> T) = videoChatStartedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.videoChatStartedOrNull(): VideoChatStarted? = this as? VideoChatStarted - -@PreviewFeature -inline fun ChatEvent.videoChatStartedOrThrow(): VideoChatStarted = this as VideoChatStarted - -@PreviewFeature -inline fun ChatEvent.ifVideoChatScheduled(block: (VideoChatScheduled) -> T) = videoChatScheduledOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.videoChatScheduledOrNull(): VideoChatScheduled? = this as? VideoChatScheduled - -@PreviewFeature -inline fun ChatEvent.videoChatScheduledOrThrow(): VideoChatScheduled = this as VideoChatScheduled - -@PreviewFeature -inline fun ChatEvent.ifUserLoggedIn(block: (UserLoggedIn) -> T) = userLoggedInOrNull()?.let(block) - -@PreviewFeature -inline fun ChatEvent.userLoggedInOrNull(): UserLoggedIn? = this as? UserLoggedIn - -@PreviewFeature -inline fun ChatEvent.userLoggedInOrThrow(): UserLoggedIn = this as UserLoggedIn - -@PreviewFeature -inline fun CommonSendInvoiceData.ifSendInvoice(block: (SendInvoice) -> T) = sendInvoiceOrNull()?.let(block) - -@PreviewFeature -inline fun CommonSendInvoiceData.sendInvoiceOrNull(): SendInvoice? = this as? SendInvoice - -@PreviewFeature -inline fun CommonSendInvoiceData.sendInvoiceOrThrow(): SendInvoice = this as SendInvoice - -@PreviewFeature -inline fun CommonSendInvoiceData.ifCreateInvoiceLink(block: (CreateInvoiceLink) -> T) = - createInvoiceLinkOrNull()?.let(block) - -@PreviewFeature -inline fun CommonSendInvoiceData.createInvoiceLinkOrNull(): CreateInvoiceLink? = this as? CreateInvoiceLink - -@PreviewFeature -inline fun CommonSendInvoiceData.createInvoiceLinkOrThrow(): CreateInvoiceLink = this as CreateInvoiceLink - -@PreviewFeature -inline fun CommonSendInvoiceData.ifInputInvoiceMessageContent(block: (InputInvoiceMessageContent) -> T) = - inputInvoiceMessageContentOrNull()?.let(block) - -@PreviewFeature -inline fun CommonSendInvoiceData.inputInvoiceMessageContentOrNull(): InputInvoiceMessageContent? = - this as? InputInvoiceMessageContent - -@PreviewFeature -inline fun CommonSendInvoiceData.inputInvoiceMessageContentOrThrow(): InputInvoiceMessageContent = - this as InputInvoiceMessageContent - @PreviewFeature inline fun Any.ifFromUser(block: (FromUser) -> T) = fromUserOrNull()?.let(block) @@ -3561,196 +93,3 @@ inline fun Any.withOptionalLanguageCodeOrNull(): WithOptionalLanguageCode? = thi @PreviewFeature inline fun Any.withOptionalLanguageCodeOrThrow(): WithOptionalLanguageCode = this as WithOptionalLanguageCode - -@PreviewFeature -inline fun Location.ifStaticLocation(block: (StaticLocation) -> T) = staticLocationOrNull()?.let(block) - -@PreviewFeature -inline fun Location.staticLocationOrNull(): StaticLocation? = this as? StaticLocation - -@PreviewFeature -inline fun Location.staticLocationOrThrow(): StaticLocation = this as StaticLocation - -@PreviewFeature -inline fun Location.ifLiveLocation(block: (LiveLocation) -> T) = liveLocationOrNull()?.let(block) - -@PreviewFeature -inline fun Location.liveLocationOrNull(): LiveLocation? = this as? LiveLocation - -@PreviewFeature -inline fun Location.liveLocationOrThrow(): LiveLocation = this as LiveLocation - -@PreviewFeature -inline fun ChatInviteLink.ifPrimaryInviteLink(block: (PrimaryInviteLink) -> T) = - primaryInviteLinkOrNull()?.let(block) - -@PreviewFeature -inline fun ChatInviteLink.primaryInviteLinkOrNull(): PrimaryInviteLink? = this as? PrimaryInviteLink - -@PreviewFeature -inline fun ChatInviteLink.primaryInviteLinkOrThrow(): PrimaryInviteLink = this as PrimaryInviteLink - -@PreviewFeature -inline fun ChatInviteLink.ifSecondaryChatInviteLink(block: (SecondaryChatInviteLink) -> T) = - secondaryChatInviteLinkOrNull()?.let(block) - -@PreviewFeature -inline fun ChatInviteLink.secondaryChatInviteLinkOrNull(): SecondaryChatInviteLink? = this as? SecondaryChatInviteLink - -@PreviewFeature -inline fun ChatInviteLink.secondaryChatInviteLinkOrThrow(): SecondaryChatInviteLink = this as SecondaryChatInviteLink - -@PreviewFeature -inline fun ChatInviteLink.ifChatInviteLinkWithJoinRequest(block: (ChatInviteLinkWithJoinRequest) -> T) = - chatInviteLinkWithJoinRequestOrNull()?.let(block) - -@PreviewFeature -inline fun ChatInviteLink.chatInviteLinkWithJoinRequestOrNull(): ChatInviteLinkWithJoinRequest? = - this as? ChatInviteLinkWithJoinRequest - -@PreviewFeature -inline fun ChatInviteLink.chatInviteLinkWithJoinRequestOrThrow(): ChatInviteLinkWithJoinRequest = - this as ChatInviteLinkWithJoinRequest - -@PreviewFeature -inline fun ChatInviteLink.ifChatInviteLinkWithLimitedMembers(block: (ChatInviteLinkWithLimitedMembers) -> T) = - chatInviteLinkWithLimitedMembersOrNull()?.let(block) - -@PreviewFeature -inline fun ChatInviteLink.chatInviteLinkWithLimitedMembersOrNull(): ChatInviteLinkWithLimitedMembers? = - this as? ChatInviteLinkWithLimitedMembers - -@PreviewFeature -inline fun ChatInviteLink.chatInviteLinkWithLimitedMembersOrThrow(): ChatInviteLinkWithLimitedMembers = - this as ChatInviteLinkWithLimitedMembers - -@PreviewFeature -inline fun ChatInviteLink.ifChatInviteLinkUnlimited(block: (ChatInviteLinkUnlimited) -> T) = - chatInviteLinkUnlimitedOrNull()?.let(block) - -@PreviewFeature -inline fun ChatInviteLink.chatInviteLinkUnlimitedOrNull(): ChatInviteLinkUnlimited? = this as? ChatInviteLinkUnlimited - -@PreviewFeature -inline fun ChatInviteLink.chatInviteLinkUnlimitedOrThrow(): ChatInviteLinkUnlimited = this as ChatInviteLinkUnlimited - -@PreviewFeature -inline fun ForwardInfo.ifAnonymousForwardInfo(block: (ForwardInfo.ByAnonymous) -> T) = - anonymousForwardInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ForwardInfo.anonymousForwardInfoOrNull(): ForwardInfo.ByAnonymous? = this as? ForwardInfo.ByAnonymous - -@PreviewFeature -inline fun ForwardInfo.anonymousForwardInfoOrThrow(): ForwardInfo.ByAnonymous = this as ForwardInfo.ByAnonymous - -@PreviewFeature -inline fun ForwardInfo.ifUserForwardInfo(block: (ForwardInfo.ByUser) -> T) = userForwardInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ForwardInfo.userForwardInfoOrNull(): ForwardInfo.ByUser? = this as? ForwardInfo.ByUser - -@PreviewFeature -inline fun ForwardInfo.userForwardInfoOrThrow(): ForwardInfo.ByUser = this as ForwardInfo.ByUser - -@PreviewFeature -inline fun ForwardInfo.ifForwardFromPublicChatInfo(block: (ForwardInfo.PublicChat) -> T) = - forwardFromPublicChatInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ForwardInfo.forwardFromPublicChatInfoOrNull(): ForwardInfo.PublicChat? = - this as? ForwardInfo.PublicChat - -@PreviewFeature -inline fun ForwardInfo.forwardFromPublicChatInfoOrThrow(): ForwardInfo.PublicChat = this as ForwardInfo.PublicChat - -@PreviewFeature -inline fun ForwardInfo.ifForwardFromChannelInfo(block: (ForwardInfo.PublicChat.FromChannel) -> T) = - forwardFromChannelInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ForwardInfo.forwardFromChannelInfoOrNull(): ForwardInfo.PublicChat.FromChannel? = - this as? ForwardInfo.PublicChat.FromChannel - -@PreviewFeature -inline fun ForwardInfo.forwardFromChannelInfoOrThrow(): ForwardInfo.PublicChat.FromChannel = - this as ForwardInfo.PublicChat.FromChannel - -@PreviewFeature -inline fun ForwardInfo.ifForwardSentByChannelInfo(block: (ForwardInfo.PublicChat.SentByChannel) -> T) = - forwardSentByChannelInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ForwardInfo.forwardSentByChannelInfoOrNull(): ForwardInfo.PublicChat.SentByChannel? = - this as? ForwardInfo.PublicChat.SentByChannel - -@PreviewFeature -inline fun ForwardInfo.forwardSentByChannelInfoOrThrow(): ForwardInfo.PublicChat.SentByChannel = - this as ForwardInfo.PublicChat.SentByChannel - -@PreviewFeature -inline fun ForwardInfo.ifForwardFromSupergroupInfo(block: (ForwardInfo.PublicChat.FromSupergroup) -> T) = - forwardFromSupergroupInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ForwardInfo.forwardFromSupergroupInfoOrNull(): ForwardInfo.PublicChat.FromSupergroup? = - this as? ForwardInfo.PublicChat.FromSupergroup - -@PreviewFeature -inline fun ForwardInfo.forwardFromSupergroupInfoOrThrow(): ForwardInfo.PublicChat.FromSupergroup = - this as ForwardInfo.PublicChat.FromSupergroup - -@PreviewFeature -inline fun MessageContent.ifTextedInput(block: (TextedInput) -> T) = textedInputOrNull()?.let(block) - -@PreviewFeature -inline fun MessageContent.textedInputOrNull(): TextedInput? = this as? TextedInput - -@PreviewFeature -inline fun MessageContent.textedInputOrThrow(): TextedInput = this as TextedInput - -@PreviewFeature -inline fun ScheduledCloseInfo.ifExactScheduledCloseInfo(block: (ExactScheduledCloseInfo) -> T) = - exactScheduledCloseInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ScheduledCloseInfo.exactScheduledCloseInfoOrNull(): ExactScheduledCloseInfo? = - this as? ExactScheduledCloseInfo - -@PreviewFeature -inline fun ScheduledCloseInfo.exactScheduledCloseInfoOrThrow(): ExactScheduledCloseInfo = - this as ExactScheduledCloseInfo - -@PreviewFeature -inline fun ScheduledCloseInfo.ifApproximateScheduledCloseInfo(block: (ApproximateScheduledCloseInfo) -> T) = - approximateScheduledCloseInfoOrNull()?.let(block) - -@PreviewFeature -inline fun ScheduledCloseInfo.approximateScheduledCloseInfoOrNull(): ApproximateScheduledCloseInfo? = - this as? ApproximateScheduledCloseInfo - -@PreviewFeature -inline fun ScheduledCloseInfo.approximateScheduledCloseInfoOrThrow(): ApproximateScheduledCloseInfo = - this as ApproximateScheduledCloseInfo - -@PreviewFeature -inline fun ChosenInlineResult.ifLocationChosenInlineResult(block: (LocationChosenInlineResult) -> T) = - locationChosenInlineResultOrNull()?.let(block) - -@PreviewFeature -inline fun ChosenInlineResult.locationChosenInlineResultOrNull(): LocationChosenInlineResult? = - this as? LocationChosenInlineResult - -@PreviewFeature -inline fun ChosenInlineResult.locationChosenInlineResultOrThrow(): LocationChosenInlineResult = - this as LocationChosenInlineResult - -@PreviewFeature -inline fun ChosenInlineResult.ifBaseChosenInlineResult(block: (BaseChosenInlineResult) -> T) = - baseChosenInlineResultOrNull()?.let(block) - -@PreviewFeature -inline fun ChosenInlineResult.baseChosenInlineResultOrNull(): BaseChosenInlineResult? = this as? BaseChosenInlineResult - -@PreviewFeature -inline fun ChosenInlineResult.baseChosenInlineResultOrThrow(): BaseChosenInlineResult = this as BaseChosenInlineResult diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/NewClassCasts.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/NewClassCasts.kt new file mode 100644 index 0000000000..9547763e56 --- /dev/null +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/NewClassCasts.kt @@ -0,0 +1,4451 @@ +package dev.inmo.tgbotapi.extensions.utils + +import dev.inmo.tgbotapi.abstracts.CommonSendInvoiceData +import dev.inmo.tgbotapi.abstracts.FromUser +import dev.inmo.tgbotapi.abstracts.WithUser +import dev.inmo.tgbotapi.requests.send.payments.CreateInvoiceLink +import dev.inmo.tgbotapi.requests.send.payments.SendInvoice +import dev.inmo.tgbotapi.types.ChatInviteLink +import dev.inmo.tgbotapi.types.ChatInviteLinkUnlimited +import dev.inmo.tgbotapi.types.ChatInviteLinkWithJoinRequest +import dev.inmo.tgbotapi.types.ChatInviteLinkWithLimitedMembers +import dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.BaseChosenInlineResult +import dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.ChosenInlineResult +import dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.LocationChosenInlineResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultAudioCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultAudioImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultContact +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultDocumentCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultDocumentImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGame +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGifCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGifImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultLocation +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultMpeg4GifCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultMpeg4GifImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultPhotoCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultPhotoImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultStickerCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVenue +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVideoCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVideoImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVoiceCachedImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVoiceImpl +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.DescribedInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.FileInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.InlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.OptionallyTitledInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.SizedInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbSizedInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbedInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbedWithMimeTypeInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.TitledInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.UrlInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.WithInputMessageContentInlineQueryResult +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudio +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudioCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudioCommon +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocument +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocumentCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocumentCommon +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGif +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGifCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGifCommon +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4Gif +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4GifCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4GifCommon +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhoto +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhotoCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhotoCommon +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideo +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideoCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideoCommon +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoice +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoiceCached +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoiceCommon +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputContactMessageContent +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputLocationMessageContent +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputMessageContent +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputVenueMessageContent +import dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery +import dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery +import dev.inmo.tgbotapi.types.InlineQueries.query.LocationInlineQuery +import dev.inmo.tgbotapi.types.PrimaryInviteLink +import dev.inmo.tgbotapi.types.SecondaryChatInviteLink +import dev.inmo.tgbotapi.types.actions.BotAction +import dev.inmo.tgbotapi.types.actions.ChooseStickerAction +import dev.inmo.tgbotapi.types.actions.CustomBotAction +import dev.inmo.tgbotapi.types.actions.FindLocationAction +import dev.inmo.tgbotapi.types.actions.RecordVideoAction +import dev.inmo.tgbotapi.types.actions.RecordVideoNoteAction +import dev.inmo.tgbotapi.types.actions.RecordVoiceAction +import dev.inmo.tgbotapi.types.actions.TypingAction +import dev.inmo.tgbotapi.types.actions.UploadDocumentAction +import dev.inmo.tgbotapi.types.actions.UploadPhotoAction +import dev.inmo.tgbotapi.types.actions.UploadVideoAction +import dev.inmo.tgbotapi.types.actions.UploadVideoNoteAction +import dev.inmo.tgbotapi.types.actions.UploadVoiceAction +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackGameInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.InlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.LoginURLInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.PayInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryCurrentChatInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.URLInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.UnknownInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.WebAppInlineKeyboardButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup +import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup +import dev.inmo.tgbotapi.types.buttons.ReplyForce +import dev.inmo.tgbotapi.types.buttons.ReplyKeyboardMarkup +import dev.inmo.tgbotapi.types.buttons.ReplyKeyboardRemove +import dev.inmo.tgbotapi.types.chat.AbleToAddInAttachmentMenuChat +import dev.inmo.tgbotapi.types.chat.Bot +import dev.inmo.tgbotapi.types.chat.ChannelChat +import dev.inmo.tgbotapi.types.chat.ChannelChatImpl +import dev.inmo.tgbotapi.types.chat.Chat +import dev.inmo.tgbotapi.types.chat.ChatJoinRequest +import dev.inmo.tgbotapi.types.chat.CommonBot +import dev.inmo.tgbotapi.types.chat.CommonUser +import dev.inmo.tgbotapi.types.chat.ExtendedBot +import dev.inmo.tgbotapi.types.chat.ExtendedChannelChat +import dev.inmo.tgbotapi.types.chat.ExtendedChannelChatImpl +import dev.inmo.tgbotapi.types.chat.ExtendedChat +import dev.inmo.tgbotapi.types.chat.ExtendedGroupChat +import dev.inmo.tgbotapi.types.chat.ExtendedGroupChatImpl +import dev.inmo.tgbotapi.types.chat.ExtendedPrivateChat +import dev.inmo.tgbotapi.types.chat.ExtendedPrivateChatImpl +import dev.inmo.tgbotapi.types.chat.ExtendedPublicChat +import dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChat +import dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChatImpl +import dev.inmo.tgbotapi.types.chat.GroupChat +import dev.inmo.tgbotapi.types.chat.GroupChatImpl +import dev.inmo.tgbotapi.types.chat.PossiblyPremiumChat +import dev.inmo.tgbotapi.types.chat.PrivateChat +import dev.inmo.tgbotapi.types.chat.PrivateChatImpl +import dev.inmo.tgbotapi.types.chat.PublicChat +import dev.inmo.tgbotapi.types.chat.SuperPublicChat +import dev.inmo.tgbotapi.types.chat.SupergroupChat +import dev.inmo.tgbotapi.types.chat.SupergroupChatImpl +import dev.inmo.tgbotapi.types.chat.UnknownChatType +import dev.inmo.tgbotapi.types.chat.UnknownExtendedChat +import dev.inmo.tgbotapi.types.chat.User +import dev.inmo.tgbotapi.types.chat.UsernameChat +import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember +import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMemberImpl +import dev.inmo.tgbotapi.types.chat.member.BannedChatMember +import dev.inmo.tgbotapi.types.chat.member.ChatMember +import dev.inmo.tgbotapi.types.chat.member.KickedChatMember +import dev.inmo.tgbotapi.types.chat.member.LeftChatMember +import dev.inmo.tgbotapi.types.chat.member.LeftChatMemberImpl +import dev.inmo.tgbotapi.types.chat.member.MemberChatMember +import dev.inmo.tgbotapi.types.chat.member.MemberChatMemberImpl +import dev.inmo.tgbotapi.types.chat.member.OwnerChatMember +import dev.inmo.tgbotapi.types.chat.member.RestrictedChatMember +import dev.inmo.tgbotapi.types.chat.member.SpecialRightsChatMember +import dev.inmo.tgbotapi.types.dice.BasketballDiceAnimationType +import dev.inmo.tgbotapi.types.dice.BowlingDiceAnimationType +import dev.inmo.tgbotapi.types.dice.CubeDiceAnimationType +import dev.inmo.tgbotapi.types.dice.CustomDiceAnimationType +import dev.inmo.tgbotapi.types.dice.DartsDiceAnimationType +import dev.inmo.tgbotapi.types.dice.DiceAnimationType +import dev.inmo.tgbotapi.types.dice.FootballDiceAnimationType +import dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType +import dev.inmo.tgbotapi.types.files.AnimatedSticker +import dev.inmo.tgbotapi.types.files.AnimationFile +import dev.inmo.tgbotapi.types.files.AudioFile +import dev.inmo.tgbotapi.types.files.DocumentFile +import dev.inmo.tgbotapi.types.files.File +import dev.inmo.tgbotapi.types.files.MimedMediaFile +import dev.inmo.tgbotapi.types.files.PassportFile +import dev.inmo.tgbotapi.types.files.PathedFile +import dev.inmo.tgbotapi.types.files.PhotoSize +import dev.inmo.tgbotapi.types.files.PlayableMediaFile +import dev.inmo.tgbotapi.types.files.SimpleSticker +import dev.inmo.tgbotapi.types.files.SizedMediaFile +import dev.inmo.tgbotapi.types.files.Sticker +import dev.inmo.tgbotapi.types.files.TelegramMediaFile +import dev.inmo.tgbotapi.types.files.ThumbedMediaFile +import dev.inmo.tgbotapi.types.files.VideoFile +import dev.inmo.tgbotapi.types.files.VideoNoteFile +import dev.inmo.tgbotapi.types.files.VideoSticker +import dev.inmo.tgbotapi.types.files.VoiceFile +import dev.inmo.tgbotapi.types.location.LiveLocation +import dev.inmo.tgbotapi.types.location.Location +import dev.inmo.tgbotapi.types.location.StaticLocation +import dev.inmo.tgbotapi.types.media.AudioMediaGroupMemberTelegramMedia +import dev.inmo.tgbotapi.types.media.DocumentMediaGroupMemberTelegramMedia +import dev.inmo.tgbotapi.types.media.DuratedTelegramMedia +import dev.inmo.tgbotapi.types.media.MediaGroupMemberTelegramMedia +import dev.inmo.tgbotapi.types.media.SizedTelegramMedia +import dev.inmo.tgbotapi.types.media.TelegramMedia +import dev.inmo.tgbotapi.types.media.TelegramMediaAnimation +import dev.inmo.tgbotapi.types.media.TelegramMediaAudio +import dev.inmo.tgbotapi.types.media.TelegramMediaDocument +import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto +import dev.inmo.tgbotapi.types.media.TelegramMediaVideo +import dev.inmo.tgbotapi.types.media.ThumbedTelegramMedia +import dev.inmo.tgbotapi.types.media.TitledTelegramMedia +import dev.inmo.tgbotapi.types.media.VisualMediaGroupMemberTelegramMedia +import dev.inmo.tgbotapi.types.message.AnonymousGroupContentMessageImpl +import dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl +import dev.inmo.tgbotapi.types.message.ChannelEventMessage +import dev.inmo.tgbotapi.types.message.ChannelMediaGroupMessage +import dev.inmo.tgbotapi.types.message.ChatEvents.ChannelChatCreated +import dev.inmo.tgbotapi.types.message.ChatEvents.DeleteChatPhoto +import dev.inmo.tgbotapi.types.message.ChatEvents.GroupChatCreated +import dev.inmo.tgbotapi.types.message.ChatEvents.LeftChatMemberEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.MessageAutoDeleteTimerChanged +import dev.inmo.tgbotapi.types.message.ChatEvents.MigratedToSupergroup +import dev.inmo.tgbotapi.types.message.ChatEvents.NewChatMembers +import dev.inmo.tgbotapi.types.message.ChatEvents.NewChatPhoto +import dev.inmo.tgbotapi.types.message.ChatEvents.NewChatTitle +import dev.inmo.tgbotapi.types.message.ChatEvents.PinnedMessage +import dev.inmo.tgbotapi.types.message.ChatEvents.ProximityAlertTriggered +import dev.inmo.tgbotapi.types.message.ChatEvents.SupergroupChatCreated +import dev.inmo.tgbotapi.types.message.ChatEvents.UserLoggedIn +import dev.inmo.tgbotapi.types.message.ChatEvents.WebAppData +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.GroupEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PrivateEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.SupergroupEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.VideoChatEvent +import dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatEnded +import dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatParticipantsInvited +import dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatScheduled +import dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatStarted +import dev.inmo.tgbotapi.types.message.CommonGroupContentMessageImpl +import dev.inmo.tgbotapi.types.message.CommonGroupEventMessage +import dev.inmo.tgbotapi.types.message.CommonMediaGroupMessage +import dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage +import dev.inmo.tgbotapi.types.message.ConnectedFromChannelGroupContentMessageImpl +import dev.inmo.tgbotapi.types.message.ForwardInfo +import dev.inmo.tgbotapi.types.message.PassportMessage +import dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl +import dev.inmo.tgbotapi.types.message.PrivateEventMessage +import dev.inmo.tgbotapi.types.message.UnconnectedFromChannelGroupContentMessageImpl +import dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage +import dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.FromChannelGroupContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage +import dev.inmo.tgbotapi.types.message.abstracts.GroupContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage +import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage +import dev.inmo.tgbotapi.types.message.abstracts.Message +import dev.inmo.tgbotapi.types.message.abstracts.PossiblyEditedMessage +import dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage +import dev.inmo.tgbotapi.types.message.abstracts.PossiblyPaymentMessage +import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage +import dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.PublicContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.SignedMessage +import dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage +import dev.inmo.tgbotapi.types.message.abstracts.UnconnectedFromChannelGroupContentMessage +import dev.inmo.tgbotapi.types.message.abstracts.UnknownMessageType +import dev.inmo.tgbotapi.types.message.content.AnimationContent +import dev.inmo.tgbotapi.types.message.content.AudioContent +import dev.inmo.tgbotapi.types.message.content.AudioMediaGroupContent +import dev.inmo.tgbotapi.types.message.content.ContactContent +import dev.inmo.tgbotapi.types.message.content.DiceContent +import dev.inmo.tgbotapi.types.message.content.DocumentContent +import dev.inmo.tgbotapi.types.message.content.DocumentMediaGroupContent +import dev.inmo.tgbotapi.types.message.content.GameContent +import dev.inmo.tgbotapi.types.message.content.InvoiceContent +import dev.inmo.tgbotapi.types.message.content.LiveLocationContent +import dev.inmo.tgbotapi.types.message.content.LocationContent +import dev.inmo.tgbotapi.types.message.content.MediaCollectionContent +import dev.inmo.tgbotapi.types.message.content.MediaContent +import dev.inmo.tgbotapi.types.message.content.MediaGroupContent +import dev.inmo.tgbotapi.types.message.content.MessageContent +import dev.inmo.tgbotapi.types.message.content.PhotoContent +import dev.inmo.tgbotapi.types.message.content.PollContent +import dev.inmo.tgbotapi.types.message.content.ResendableContent +import dev.inmo.tgbotapi.types.message.content.StaticLocationContent +import dev.inmo.tgbotapi.types.message.content.StickerContent +import dev.inmo.tgbotapi.types.message.content.TextContent +import dev.inmo.tgbotapi.types.message.content.TextedMediaContent +import dev.inmo.tgbotapi.types.message.content.VenueContent +import dev.inmo.tgbotapi.types.message.content.VideoContent +import dev.inmo.tgbotapi.types.message.content.VideoNoteContent +import dev.inmo.tgbotapi.types.message.content.VisualMediaGroupContent +import dev.inmo.tgbotapi.types.message.content.VoiceContent +import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent +import dev.inmo.tgbotapi.types.message.textsources.BoldTextSource +import dev.inmo.tgbotapi.types.message.textsources.BotCommandTextSource +import dev.inmo.tgbotapi.types.message.textsources.CashTagTextSource +import dev.inmo.tgbotapi.types.message.textsources.CodeTextSource +import dev.inmo.tgbotapi.types.message.textsources.EMailTextSource +import dev.inmo.tgbotapi.types.message.textsources.HashTagTextSource +import dev.inmo.tgbotapi.types.message.textsources.ItalicTextSource +import dev.inmo.tgbotapi.types.message.textsources.MentionTextSource +import dev.inmo.tgbotapi.types.message.textsources.MultilevelTextSource +import dev.inmo.tgbotapi.types.message.textsources.PhoneNumberTextSource +import dev.inmo.tgbotapi.types.message.textsources.PreTextSource +import dev.inmo.tgbotapi.types.message.textsources.RegularTextSource +import dev.inmo.tgbotapi.types.message.textsources.SpoilerTextSource +import dev.inmo.tgbotapi.types.message.textsources.StrikethroughTextSource +import dev.inmo.tgbotapi.types.message.textsources.TextLinkTextSource +import dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource +import dev.inmo.tgbotapi.types.message.textsources.TextSource +import dev.inmo.tgbotapi.types.message.textsources.URLTextSource +import dev.inmo.tgbotapi.types.message.textsources.UnderlineTextSource +import dev.inmo.tgbotapi.types.passport.PassportElementError +import dev.inmo.tgbotapi.types.passport.PassportElementErrorDataField +import dev.inmo.tgbotapi.types.passport.PassportElementErrorFile +import dev.inmo.tgbotapi.types.passport.PassportElementErrorFiles +import dev.inmo.tgbotapi.types.passport.PassportElementErrorFrontSide +import dev.inmo.tgbotapi.types.passport.PassportElementErrorReverseSide +import dev.inmo.tgbotapi.types.passport.PassportElementErrorSelfie +import dev.inmo.tgbotapi.types.passport.PassportElementErrorTranslationFile +import dev.inmo.tgbotapi.types.passport.PassportElementErrorTranslationFiles +import dev.inmo.tgbotapi.types.passport.PassportElementErrorUnspecified +import dev.inmo.tgbotapi.types.passport.PassportElementFileError +import dev.inmo.tgbotapi.types.passport.PassportElementFilesError +import dev.inmo.tgbotapi.types.passport.PassportMultipleElementsError +import dev.inmo.tgbotapi.types.passport.PassportSingleElementError +import dev.inmo.tgbotapi.types.passport.UnknownPassportElementError +import dev.inmo.tgbotapi.types.passport.decrypted.AddressSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.BankStatementSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.CommonPassportSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.DriverLicenseSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.IdentityCardSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.IdentityWithReverseSideSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.InternalPassportSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.OtherDocumentsSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.PassportRegistrationSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.PassportSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.PersonalDetailsSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.RentalAgreementSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.TemporalRegistrationSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.UtilityBillSecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValue +import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueIdentity +import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithData +import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithFiles +import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithReverseSide +import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithTranslations +import dev.inmo.tgbotapi.types.passport.encrypted.BankStatement +import dev.inmo.tgbotapi.types.passport.encrypted.CommonPassport +import dev.inmo.tgbotapi.types.passport.encrypted.DriverLicense +import dev.inmo.tgbotapi.types.passport.encrypted.Email +import dev.inmo.tgbotapi.types.passport.encrypted.EncryptedAddress +import dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPassportElementWithTranslatableFilesCollection +import dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPassportElementWithTranslatableIDDocument +import dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPersonalDetails +import dev.inmo.tgbotapi.types.passport.encrypted.IdentityCard +import dev.inmo.tgbotapi.types.passport.encrypted.InternalPassport +import dev.inmo.tgbotapi.types.passport.encrypted.Passport +import dev.inmo.tgbotapi.types.passport.encrypted.PassportRegistration +import dev.inmo.tgbotapi.types.passport.encrypted.PhoneNumber +import dev.inmo.tgbotapi.types.passport.encrypted.RentalAgreement +import dev.inmo.tgbotapi.types.passport.encrypted.TemporaryRegistration +import dev.inmo.tgbotapi.types.passport.encrypted.UtilityBill +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElement +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementTranslatable +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithData +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithEmail +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithFilesCollection +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithFrontSide +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithPhoneNumber +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithReverseSide +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithSelfie +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.UnknownEncryptedPassportElement +import dev.inmo.tgbotapi.types.payments.PreCheckoutQuery +import dev.inmo.tgbotapi.types.payments.ShippingQuery +import dev.inmo.tgbotapi.types.polls.ApproximateScheduledCloseInfo +import dev.inmo.tgbotapi.types.polls.ExactScheduledCloseInfo +import dev.inmo.tgbotapi.types.polls.MultipleAnswersPoll +import dev.inmo.tgbotapi.types.polls.Poll +import dev.inmo.tgbotapi.types.polls.PollAnswer +import dev.inmo.tgbotapi.types.polls.QuizPoll +import dev.inmo.tgbotapi.types.polls.RegularPoll +import dev.inmo.tgbotapi.types.polls.ScheduledCloseInfo +import dev.inmo.tgbotapi.types.polls.UnknownPollType +import dev.inmo.tgbotapi.types.queries.callback.CallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.DataCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.GameShortNameCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdDataCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdGameShortNameCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.MessageCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.MessageDataCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.MessageGameShortNameCallbackQuery +import dev.inmo.tgbotapi.types.queries.callback.UnknownCallbackQueryType +import dev.inmo.tgbotapi.types.update.CallbackQueryUpdate +import dev.inmo.tgbotapi.types.update.ChannelPostUpdate +import dev.inmo.tgbotapi.types.update.ChatJoinRequestUpdate +import dev.inmo.tgbotapi.types.update.ChosenInlineResultUpdate +import dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate +import dev.inmo.tgbotapi.types.update.EditChannelPostUpdate +import dev.inmo.tgbotapi.types.update.EditMessageUpdate +import dev.inmo.tgbotapi.types.update.InlineQueryUpdate +import dev.inmo.tgbotapi.types.update.MessageUpdate +import dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate +import dev.inmo.tgbotapi.types.update.PollAnswerUpdate +import dev.inmo.tgbotapi.types.update.PollUpdate +import dev.inmo.tgbotapi.types.update.PreCheckoutQueryUpdate +import dev.inmo.tgbotapi.types.update.ShippingQueryUpdate +import dev.inmo.tgbotapi.types.update.abstracts.BaseEditMessageUpdate +import dev.inmo.tgbotapi.types.update.abstracts.BaseMessageUpdate +import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate +import dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate +import dev.inmo.tgbotapi.types.update.abstracts.UnknownUpdate +import dev.inmo.tgbotapi.types.update.abstracts.Update +import dev.inmo.tgbotapi.types.update.media_group.ChannelPostMediaGroupUpdate +import dev.inmo.tgbotapi.types.update.media_group.EditChannelPostMediaGroupUpdate +import dev.inmo.tgbotapi.types.update.media_group.EditMediaGroupUpdate +import dev.inmo.tgbotapi.types.update.media_group.EditMessageMediaGroupUpdate +import dev.inmo.tgbotapi.types.update.media_group.MediaGroupUpdate +import dev.inmo.tgbotapi.types.update.media_group.MessageMediaGroupUpdate +import dev.inmo.tgbotapi.types.update.media_group.SentMediaGroupUpdate + +public inline fun CommonSendInvoiceData.createInvoiceLinkOrNull(): CreateInvoiceLink? = this as? + dev.inmo.tgbotapi.requests.send.payments.CreateInvoiceLink + +public inline fun CommonSendInvoiceData.createInvoiceLinkOrThrow(): CreateInvoiceLink = this as + dev.inmo.tgbotapi.requests.send.payments.CreateInvoiceLink + +public inline fun CommonSendInvoiceData.ifCreateInvoiceLink(block: (CreateInvoiceLink) -> T): T? + = createInvoiceLinkOrNull() ?.let(block) + +public inline fun CommonSendInvoiceData.sendInvoiceOrNull(): SendInvoice? = this as? + dev.inmo.tgbotapi.requests.send.payments.SendInvoice + +public inline fun CommonSendInvoiceData.sendInvoiceOrThrow(): SendInvoice = this as + dev.inmo.tgbotapi.requests.send.payments.SendInvoice + +public inline fun CommonSendInvoiceData.ifSendInvoice(block: (SendInvoice) -> T): T? = + sendInvoiceOrNull() ?.let(block) + +public inline fun CommonSendInvoiceData.inputInvoiceMessageContentOrNull(): + InputInvoiceMessageContent? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent + +public inline fun CommonSendInvoiceData.inputInvoiceMessageContentOrThrow(): + InputInvoiceMessageContent = this as + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent + +public inline fun + CommonSendInvoiceData.ifInputInvoiceMessageContent(block: (InputInvoiceMessageContent) -> T): T? + = inputInvoiceMessageContentOrNull() ?.let(block) + +public inline fun WithUser.fromUserOrNull(): FromUser? = this as? + dev.inmo.tgbotapi.abstracts.FromUser + +public inline fun WithUser.fromUserOrThrow(): FromUser = this as + dev.inmo.tgbotapi.abstracts.FromUser + +public inline fun WithUser.ifFromUser(block: (FromUser) -> T): T? = fromUserOrNull() + ?.let(block) + +public inline fun WithUser.chatInviteLinkOrNull(): ChatInviteLink? = this as? + dev.inmo.tgbotapi.types.ChatInviteLink + +public inline fun WithUser.chatInviteLinkOrThrow(): ChatInviteLink = this as + dev.inmo.tgbotapi.types.ChatInviteLink + +public inline fun WithUser.ifChatInviteLink(block: (ChatInviteLink) -> T): T? = + chatInviteLinkOrNull() ?.let(block) + +public inline fun WithUser.secondaryChatInviteLinkOrNull(): SecondaryChatInviteLink? = this as? + dev.inmo.tgbotapi.types.SecondaryChatInviteLink + +public inline fun WithUser.secondaryChatInviteLinkOrThrow(): SecondaryChatInviteLink = this as + dev.inmo.tgbotapi.types.SecondaryChatInviteLink + +public inline fun WithUser.ifSecondaryChatInviteLink(block: (SecondaryChatInviteLink) -> T): T? + = secondaryChatInviteLinkOrNull() ?.let(block) + +public inline fun WithUser.primaryInviteLinkOrNull(): PrimaryInviteLink? = this as? + dev.inmo.tgbotapi.types.PrimaryInviteLink + +public inline fun WithUser.primaryInviteLinkOrThrow(): PrimaryInviteLink = this as + dev.inmo.tgbotapi.types.PrimaryInviteLink + +public inline fun WithUser.ifPrimaryInviteLink(block: (PrimaryInviteLink) -> T): T? = + primaryInviteLinkOrNull() ?.let(block) + +public inline fun WithUser.chatInviteLinkWithJoinRequestOrNull(): ChatInviteLinkWithJoinRequest? = + this as? dev.inmo.tgbotapi.types.ChatInviteLinkWithJoinRequest + +public inline fun WithUser.chatInviteLinkWithJoinRequestOrThrow(): ChatInviteLinkWithJoinRequest = + this as dev.inmo.tgbotapi.types.ChatInviteLinkWithJoinRequest + +public inline fun + WithUser.ifChatInviteLinkWithJoinRequest(block: (ChatInviteLinkWithJoinRequest) -> T): T? = + chatInviteLinkWithJoinRequestOrNull() ?.let(block) + +public inline fun WithUser.chatInviteLinkWithLimitedMembersOrNull(): + ChatInviteLinkWithLimitedMembers? = this as? + dev.inmo.tgbotapi.types.ChatInviteLinkWithLimitedMembers + +public inline fun WithUser.chatInviteLinkWithLimitedMembersOrThrow(): + ChatInviteLinkWithLimitedMembers = this as + dev.inmo.tgbotapi.types.ChatInviteLinkWithLimitedMembers + +public inline fun + WithUser.ifChatInviteLinkWithLimitedMembers(block: (ChatInviteLinkWithLimitedMembers) -> T): T? + = chatInviteLinkWithLimitedMembersOrNull() ?.let(block) + +public inline fun WithUser.chatInviteLinkUnlimitedOrNull(): ChatInviteLinkUnlimited? = this as? + dev.inmo.tgbotapi.types.ChatInviteLinkUnlimited + +public inline fun WithUser.chatInviteLinkUnlimitedOrThrow(): ChatInviteLinkUnlimited = this as + dev.inmo.tgbotapi.types.ChatInviteLinkUnlimited + +public inline fun WithUser.ifChatInviteLinkUnlimited(block: (ChatInviteLinkUnlimited) -> T): T? + = chatInviteLinkUnlimitedOrNull() ?.let(block) + +public inline fun WithUser.baseChosenInlineResultOrNull(): BaseChosenInlineResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.BaseChosenInlineResult + +public inline fun WithUser.baseChosenInlineResultOrThrow(): BaseChosenInlineResult = this as + dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.BaseChosenInlineResult + +public inline fun WithUser.ifBaseChosenInlineResult(block: (BaseChosenInlineResult) -> T): T? = + baseChosenInlineResultOrNull() ?.let(block) + +public inline fun WithUser.chosenInlineResultOrNull(): ChosenInlineResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.ChosenInlineResult + +public inline fun WithUser.chosenInlineResultOrThrow(): ChosenInlineResult = this as + dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.ChosenInlineResult + +public inline fun WithUser.ifChosenInlineResult(block: (ChosenInlineResult) -> T): T? = + chosenInlineResultOrNull() ?.let(block) + +public inline fun WithUser.locationChosenInlineResultOrNull(): LocationChosenInlineResult? = this + as? dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.LocationChosenInlineResult + +public inline fun WithUser.locationChosenInlineResultOrThrow(): LocationChosenInlineResult = this as + dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.LocationChosenInlineResult + +public inline fun + WithUser.ifLocationChosenInlineResult(block: (LocationChosenInlineResult) -> T): T? = + locationChosenInlineResultOrNull() ?.let(block) + +public inline fun WithUser.baseInlineQueryOrNull(): BaseInlineQuery? = this as? + dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery + +public inline fun WithUser.baseInlineQueryOrThrow(): BaseInlineQuery = this as + dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery + +public inline fun WithUser.ifBaseInlineQuery(block: (BaseInlineQuery) -> T): T? = + baseInlineQueryOrNull() ?.let(block) + +public inline fun WithUser.inlineQueryOrNull(): InlineQuery? = this as? + dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery + +public inline fun WithUser.inlineQueryOrThrow(): InlineQuery = this as + dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery + +public inline fun WithUser.ifInlineQuery(block: (InlineQuery) -> T): T? = inlineQueryOrNull() + ?.let(block) + +public inline fun WithUser.locationInlineQueryOrNull(): LocationInlineQuery? = this as? + dev.inmo.tgbotapi.types.InlineQueries.query.LocationInlineQuery + +public inline fun WithUser.locationInlineQueryOrThrow(): LocationInlineQuery = this as + dev.inmo.tgbotapi.types.InlineQueries.query.LocationInlineQuery + +public inline fun WithUser.ifLocationInlineQuery(block: (LocationInlineQuery) -> T): T? = + locationInlineQueryOrNull() ?.let(block) + +public inline fun WithUser.chatJoinRequestOrNull(): ChatJoinRequest? = this as? + dev.inmo.tgbotapi.types.chat.ChatJoinRequest + +public inline fun WithUser.chatJoinRequestOrThrow(): ChatJoinRequest = this as + dev.inmo.tgbotapi.types.chat.ChatJoinRequest + +public inline fun WithUser.ifChatJoinRequest(block: (ChatJoinRequest) -> T): T? = + chatJoinRequestOrNull() ?.let(block) + +public inline fun WithUser.administratorChatMemberOrNull(): AdministratorChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember + +public inline fun WithUser.administratorChatMemberOrThrow(): AdministratorChatMember = this as + dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember + +public inline fun WithUser.ifAdministratorChatMember(block: (AdministratorChatMember) -> T): T? + = administratorChatMemberOrNull() ?.let(block) + +public inline fun WithUser.administratorChatMemberImplOrNull(): AdministratorChatMemberImpl? = this + as? dev.inmo.tgbotapi.types.chat.member.AdministratorChatMemberImpl + +public inline fun WithUser.administratorChatMemberImplOrThrow(): AdministratorChatMemberImpl = this + as dev.inmo.tgbotapi.types.chat.member.AdministratorChatMemberImpl + +public inline fun + WithUser.ifAdministratorChatMemberImpl(block: (AdministratorChatMemberImpl) -> T): T? = + administratorChatMemberImplOrNull() ?.let(block) + +public inline fun WithUser.bannedChatMemberOrNull(): BannedChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.BannedChatMember + +public inline fun WithUser.bannedChatMemberOrThrow(): BannedChatMember = this as + dev.inmo.tgbotapi.types.chat.member.BannedChatMember + +public inline fun WithUser.ifBannedChatMember(block: (BannedChatMember) -> T): T? = + bannedChatMemberOrNull() ?.let(block) + +public inline fun WithUser.chatMemberOrNull(): ChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.ChatMember + +public inline fun WithUser.chatMemberOrThrow(): ChatMember = this as + dev.inmo.tgbotapi.types.chat.member.ChatMember + +public inline fun WithUser.ifChatMember(block: (ChatMember) -> T): T? = chatMemberOrNull() + ?.let(block) + +public inline fun WithUser.kickedChatMemberOrNull(): KickedChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.KickedChatMember + +public inline fun WithUser.kickedChatMemberOrThrow(): KickedChatMember = this as + dev.inmo.tgbotapi.types.chat.member.KickedChatMember + +public inline fun WithUser.ifKickedChatMember(block: (KickedChatMember) -> T): T? = + kickedChatMemberOrNull() ?.let(block) + +public inline fun WithUser.leftChatMemberOrNull(): LeftChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.LeftChatMember + +public inline fun WithUser.leftChatMemberOrThrow(): LeftChatMember = this as + dev.inmo.tgbotapi.types.chat.member.LeftChatMember + +public inline fun WithUser.ifLeftChatMember(block: (LeftChatMember) -> T): T? = + leftChatMemberOrNull() ?.let(block) + +public inline fun WithUser.leftChatMemberImplOrNull(): LeftChatMemberImpl? = this as? + dev.inmo.tgbotapi.types.chat.member.LeftChatMemberImpl + +public inline fun WithUser.leftChatMemberImplOrThrow(): LeftChatMemberImpl = this as + dev.inmo.tgbotapi.types.chat.member.LeftChatMemberImpl + +public inline fun WithUser.ifLeftChatMemberImpl(block: (LeftChatMemberImpl) -> T): T? = + leftChatMemberImplOrNull() ?.let(block) + +public inline fun WithUser.memberChatMemberOrNull(): MemberChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.MemberChatMember + +public inline fun WithUser.memberChatMemberOrThrow(): MemberChatMember = this as + dev.inmo.tgbotapi.types.chat.member.MemberChatMember + +public inline fun WithUser.ifMemberChatMember(block: (MemberChatMember) -> T): T? = + memberChatMemberOrNull() ?.let(block) + +public inline fun WithUser.memberChatMemberImplOrNull(): MemberChatMemberImpl? = this as? + dev.inmo.tgbotapi.types.chat.member.MemberChatMemberImpl + +public inline fun WithUser.memberChatMemberImplOrThrow(): MemberChatMemberImpl = this as + dev.inmo.tgbotapi.types.chat.member.MemberChatMemberImpl + +public inline fun WithUser.ifMemberChatMemberImpl(block: (MemberChatMemberImpl) -> T): T? = + memberChatMemberImplOrNull() ?.let(block) + +public inline fun WithUser.ownerChatMemberOrNull(): OwnerChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.OwnerChatMember + +public inline fun WithUser.ownerChatMemberOrThrow(): OwnerChatMember = this as + dev.inmo.tgbotapi.types.chat.member.OwnerChatMember + +public inline fun WithUser.ifOwnerChatMember(block: (OwnerChatMember) -> T): T? = + ownerChatMemberOrNull() ?.let(block) + +public inline fun WithUser.restrictedChatMemberOrNull(): RestrictedChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.RestrictedChatMember + +public inline fun WithUser.restrictedChatMemberOrThrow(): RestrictedChatMember = this as + dev.inmo.tgbotapi.types.chat.member.RestrictedChatMember + +public inline fun WithUser.ifRestrictedChatMember(block: (RestrictedChatMember) -> T): T? = + restrictedChatMemberOrNull() ?.let(block) + +public inline fun WithUser.specialRightsChatMemberOrNull(): SpecialRightsChatMember? = this as? + dev.inmo.tgbotapi.types.chat.member.SpecialRightsChatMember + +public inline fun WithUser.specialRightsChatMemberOrThrow(): SpecialRightsChatMember = this as + dev.inmo.tgbotapi.types.chat.member.SpecialRightsChatMember + +public inline fun WithUser.ifSpecialRightsChatMember(block: (SpecialRightsChatMember) -> T): T? + = specialRightsChatMemberOrNull() ?.let(block) + +public inline fun WithUser.leftChatMemberEventOrNull(): LeftChatMemberEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.LeftChatMemberEvent + +public inline fun WithUser.leftChatMemberEventOrThrow(): LeftChatMemberEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.LeftChatMemberEvent + +public inline fun WithUser.ifLeftChatMemberEvent(block: (LeftChatMemberEvent) -> T): T? = + leftChatMemberEventOrNull() ?.let(block) + +public inline fun WithUser.commonGroupEventMessageOrNull(): CommonGroupEventMessage? = + this as? + dev.inmo.tgbotapi.types.message.CommonGroupEventMessage + +public inline fun WithUser.commonGroupEventMessageOrThrow(): CommonGroupEventMessage = + this as + dev.inmo.tgbotapi.types.message.CommonGroupEventMessage + +public inline fun + WithUser.ifCommonGroupEventMessage(block: (CommonGroupEventMessage) -> T): T? = + commonGroupEventMessageOrNull() ?.let(block) + +public inline fun WithUser.commonMediaGroupMessageOrNull(): + CommonMediaGroupMessage? = this as? + dev.inmo.tgbotapi.types.message.CommonMediaGroupMessage + +public inline fun WithUser.commonMediaGroupMessageOrThrow(): + CommonMediaGroupMessage = this as + dev.inmo.tgbotapi.types.message.CommonMediaGroupMessage + +public inline fun + WithUser.ifCommonMediaGroupMessage(block: (CommonMediaGroupMessage) -> T): T? + = commonMediaGroupMessageOrNull() ?.let(block) + +public inline fun WithUser.commonSupergroupEventMessageOrNull(): + CommonSupergroupEventMessage? = this as? + dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage + +public inline fun WithUser.commonSupergroupEventMessageOrThrow(): + CommonSupergroupEventMessage = this as + dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage + +public inline fun + WithUser.ifCommonSupergroupEventMessage(block: (CommonSupergroupEventMessage) -> T): + T? = commonSupergroupEventMessageOrNull() ?.let(block) + +public inline fun WithUser.commonGroupContentMessageImplOrNull(): + CommonGroupContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.CommonGroupContentMessageImpl + +public inline fun WithUser.commonGroupContentMessageImplOrThrow(): + CommonGroupContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.CommonGroupContentMessageImpl + +public inline fun + WithUser.ifCommonGroupContentMessageImpl(block: (CommonGroupContentMessageImpl) -> T): + T? = commonGroupContentMessageImplOrNull() ?.let(block) + +public inline fun WithUser.passportMessageOrNull(): PassportMessage? = this as? + dev.inmo.tgbotapi.types.message.PassportMessage + +public inline fun WithUser.passportMessageOrThrow(): PassportMessage = this as + dev.inmo.tgbotapi.types.message.PassportMessage + +public inline fun WithUser.ifPassportMessage(block: (PassportMessage) -> T): T? = + passportMessageOrNull() ?.let(block) + +public inline fun WithUser.privateContentMessageImplOrNull(): + PrivateContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl + +public inline fun WithUser.privateContentMessageImplOrThrow(): + PrivateContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl + +public inline fun + WithUser.ifPrivateContentMessageImpl(block: (PrivateContentMessageImpl) -> T): + T? = privateContentMessageImplOrNull() ?.let(block) + +public inline fun WithUser.fromUserMessageOrNull(): FromUserMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage + +public inline fun WithUser.fromUserMessageOrThrow(): FromUserMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage + +public inline fun WithUser.ifFromUserMessage(block: (FromUserMessage) -> T): T? = + fromUserMessageOrNull() ?.let(block) + +public inline fun WithUser.groupEventMessageOrNull(): GroupEventMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage + +public inline fun WithUser.groupEventMessageOrThrow(): GroupEventMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage + +public inline fun WithUser.ifGroupEventMessage(block: (GroupEventMessage) -> T): T? + = groupEventMessageOrNull() ?.let(block) + +public inline fun WithUser.commonGroupContentMessageOrNull(): + CommonGroupContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage + +public inline fun WithUser.commonGroupContentMessageOrThrow(): + CommonGroupContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage + +public inline fun + WithUser.ifCommonGroupContentMessage(block: (CommonGroupContentMessage) -> T): + T? = commonGroupContentMessageOrNull() ?.let(block) + +public inline fun WithUser.privateContentMessageOrNull(): PrivateContentMessage? = + this as? + dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage + +public inline fun WithUser.privateContentMessageOrThrow(): PrivateContentMessage = + this as + dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage + +public inline fun + WithUser.ifPrivateContentMessage(block: (PrivateContentMessage) -> T): T? = + privateContentMessageOrNull() ?.let(block) + +public inline fun WithUser.supergroupEventMessageOrNull(): SupergroupEventMessage? + = this as? + dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage + +public inline fun WithUser.supergroupEventMessageOrThrow(): SupergroupEventMessage + = this as + dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage + +public inline fun + WithUser.ifSupergroupEventMessage(block: (SupergroupEventMessage) -> T): T? = + supergroupEventMessageOrNull() ?.let(block) + +public inline fun WithUser.preCheckoutQueryOrNull(): PreCheckoutQuery? = this as? + dev.inmo.tgbotapi.types.payments.PreCheckoutQuery + +public inline fun WithUser.preCheckoutQueryOrThrow(): PreCheckoutQuery = this as + dev.inmo.tgbotapi.types.payments.PreCheckoutQuery + +public inline fun WithUser.ifPreCheckoutQuery(block: (PreCheckoutQuery) -> T): T? = + preCheckoutQueryOrNull() ?.let(block) + +public inline fun WithUser.shippingQueryOrNull(): ShippingQuery? = this as? + dev.inmo.tgbotapi.types.payments.ShippingQuery + +public inline fun WithUser.shippingQueryOrThrow(): ShippingQuery = this as + dev.inmo.tgbotapi.types.payments.ShippingQuery + +public inline fun WithUser.ifShippingQuery(block: (ShippingQuery) -> T): T? = + shippingQueryOrNull() ?.let(block) + +public inline fun WithUser.pollAnswerOrNull(): PollAnswer? = this as? + dev.inmo.tgbotapi.types.polls.PollAnswer + +public inline fun WithUser.pollAnswerOrThrow(): PollAnswer = this as + dev.inmo.tgbotapi.types.polls.PollAnswer + +public inline fun WithUser.ifPollAnswer(block: (PollAnswer) -> T): T? = pollAnswerOrNull() + ?.let(block) + +public inline fun WithUser.callbackQueryOrNull(): CallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.CallbackQuery + +public inline fun WithUser.callbackQueryOrThrow(): CallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.CallbackQuery + +public inline fun WithUser.ifCallbackQuery(block: (CallbackQuery) -> T): T? = + callbackQueryOrNull() ?.let(block) + +public inline fun WithUser.unknownCallbackQueryTypeOrNull(): UnknownCallbackQueryType? = this as? + dev.inmo.tgbotapi.types.queries.callback.UnknownCallbackQueryType + +public inline fun WithUser.unknownCallbackQueryTypeOrThrow(): UnknownCallbackQueryType = this as + dev.inmo.tgbotapi.types.queries.callback.UnknownCallbackQueryType + +public inline fun WithUser.ifUnknownCallbackQueryType(block: (UnknownCallbackQueryType) -> T): + T? = unknownCallbackQueryTypeOrNull() ?.let(block) + +public inline fun WithUser.dataCallbackQueryOrNull(): DataCallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.DataCallbackQuery + +public inline fun WithUser.dataCallbackQueryOrThrow(): DataCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.DataCallbackQuery + +public inline fun WithUser.ifDataCallbackQuery(block: (DataCallbackQuery) -> T): T? = + dataCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.gameShortNameCallbackQueryOrNull(): GameShortNameCallbackQuery? = this + as? dev.inmo.tgbotapi.types.queries.callback.GameShortNameCallbackQuery + +public inline fun WithUser.gameShortNameCallbackQueryOrThrow(): GameShortNameCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.GameShortNameCallbackQuery + +public inline fun + WithUser.ifGameShortNameCallbackQuery(block: (GameShortNameCallbackQuery) -> T): T? = + gameShortNameCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.inlineMessageIdCallbackQueryOrNull(): InlineMessageIdCallbackQuery? = + this as? dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdCallbackQuery + +public inline fun WithUser.inlineMessageIdCallbackQueryOrThrow(): InlineMessageIdCallbackQuery = + this as dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdCallbackQuery + +public inline fun + WithUser.ifInlineMessageIdCallbackQuery(block: (InlineMessageIdCallbackQuery) -> T): T? = + inlineMessageIdCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.inlineMessageIdDataCallbackQueryOrNull(): + InlineMessageIdDataCallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdDataCallbackQuery + +public inline fun WithUser.inlineMessageIdDataCallbackQueryOrThrow(): + InlineMessageIdDataCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdDataCallbackQuery + +public inline fun + WithUser.ifInlineMessageIdDataCallbackQuery(block: (InlineMessageIdDataCallbackQuery) -> T): T? + = inlineMessageIdDataCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.inlineMessageIdGameShortNameCallbackQueryOrNull(): + InlineMessageIdGameShortNameCallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdGameShortNameCallbackQuery + +public inline fun WithUser.inlineMessageIdGameShortNameCallbackQueryOrThrow(): + InlineMessageIdGameShortNameCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdGameShortNameCallbackQuery + +public inline fun + WithUser.ifInlineMessageIdGameShortNameCallbackQuery(block: (InlineMessageIdGameShortNameCallbackQuery) -> T): + T? = inlineMessageIdGameShortNameCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.messageCallbackQueryOrNull(): MessageCallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.MessageCallbackQuery + +public inline fun WithUser.messageCallbackQueryOrThrow(): MessageCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.MessageCallbackQuery + +public inline fun WithUser.ifMessageCallbackQuery(block: (MessageCallbackQuery) -> T): T? = + messageCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.messageDataCallbackQueryOrNull(): MessageDataCallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.MessageDataCallbackQuery + +public inline fun WithUser.messageDataCallbackQueryOrThrow(): MessageDataCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.MessageDataCallbackQuery + +public inline fun WithUser.ifMessageDataCallbackQuery(block: (MessageDataCallbackQuery) -> T): + T? = messageDataCallbackQueryOrNull() ?.let(block) + +public inline fun WithUser.messageGameShortNameCallbackQueryOrNull(): + MessageGameShortNameCallbackQuery? = this as? + dev.inmo.tgbotapi.types.queries.callback.MessageGameShortNameCallbackQuery + +public inline fun WithUser.messageGameShortNameCallbackQueryOrThrow(): + MessageGameShortNameCallbackQuery = this as + dev.inmo.tgbotapi.types.queries.callback.MessageGameShortNameCallbackQuery + +public inline fun + WithUser.ifMessageGameShortNameCallbackQuery(block: (MessageGameShortNameCallbackQuery) -> T): + T? = messageGameShortNameCallbackQueryOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultArticleOrNull(): InlineQueryResultArticle? = + this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle + +public inline fun InlineQueryResult.inlineQueryResultArticleOrThrow(): InlineQueryResultArticle = + this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle + +public inline fun + InlineQueryResult.ifInlineQueryResultArticle(block: (InlineQueryResultArticle) -> T): T? = + inlineQueryResultArticleOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultAudioCachedImplOrNull(): + InlineQueryResultAudioCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultAudioCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultAudioCachedImplOrThrow(): + InlineQueryResultAudioCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultAudioCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultAudioCachedImpl(block: (InlineQueryResultAudioCachedImpl) -> T): + T? = inlineQueryResultAudioCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultAudioImplOrNull(): InlineQueryResultAudioImpl? + = this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultAudioImpl + +public inline fun InlineQueryResult.inlineQueryResultAudioImplOrThrow(): InlineQueryResultAudioImpl + = this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultAudioImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultAudioImpl(block: (InlineQueryResultAudioImpl) -> T): T? = + inlineQueryResultAudioImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultContactOrNull(): InlineQueryResultContact? = + this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultContact + +public inline fun InlineQueryResult.inlineQueryResultContactOrThrow(): InlineQueryResultContact = + this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultContact + +public inline fun + InlineQueryResult.ifInlineQueryResultContact(block: (InlineQueryResultContact) -> T): T? = + inlineQueryResultContactOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultDocumentCachedImplOrNull(): + InlineQueryResultDocumentCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultDocumentCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultDocumentCachedImplOrThrow(): + InlineQueryResultDocumentCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultDocumentCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultDocumentCachedImpl(block: (InlineQueryResultDocumentCachedImpl) -> T): + T? = inlineQueryResultDocumentCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultDocumentImplOrNull(): + InlineQueryResultDocumentImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultDocumentImpl + +public inline fun InlineQueryResult.inlineQueryResultDocumentImplOrThrow(): + InlineQueryResultDocumentImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultDocumentImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultDocumentImpl(block: (InlineQueryResultDocumentImpl) -> T): + T? = inlineQueryResultDocumentImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultGameOrNull(): InlineQueryResultGame? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGame + +public inline fun InlineQueryResult.inlineQueryResultGameOrThrow(): InlineQueryResultGame = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGame + +public inline fun + InlineQueryResult.ifInlineQueryResultGame(block: (InlineQueryResultGame) -> T): T? = + inlineQueryResultGameOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultGifCachedImplOrNull(): + InlineQueryResultGifCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGifCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultGifCachedImplOrThrow(): + InlineQueryResultGifCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGifCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultGifCachedImpl(block: (InlineQueryResultGifCachedImpl) -> T): + T? = inlineQueryResultGifCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultGifImplOrNull(): InlineQueryResultGifImpl? = + this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGifImpl + +public inline fun InlineQueryResult.inlineQueryResultGifImplOrThrow(): InlineQueryResultGifImpl = + this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultGifImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultGifImpl(block: (InlineQueryResultGifImpl) -> T): T? = + inlineQueryResultGifImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultLocationOrNull(): InlineQueryResultLocation? = + this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultLocation + +public inline fun InlineQueryResult.inlineQueryResultLocationOrThrow(): InlineQueryResultLocation = + this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultLocation + +public inline fun + InlineQueryResult.ifInlineQueryResultLocation(block: (InlineQueryResultLocation) -> T): T? = + inlineQueryResultLocationOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifCachedImplOrNull(): + InlineQueryResultMpeg4GifCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultMpeg4GifCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifCachedImplOrThrow(): + InlineQueryResultMpeg4GifCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultMpeg4GifCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultMpeg4GifCachedImpl(block: (InlineQueryResultMpeg4GifCachedImpl) -> T): + T? = inlineQueryResultMpeg4GifCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifImplOrNull(): + InlineQueryResultMpeg4GifImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultMpeg4GifImpl + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifImplOrThrow(): + InlineQueryResultMpeg4GifImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultMpeg4GifImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultMpeg4GifImpl(block: (InlineQueryResultMpeg4GifImpl) -> T): + T? = inlineQueryResultMpeg4GifImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultPhotoCachedImplOrNull(): + InlineQueryResultPhotoCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultPhotoCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultPhotoCachedImplOrThrow(): + InlineQueryResultPhotoCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultPhotoCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultPhotoCachedImpl(block: (InlineQueryResultPhotoCachedImpl) -> T): + T? = inlineQueryResultPhotoCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultPhotoImplOrNull(): InlineQueryResultPhotoImpl? + = this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultPhotoImpl + +public inline fun InlineQueryResult.inlineQueryResultPhotoImplOrThrow(): InlineQueryResultPhotoImpl + = this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultPhotoImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultPhotoImpl(block: (InlineQueryResultPhotoImpl) -> T): T? = + inlineQueryResultPhotoImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultStickerCachedOrNull(): + InlineQueryResultStickerCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultStickerCached + +public inline fun InlineQueryResult.inlineQueryResultStickerCachedOrThrow(): + InlineQueryResultStickerCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultStickerCached + +public inline fun + InlineQueryResult.ifInlineQueryResultStickerCached(block: (InlineQueryResultStickerCached) -> T): + T? = inlineQueryResultStickerCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVenueOrNull(): InlineQueryResultVenue? = this + as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVenue + +public inline fun InlineQueryResult.inlineQueryResultVenueOrThrow(): InlineQueryResultVenue = this + as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVenue + +public inline fun + InlineQueryResult.ifInlineQueryResultVenue(block: (InlineQueryResultVenue) -> T): T? = + inlineQueryResultVenueOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVideoCachedImplOrNull(): + InlineQueryResultVideoCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVideoCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultVideoCachedImplOrThrow(): + InlineQueryResultVideoCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVideoCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultVideoCachedImpl(block: (InlineQueryResultVideoCachedImpl) -> T): + T? = inlineQueryResultVideoCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVideoImplOrNull(): InlineQueryResultVideoImpl? + = this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVideoImpl + +public inline fun InlineQueryResult.inlineQueryResultVideoImplOrThrow(): InlineQueryResultVideoImpl + = this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVideoImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultVideoImpl(block: (InlineQueryResultVideoImpl) -> T): T? = + inlineQueryResultVideoImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVoiceCachedImplOrNull(): + InlineQueryResultVoiceCachedImpl? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVoiceCachedImpl + +public inline fun InlineQueryResult.inlineQueryResultVoiceCachedImplOrThrow(): + InlineQueryResultVoiceCachedImpl = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVoiceCachedImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultVoiceCachedImpl(block: (InlineQueryResultVoiceCachedImpl) -> T): + T? = inlineQueryResultVoiceCachedImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVoiceImplOrNull(): InlineQueryResultVoiceImpl? + = this as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVoiceImpl + +public inline fun InlineQueryResult.inlineQueryResultVoiceImplOrThrow(): InlineQueryResultVoiceImpl + = this as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultVoiceImpl + +public inline fun + InlineQueryResult.ifInlineQueryResultVoiceImpl(block: (InlineQueryResultVoiceImpl) -> T): T? = + inlineQueryResultVoiceImplOrNull() ?.let(block) + +public inline fun InlineQueryResult.describedInlineQueryResultOrNull(): DescribedInlineQueryResult? + = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.DescribedInlineQueryResult + +public inline fun InlineQueryResult.describedInlineQueryResultOrThrow(): DescribedInlineQueryResult + = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.DescribedInlineQueryResult + +public inline fun + InlineQueryResult.ifDescribedInlineQueryResult(block: (DescribedInlineQueryResult) -> T): T? = + describedInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.fileInlineQueryResultOrNull(): FileInlineQueryResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.FileInlineQueryResult + +public inline fun InlineQueryResult.fileInlineQueryResultOrThrow(): FileInlineQueryResult = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.FileInlineQueryResult + +public inline fun + InlineQueryResult.ifFileInlineQueryResult(block: (FileInlineQueryResult) -> T): T? = + fileInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.optionallyTitledInlineQueryResultOrNull(): + OptionallyTitledInlineQueryResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.OptionallyTitledInlineQueryResult + +public inline fun InlineQueryResult.optionallyTitledInlineQueryResultOrThrow(): + OptionallyTitledInlineQueryResult = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.OptionallyTitledInlineQueryResult + +public inline fun + InlineQueryResult.ifOptionallyTitledInlineQueryResult(block: (OptionallyTitledInlineQueryResult) -> T): + T? = optionallyTitledInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.sizedInlineQueryResultOrNull(): SizedInlineQueryResult? = this + as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.SizedInlineQueryResult + +public inline fun InlineQueryResult.sizedInlineQueryResultOrThrow(): SizedInlineQueryResult = this + as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.SizedInlineQueryResult + +public inline fun + InlineQueryResult.ifSizedInlineQueryResult(block: (SizedInlineQueryResult) -> T): T? = + sizedInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.thumbSizedInlineQueryResultOrNull(): + ThumbSizedInlineQueryResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbSizedInlineQueryResult + +public inline fun InlineQueryResult.thumbSizedInlineQueryResultOrThrow(): + ThumbSizedInlineQueryResult = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbSizedInlineQueryResult + +public inline fun + InlineQueryResult.ifThumbSizedInlineQueryResult(block: (ThumbSizedInlineQueryResult) -> T): T? = + thumbSizedInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.thumbedInlineQueryResultOrNull(): ThumbedInlineQueryResult? = + this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbedInlineQueryResult + +public inline fun InlineQueryResult.thumbedInlineQueryResultOrThrow(): ThumbedInlineQueryResult = + this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbedInlineQueryResult + +public inline fun + InlineQueryResult.ifThumbedInlineQueryResult(block: (ThumbedInlineQueryResult) -> T): T? = + thumbedInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.thumbedWithMimeTypeInlineQueryResultOrNull(): + ThumbedWithMimeTypeInlineQueryResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbedWithMimeTypeInlineQueryResult + +public inline fun InlineQueryResult.thumbedWithMimeTypeInlineQueryResultOrThrow(): + ThumbedWithMimeTypeInlineQueryResult = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.ThumbedWithMimeTypeInlineQueryResult + +public inline fun + InlineQueryResult.ifThumbedWithMimeTypeInlineQueryResult(block: (ThumbedWithMimeTypeInlineQueryResult) -> T): + T? = thumbedWithMimeTypeInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.titledInlineQueryResultOrNull(): TitledInlineQueryResult? = this + as? dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.TitledInlineQueryResult + +public inline fun InlineQueryResult.titledInlineQueryResultOrThrow(): TitledInlineQueryResult = this + as dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.TitledInlineQueryResult + +public inline fun + InlineQueryResult.ifTitledInlineQueryResult(block: (TitledInlineQueryResult) -> T): T? = + titledInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.urlInlineQueryResultOrNull(): UrlInlineQueryResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.UrlInlineQueryResult + +public inline fun InlineQueryResult.urlInlineQueryResultOrThrow(): UrlInlineQueryResult = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.UrlInlineQueryResult + +public inline fun InlineQueryResult.ifUrlInlineQueryResult(block: (UrlInlineQueryResult) -> T): + T? = urlInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.withInputMessageContentInlineQueryResultOrNull(): + WithInputMessageContentInlineQueryResult? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.WithInputMessageContentInlineQueryResult + +public inline fun InlineQueryResult.withInputMessageContentInlineQueryResultOrThrow(): + WithInputMessageContentInlineQueryResult = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.WithInputMessageContentInlineQueryResult + +public inline fun + InlineQueryResult.ifWithInputMessageContentInlineQueryResult(block: (WithInputMessageContentInlineQueryResult) -> T): + T? = withInputMessageContentInlineQueryResultOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultAudioOrNull(): InlineQueryResultAudio? = this + as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudio + +public inline fun InlineQueryResult.inlineQueryResultAudioOrThrow(): InlineQueryResultAudio = this + as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudio + +public inline fun + InlineQueryResult.ifInlineQueryResultAudio(block: (InlineQueryResultAudio) -> T): T? = + inlineQueryResultAudioOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultAudioCachedOrNull(): + InlineQueryResultAudioCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudioCached + +public inline fun InlineQueryResult.inlineQueryResultAudioCachedOrThrow(): + InlineQueryResultAudioCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudioCached + +public inline fun + InlineQueryResult.ifInlineQueryResultAudioCached(block: (InlineQueryResultAudioCached) -> T): T? + = inlineQueryResultAudioCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultAudioCommonOrNull(): + InlineQueryResultAudioCommon? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudioCommon + +public inline fun InlineQueryResult.inlineQueryResultAudioCommonOrThrow(): + InlineQueryResultAudioCommon = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.audio.InlineQueryResultAudioCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultAudioCommon(block: (InlineQueryResultAudioCommon) -> T): T? + = inlineQueryResultAudioCommonOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultDocumentOrNull(): InlineQueryResultDocument? = + this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocument + +public inline fun InlineQueryResult.inlineQueryResultDocumentOrThrow(): InlineQueryResultDocument = + this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocument + +public inline fun + InlineQueryResult.ifInlineQueryResultDocument(block: (InlineQueryResultDocument) -> T): T? = + inlineQueryResultDocumentOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultDocumentCachedOrNull(): + InlineQueryResultDocumentCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocumentCached + +public inline fun InlineQueryResult.inlineQueryResultDocumentCachedOrThrow(): + InlineQueryResultDocumentCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocumentCached + +public inline fun + InlineQueryResult.ifInlineQueryResultDocumentCached(block: (InlineQueryResultDocumentCached) -> T): + T? = inlineQueryResultDocumentCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultDocumentCommonOrNull(): + InlineQueryResultDocumentCommon? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocumentCommon + +public inline fun InlineQueryResult.inlineQueryResultDocumentCommonOrThrow(): + InlineQueryResultDocumentCommon = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.document.InlineQueryResultDocumentCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultDocumentCommon(block: (InlineQueryResultDocumentCommon) -> T): + T? = inlineQueryResultDocumentCommonOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultGifOrNull(): InlineQueryResultGif? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGif + +public inline fun InlineQueryResult.inlineQueryResultGifOrThrow(): InlineQueryResultGif = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGif + +public inline fun InlineQueryResult.ifInlineQueryResultGif(block: (InlineQueryResultGif) -> T): + T? = inlineQueryResultGifOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultGifCachedOrNull(): InlineQueryResultGifCached? + = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGifCached + +public inline fun InlineQueryResult.inlineQueryResultGifCachedOrThrow(): InlineQueryResultGifCached + = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGifCached + +public inline fun + InlineQueryResult.ifInlineQueryResultGifCached(block: (InlineQueryResultGifCached) -> T): T? = + inlineQueryResultGifCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultGifCommonOrNull(): InlineQueryResultGifCommon? + = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGifCommon + +public inline fun InlineQueryResult.inlineQueryResultGifCommonOrThrow(): InlineQueryResultGifCommon + = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.gif.InlineQueryResultGifCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultGifCommon(block: (InlineQueryResultGifCommon) -> T): T? = + inlineQueryResultGifCommonOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifOrNull(): InlineQueryResultMpeg4Gif? = + this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4Gif + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifOrThrow(): InlineQueryResultMpeg4Gif = + this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4Gif + +public inline fun + InlineQueryResult.ifInlineQueryResultMpeg4Gif(block: (InlineQueryResultMpeg4Gif) -> T): T? = + inlineQueryResultMpeg4GifOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifCachedOrNull(): + InlineQueryResultMpeg4GifCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4GifCached + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifCachedOrThrow(): + InlineQueryResultMpeg4GifCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4GifCached + +public inline fun + InlineQueryResult.ifInlineQueryResultMpeg4GifCached(block: (InlineQueryResultMpeg4GifCached) -> T): + T? = inlineQueryResultMpeg4GifCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifCommonOrNull(): + InlineQueryResultMpeg4GifCommon? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4GifCommon + +public inline fun InlineQueryResult.inlineQueryResultMpeg4GifCommonOrThrow(): + InlineQueryResultMpeg4GifCommon = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.mpeg4gif.InlineQueryResultMpeg4GifCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultMpeg4GifCommon(block: (InlineQueryResultMpeg4GifCommon) -> T): + T? = inlineQueryResultMpeg4GifCommonOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultPhotoOrNull(): InlineQueryResultPhoto? = this + as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhoto + +public inline fun InlineQueryResult.inlineQueryResultPhotoOrThrow(): InlineQueryResultPhoto = this + as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhoto + +public inline fun + InlineQueryResult.ifInlineQueryResultPhoto(block: (InlineQueryResultPhoto) -> T): T? = + inlineQueryResultPhotoOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultPhotoCachedOrNull(): + InlineQueryResultPhotoCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhotoCached + +public inline fun InlineQueryResult.inlineQueryResultPhotoCachedOrThrow(): + InlineQueryResultPhotoCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhotoCached + +public inline fun + InlineQueryResult.ifInlineQueryResultPhotoCached(block: (InlineQueryResultPhotoCached) -> T): T? + = inlineQueryResultPhotoCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultPhotoCommonOrNull(): + InlineQueryResultPhotoCommon? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhotoCommon + +public inline fun InlineQueryResult.inlineQueryResultPhotoCommonOrThrow(): + InlineQueryResultPhotoCommon = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.photo.InlineQueryResultPhotoCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultPhotoCommon(block: (InlineQueryResultPhotoCommon) -> T): T? + = inlineQueryResultPhotoCommonOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVideoOrNull(): InlineQueryResultVideo? = this + as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideo + +public inline fun InlineQueryResult.inlineQueryResultVideoOrThrow(): InlineQueryResultVideo = this + as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideo + +public inline fun + InlineQueryResult.ifInlineQueryResultVideo(block: (InlineQueryResultVideo) -> T): T? = + inlineQueryResultVideoOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVideoCachedOrNull(): + InlineQueryResultVideoCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideoCached + +public inline fun InlineQueryResult.inlineQueryResultVideoCachedOrThrow(): + InlineQueryResultVideoCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideoCached + +public inline fun + InlineQueryResult.ifInlineQueryResultVideoCached(block: (InlineQueryResultVideoCached) -> T): T? + = inlineQueryResultVideoCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVideoCommonOrNull(): + InlineQueryResultVideoCommon? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideoCommon + +public inline fun InlineQueryResult.inlineQueryResultVideoCommonOrThrow(): + InlineQueryResultVideoCommon = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.video.InlineQueryResultVideoCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultVideoCommon(block: (InlineQueryResultVideoCommon) -> T): T? + = inlineQueryResultVideoCommonOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVoiceOrNull(): InlineQueryResultVoice? = this + as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoice + +public inline fun InlineQueryResult.inlineQueryResultVoiceOrThrow(): InlineQueryResultVoice = this + as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoice + +public inline fun + InlineQueryResult.ifInlineQueryResultVoice(block: (InlineQueryResultVoice) -> T): T? = + inlineQueryResultVoiceOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVoiceCachedOrNull(): + InlineQueryResultVoiceCached? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoiceCached + +public inline fun InlineQueryResult.inlineQueryResultVoiceCachedOrThrow(): + InlineQueryResultVoiceCached = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoiceCached + +public inline fun + InlineQueryResult.ifInlineQueryResultVoiceCached(block: (InlineQueryResultVoiceCached) -> T): T? + = inlineQueryResultVoiceCachedOrNull() ?.let(block) + +public inline fun InlineQueryResult.inlineQueryResultVoiceCommonOrNull(): + InlineQueryResultVoiceCommon? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoiceCommon + +public inline fun InlineQueryResult.inlineQueryResultVoiceCommonOrThrow(): + InlineQueryResultVoiceCommon = this as + dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.results.voice.InlineQueryResultVoiceCommon + +public inline fun + InlineQueryResult.ifInlineQueryResultVoiceCommon(block: (InlineQueryResultVoiceCommon) -> T): T? + = inlineQueryResultVoiceCommonOrNull() ?.let(block) + +public inline fun InputMessageContent.inputContactMessageContentOrNull(): + InputContactMessageContent? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputContactMessageContent + +public inline fun InputMessageContent.inputContactMessageContentOrThrow(): + InputContactMessageContent = this as + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputContactMessageContent + +public inline fun + InputMessageContent.ifInputContactMessageContent(block: (InputContactMessageContent) -> T): T? = + inputContactMessageContentOrNull() ?.let(block) + +public inline fun InputMessageContent.inputInvoiceMessageContentOrNull(): + InputInvoiceMessageContent? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent + +public inline fun InputMessageContent.inputInvoiceMessageContentOrThrow(): + InputInvoiceMessageContent = this as + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent + +public inline fun + InputMessageContent.ifInputInvoiceMessageContent(block: (InputInvoiceMessageContent) -> T): T? = + inputInvoiceMessageContentOrNull() ?.let(block) + +public inline fun InputMessageContent.inputLocationMessageContentOrNull(): + InputLocationMessageContent? = this as? + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputLocationMessageContent + +public inline fun InputMessageContent.inputLocationMessageContentOrThrow(): + InputLocationMessageContent = this as + dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputLocationMessageContent + +public inline fun + InputMessageContent.ifInputLocationMessageContent(block: (InputLocationMessageContent) -> T): T? + = inputLocationMessageContentOrNull() ?.let(block) + +public inline fun InputMessageContent.inputTextMessageContentOrNull(): InputTextMessageContent? = + this as? dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent + +public inline fun InputMessageContent.inputTextMessageContentOrThrow(): InputTextMessageContent = + this as dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent + +public inline fun + InputMessageContent.ifInputTextMessageContent(block: (InputTextMessageContent) -> T): T? = + inputTextMessageContentOrNull() ?.let(block) + +public inline fun InputMessageContent.inputVenueMessageContentOrNull(): InputVenueMessageContent? = + this as? dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputVenueMessageContent + +public inline fun InputMessageContent.inputVenueMessageContentOrThrow(): InputVenueMessageContent = + this as dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputVenueMessageContent + +public inline fun + InputMessageContent.ifInputVenueMessageContent(block: (InputVenueMessageContent) -> T): T? = + inputVenueMessageContentOrNull() ?.let(block) + +public inline fun BotAction.typingActionOrNull(): TypingAction? = this as? + dev.inmo.tgbotapi.types.actions.TypingAction + +public inline fun BotAction.typingActionOrThrow(): TypingAction = this as + dev.inmo.tgbotapi.types.actions.TypingAction + +public inline fun BotAction.ifTypingAction(block: (TypingAction) -> T): T? = + typingActionOrNull() ?.let(block) + +public inline fun BotAction.uploadPhotoActionOrNull(): UploadPhotoAction? = this as? + dev.inmo.tgbotapi.types.actions.UploadPhotoAction + +public inline fun BotAction.uploadPhotoActionOrThrow(): UploadPhotoAction = this as + dev.inmo.tgbotapi.types.actions.UploadPhotoAction + +public inline fun BotAction.ifUploadPhotoAction(block: (UploadPhotoAction) -> T): T? = + uploadPhotoActionOrNull() ?.let(block) + +public inline fun BotAction.recordVideoActionOrNull(): RecordVideoAction? = this as? + dev.inmo.tgbotapi.types.actions.RecordVideoAction + +public inline fun BotAction.recordVideoActionOrThrow(): RecordVideoAction = this as + dev.inmo.tgbotapi.types.actions.RecordVideoAction + +public inline fun BotAction.ifRecordVideoAction(block: (RecordVideoAction) -> T): T? = + recordVideoActionOrNull() ?.let(block) + +public inline fun BotAction.uploadVideoActionOrNull(): UploadVideoAction? = this as? + dev.inmo.tgbotapi.types.actions.UploadVideoAction + +public inline fun BotAction.uploadVideoActionOrThrow(): UploadVideoAction = this as + dev.inmo.tgbotapi.types.actions.UploadVideoAction + +public inline fun BotAction.ifUploadVideoAction(block: (UploadVideoAction) -> T): T? = + uploadVideoActionOrNull() ?.let(block) + +public inline fun BotAction.recordVoiceActionOrNull(): RecordVoiceAction? = this as? + dev.inmo.tgbotapi.types.actions.RecordVoiceAction + +public inline fun BotAction.recordVoiceActionOrThrow(): RecordVoiceAction = this as + dev.inmo.tgbotapi.types.actions.RecordVoiceAction + +public inline fun BotAction.ifRecordVoiceAction(block: (RecordVoiceAction) -> T): T? = + recordVoiceActionOrNull() ?.let(block) + +public inline fun BotAction.uploadVoiceActionOrNull(): UploadVoiceAction? = this as? + dev.inmo.tgbotapi.types.actions.UploadVoiceAction + +public inline fun BotAction.uploadVoiceActionOrThrow(): UploadVoiceAction = this as + dev.inmo.tgbotapi.types.actions.UploadVoiceAction + +public inline fun BotAction.ifUploadVoiceAction(block: (UploadVoiceAction) -> T): T? = + uploadVoiceActionOrNull() ?.let(block) + +public inline fun BotAction.uploadDocumentActionOrNull(): UploadDocumentAction? = this as? + dev.inmo.tgbotapi.types.actions.UploadDocumentAction + +public inline fun BotAction.uploadDocumentActionOrThrow(): UploadDocumentAction = this as + dev.inmo.tgbotapi.types.actions.UploadDocumentAction + +public inline fun BotAction.ifUploadDocumentAction(block: (UploadDocumentAction) -> T): T? = + uploadDocumentActionOrNull() ?.let(block) + +public inline fun BotAction.findLocationActionOrNull(): FindLocationAction? = this as? + dev.inmo.tgbotapi.types.actions.FindLocationAction + +public inline fun BotAction.findLocationActionOrThrow(): FindLocationAction = this as + dev.inmo.tgbotapi.types.actions.FindLocationAction + +public inline fun BotAction.ifFindLocationAction(block: (FindLocationAction) -> T): T? = + findLocationActionOrNull() ?.let(block) + +public inline fun BotAction.recordVideoNoteActionOrNull(): RecordVideoNoteAction? = this as? + dev.inmo.tgbotapi.types.actions.RecordVideoNoteAction + +public inline fun BotAction.recordVideoNoteActionOrThrow(): RecordVideoNoteAction = this as + dev.inmo.tgbotapi.types.actions.RecordVideoNoteAction + +public inline fun BotAction.ifRecordVideoNoteAction(block: (RecordVideoNoteAction) -> T): T? = + recordVideoNoteActionOrNull() ?.let(block) + +public inline fun BotAction.uploadVideoNoteActionOrNull(): UploadVideoNoteAction? = this as? + dev.inmo.tgbotapi.types.actions.UploadVideoNoteAction + +public inline fun BotAction.uploadVideoNoteActionOrThrow(): UploadVideoNoteAction = this as + dev.inmo.tgbotapi.types.actions.UploadVideoNoteAction + +public inline fun BotAction.ifUploadVideoNoteAction(block: (UploadVideoNoteAction) -> T): T? = + uploadVideoNoteActionOrNull() ?.let(block) + +public inline fun BotAction.chooseStickerActionOrNull(): ChooseStickerAction? = this as? + dev.inmo.tgbotapi.types.actions.ChooseStickerAction + +public inline fun BotAction.chooseStickerActionOrThrow(): ChooseStickerAction = this as + dev.inmo.tgbotapi.types.actions.ChooseStickerAction + +public inline fun BotAction.ifChooseStickerAction(block: (ChooseStickerAction) -> T): T? = + chooseStickerActionOrNull() ?.let(block) + +public inline fun BotAction.customBotActionOrNull(): CustomBotAction? = this as? + dev.inmo.tgbotapi.types.actions.CustomBotAction + +public inline fun BotAction.customBotActionOrThrow(): CustomBotAction = this as + dev.inmo.tgbotapi.types.actions.CustomBotAction + +public inline fun BotAction.ifCustomBotAction(block: (CustomBotAction) -> T): T? = + customBotActionOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.unknownInlineKeyboardButtonOrNull(): + UnknownInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.UnknownInlineKeyboardButton + +public inline fun InlineKeyboardButton.unknownInlineKeyboardButtonOrThrow(): + UnknownInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.UnknownInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifUnknownInlineKeyboardButton(block: (UnknownInlineKeyboardButton) -> T): + T? = unknownInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.payInlineKeyboardButtonOrNull(): PayInlineKeyboardButton? = + this as? dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.PayInlineKeyboardButton + +public inline fun InlineKeyboardButton.payInlineKeyboardButtonOrThrow(): PayInlineKeyboardButton = + this as dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.PayInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifPayInlineKeyboardButton(block: (PayInlineKeyboardButton) -> T): T? = + payInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.callbackDataInlineKeyboardButtonOrNull(): + CallbackDataInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton + +public inline fun InlineKeyboardButton.callbackDataInlineKeyboardButtonOrThrow(): + CallbackDataInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifCallbackDataInlineKeyboardButton(block: (CallbackDataInlineKeyboardButton) -> T): + T? = callbackDataInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.callbackGameInlineKeyboardButtonOrNull(): + CallbackGameInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackGameInlineKeyboardButton + +public inline fun InlineKeyboardButton.callbackGameInlineKeyboardButtonOrThrow(): + CallbackGameInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackGameInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifCallbackGameInlineKeyboardButton(block: (CallbackGameInlineKeyboardButton) -> T): + T? = callbackGameInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.loginURLInlineKeyboardButtonOrNull(): + LoginURLInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.LoginURLInlineKeyboardButton + +public inline fun InlineKeyboardButton.loginURLInlineKeyboardButtonOrThrow(): + LoginURLInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.LoginURLInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifLoginURLInlineKeyboardButton(block: (LoginURLInlineKeyboardButton) -> T): + T? = loginURLInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.switchInlineQueryCurrentChatInlineKeyboardButtonOrNull(): + SwitchInlineQueryCurrentChatInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryCurrentChatInlineKeyboardButton + +public inline fun InlineKeyboardButton.switchInlineQueryCurrentChatInlineKeyboardButtonOrThrow(): + SwitchInlineQueryCurrentChatInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryCurrentChatInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifSwitchInlineQueryCurrentChatInlineKeyboardButton(block: (SwitchInlineQueryCurrentChatInlineKeyboardButton) -> T): + T? = switchInlineQueryCurrentChatInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.switchInlineQueryInlineKeyboardButtonOrNull(): + SwitchInlineQueryInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryInlineKeyboardButton + +public inline fun InlineKeyboardButton.switchInlineQueryInlineKeyboardButtonOrThrow(): + SwitchInlineQueryInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifSwitchInlineQueryInlineKeyboardButton(block: (SwitchInlineQueryInlineKeyboardButton) -> T): + T? = switchInlineQueryInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.uRLInlineKeyboardButtonOrNull(): URLInlineKeyboardButton? = + this as? dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.URLInlineKeyboardButton + +public inline fun InlineKeyboardButton.uRLInlineKeyboardButtonOrThrow(): URLInlineKeyboardButton = + this as dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.URLInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifURLInlineKeyboardButton(block: (URLInlineKeyboardButton) -> T): T? = + uRLInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun InlineKeyboardButton.webAppInlineKeyboardButtonOrNull(): + WebAppInlineKeyboardButton? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.WebAppInlineKeyboardButton + +public inline fun InlineKeyboardButton.webAppInlineKeyboardButtonOrThrow(): + WebAppInlineKeyboardButton = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.WebAppInlineKeyboardButton + +public inline fun + InlineKeyboardButton.ifWebAppInlineKeyboardButton(block: (WebAppInlineKeyboardButton) -> T): T? + = webAppInlineKeyboardButtonOrNull() ?.let(block) + +public inline fun KeyboardMarkup.inlineKeyboardMarkupOrNull(): InlineKeyboardMarkup? = this as? + dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup + +public inline fun KeyboardMarkup.inlineKeyboardMarkupOrThrow(): InlineKeyboardMarkup = this as + dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup + +public inline fun KeyboardMarkup.ifInlineKeyboardMarkup(block: (InlineKeyboardMarkup) -> T): T? + = inlineKeyboardMarkupOrNull() ?.let(block) + +public inline fun KeyboardMarkup.replyForceOrNull(): ReplyForce? = this as? + dev.inmo.tgbotapi.types.buttons.ReplyForce + +public inline fun KeyboardMarkup.replyForceOrThrow(): ReplyForce = this as + dev.inmo.tgbotapi.types.buttons.ReplyForce + +public inline fun KeyboardMarkup.ifReplyForce(block: (ReplyForce) -> T): T? = replyForceOrNull() + ?.let(block) + +public inline fun KeyboardMarkup.replyKeyboardMarkupOrNull(): ReplyKeyboardMarkup? = this as? + dev.inmo.tgbotapi.types.buttons.ReplyKeyboardMarkup + +public inline fun KeyboardMarkup.replyKeyboardMarkupOrThrow(): ReplyKeyboardMarkup = this as + dev.inmo.tgbotapi.types.buttons.ReplyKeyboardMarkup + +public inline fun KeyboardMarkup.ifReplyKeyboardMarkup(block: (ReplyKeyboardMarkup) -> T): T? = + replyKeyboardMarkupOrNull() ?.let(block) + +public inline fun KeyboardMarkup.replyKeyboardRemoveOrNull(): ReplyKeyboardRemove? = this as? + dev.inmo.tgbotapi.types.buttons.ReplyKeyboardRemove + +public inline fun KeyboardMarkup.replyKeyboardRemoveOrThrow(): ReplyKeyboardRemove = this as + dev.inmo.tgbotapi.types.buttons.ReplyKeyboardRemove + +public inline fun KeyboardMarkup.ifReplyKeyboardRemove(block: (ReplyKeyboardRemove) -> T): T? = + replyKeyboardRemoveOrNull() ?.let(block) + +public inline fun Chat.channelChatOrNull(): ChannelChat? = this as? + dev.inmo.tgbotapi.types.chat.ChannelChat + +public inline fun Chat.channelChatOrThrow(): ChannelChat = this as + dev.inmo.tgbotapi.types.chat.ChannelChat + +public inline fun Chat.ifChannelChat(block: (ChannelChat) -> T): T? = channelChatOrNull() + ?.let(block) + +public inline fun Chat.groupChatOrNull(): GroupChat? = this as? + dev.inmo.tgbotapi.types.chat.GroupChat + +public inline fun Chat.groupChatOrThrow(): GroupChat = this as + dev.inmo.tgbotapi.types.chat.GroupChat + +public inline fun Chat.ifGroupChat(block: (GroupChat) -> T): T? = groupChatOrNull() ?.let(block) + +public inline fun Chat.privateChatOrNull(): PrivateChat? = this as? + dev.inmo.tgbotapi.types.chat.PrivateChat + +public inline fun Chat.privateChatOrThrow(): PrivateChat = this as + dev.inmo.tgbotapi.types.chat.PrivateChat + +public inline fun Chat.ifPrivateChat(block: (PrivateChat) -> T): T? = privateChatOrNull() + ?.let(block) + +public inline fun Chat.publicChatOrNull(): PublicChat? = this as? + dev.inmo.tgbotapi.types.chat.PublicChat + +public inline fun Chat.publicChatOrThrow(): PublicChat = this as + dev.inmo.tgbotapi.types.chat.PublicChat + +public inline fun Chat.ifPublicChat(block: (PublicChat) -> T): T? = publicChatOrNull() + ?.let(block) + +public inline fun Chat.supergroupChatOrNull(): SupergroupChat? = this as? + dev.inmo.tgbotapi.types.chat.SupergroupChat + +public inline fun Chat.supergroupChatOrThrow(): SupergroupChat = this as + dev.inmo.tgbotapi.types.chat.SupergroupChat + +public inline fun Chat.ifSupergroupChat(block: (SupergroupChat) -> T): T? = + supergroupChatOrNull() ?.let(block) + +public inline fun Chat.superPublicChatOrNull(): SuperPublicChat? = this as? + dev.inmo.tgbotapi.types.chat.SuperPublicChat + +public inline fun Chat.superPublicChatOrThrow(): SuperPublicChat = this as + dev.inmo.tgbotapi.types.chat.SuperPublicChat + +public inline fun Chat.ifSuperPublicChat(block: (SuperPublicChat) -> T): T? = + superPublicChatOrNull() ?.let(block) + +public inline fun Chat.usernameChatOrNull(): UsernameChat? = this as? + dev.inmo.tgbotapi.types.chat.UsernameChat + +public inline fun Chat.usernameChatOrThrow(): UsernameChat = this as + dev.inmo.tgbotapi.types.chat.UsernameChat + +public inline fun Chat.ifUsernameChat(block: (UsernameChat) -> T): T? = usernameChatOrNull() + ?.let(block) + +public inline fun Chat.possiblyPremiumChatOrNull(): PossiblyPremiumChat? = this as? + dev.inmo.tgbotapi.types.chat.PossiblyPremiumChat + +public inline fun Chat.possiblyPremiumChatOrThrow(): PossiblyPremiumChat = this as + dev.inmo.tgbotapi.types.chat.PossiblyPremiumChat + +public inline fun Chat.ifPossiblyPremiumChat(block: (PossiblyPremiumChat) -> T): T? = + possiblyPremiumChatOrNull() ?.let(block) + +public inline fun Chat.ableToAddInAttachmentMenuChatOrNull(): AbleToAddInAttachmentMenuChat? = this + as? dev.inmo.tgbotapi.types.chat.AbleToAddInAttachmentMenuChat + +public inline fun Chat.ableToAddInAttachmentMenuChatOrThrow(): AbleToAddInAttachmentMenuChat = this + as dev.inmo.tgbotapi.types.chat.AbleToAddInAttachmentMenuChat + +public inline fun + Chat.ifAbleToAddInAttachmentMenuChat(block: (AbleToAddInAttachmentMenuChat) -> T): T? = + ableToAddInAttachmentMenuChatOrNull() ?.let(block) + +public inline fun Chat.extendedChannelChatImplOrNull(): ExtendedChannelChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedChannelChatImpl + +public inline fun Chat.extendedChannelChatImplOrThrow(): ExtendedChannelChatImpl = this as + dev.inmo.tgbotapi.types.chat.ExtendedChannelChatImpl + +public inline fun Chat.ifExtendedChannelChatImpl(block: (ExtendedChannelChatImpl) -> T): T? = + extendedChannelChatImplOrNull() ?.let(block) + +public inline fun Chat.extendedGroupChatImplOrNull(): ExtendedGroupChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedGroupChatImpl + +public inline fun Chat.extendedGroupChatImplOrThrow(): ExtendedGroupChatImpl = this as + dev.inmo.tgbotapi.types.chat.ExtendedGroupChatImpl + +public inline fun Chat.ifExtendedGroupChatImpl(block: (ExtendedGroupChatImpl) -> T): T? = + extendedGroupChatImplOrNull() ?.let(block) + +public inline fun Chat.extendedPrivateChatImplOrNull(): ExtendedPrivateChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedPrivateChatImpl + +public inline fun Chat.extendedPrivateChatImplOrThrow(): ExtendedPrivateChatImpl = this as + dev.inmo.tgbotapi.types.chat.ExtendedPrivateChatImpl + +public inline fun Chat.ifExtendedPrivateChatImpl(block: (ExtendedPrivateChatImpl) -> T): T? = + extendedPrivateChatImplOrNull() ?.let(block) + +public inline fun Chat.extendedSupergroupChatImplOrNull(): ExtendedSupergroupChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChatImpl + +public inline fun Chat.extendedSupergroupChatImplOrThrow(): ExtendedSupergroupChatImpl = this as + dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChatImpl + +public inline fun Chat.ifExtendedSupergroupChatImpl(block: (ExtendedSupergroupChatImpl) -> T): + T? = extendedSupergroupChatImplOrNull() ?.let(block) + +public inline fun Chat.extendedBotOrNull(): ExtendedBot? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedBot + +public inline fun Chat.extendedBotOrThrow(): ExtendedBot = this as + dev.inmo.tgbotapi.types.chat.ExtendedBot + +public inline fun Chat.ifExtendedBot(block: (ExtendedBot) -> T): T? = extendedBotOrNull() + ?.let(block) + +public inline fun Chat.unknownExtendedChatOrNull(): UnknownExtendedChat? = this as? + dev.inmo.tgbotapi.types.chat.UnknownExtendedChat + +public inline fun Chat.unknownExtendedChatOrThrow(): UnknownExtendedChat = this as + dev.inmo.tgbotapi.types.chat.UnknownExtendedChat + +public inline fun Chat.ifUnknownExtendedChat(block: (UnknownExtendedChat) -> T): T? = + unknownExtendedChatOrNull() ?.let(block) + +public inline fun Chat.extendedChannelChatOrNull(): ExtendedChannelChat? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedChannelChat + +public inline fun Chat.extendedChannelChatOrThrow(): ExtendedChannelChat = this as + dev.inmo.tgbotapi.types.chat.ExtendedChannelChat + +public inline fun Chat.ifExtendedChannelChat(block: (ExtendedChannelChat) -> T): T? = + extendedChannelChatOrNull() ?.let(block) + +public inline fun Chat.extendedGroupChatOrNull(): ExtendedGroupChat? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedGroupChat + +public inline fun Chat.extendedGroupChatOrThrow(): ExtendedGroupChat = this as + dev.inmo.tgbotapi.types.chat.ExtendedGroupChat + +public inline fun Chat.ifExtendedGroupChat(block: (ExtendedGroupChat) -> T): T? = + extendedGroupChatOrNull() ?.let(block) + +public inline fun Chat.extendedPrivateChatOrNull(): ExtendedPrivateChat? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedPrivateChat + +public inline fun Chat.extendedPrivateChatOrThrow(): ExtendedPrivateChat = this as + dev.inmo.tgbotapi.types.chat.ExtendedPrivateChat + +public inline fun Chat.ifExtendedPrivateChat(block: (ExtendedPrivateChat) -> T): T? = + extendedPrivateChatOrNull() ?.let(block) + +public inline fun Chat.extendedPublicChatOrNull(): ExtendedPublicChat? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedPublicChat + +public inline fun Chat.extendedPublicChatOrThrow(): ExtendedPublicChat = this as + dev.inmo.tgbotapi.types.chat.ExtendedPublicChat + +public inline fun Chat.ifExtendedPublicChat(block: (ExtendedPublicChat) -> T): T? = + extendedPublicChatOrNull() ?.let(block) + +public inline fun Chat.extendedSupergroupChatOrNull(): ExtendedSupergroupChat? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChat + +public inline fun Chat.extendedSupergroupChatOrThrow(): ExtendedSupergroupChat = this as + dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChat + +public inline fun Chat.ifExtendedSupergroupChat(block: (ExtendedSupergroupChat) -> T): T? = + extendedSupergroupChatOrNull() ?.let(block) + +public inline fun Chat.extendedChatOrNull(): ExtendedChat? = this as? + dev.inmo.tgbotapi.types.chat.ExtendedChat + +public inline fun Chat.extendedChatOrThrow(): ExtendedChat = this as + dev.inmo.tgbotapi.types.chat.ExtendedChat + +public inline fun Chat.ifExtendedChat(block: (ExtendedChat) -> T): T? = extendedChatOrNull() + ?.let(block) + +public inline fun Chat.groupChatImplOrNull(): GroupChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.GroupChatImpl + +public inline fun Chat.groupChatImplOrThrow(): GroupChatImpl = this as + dev.inmo.tgbotapi.types.chat.GroupChatImpl + +public inline fun Chat.ifGroupChatImpl(block: (GroupChatImpl) -> T): T? = groupChatImplOrNull() + ?.let(block) + +public inline fun Chat.privateChatImplOrNull(): PrivateChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.PrivateChatImpl + +public inline fun Chat.privateChatImplOrThrow(): PrivateChatImpl = this as + dev.inmo.tgbotapi.types.chat.PrivateChatImpl + +public inline fun Chat.ifPrivateChatImpl(block: (PrivateChatImpl) -> T): T? = + privateChatImplOrNull() ?.let(block) + +public inline fun Chat.supergroupChatImplOrNull(): SupergroupChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.SupergroupChatImpl + +public inline fun Chat.supergroupChatImplOrThrow(): SupergroupChatImpl = this as + dev.inmo.tgbotapi.types.chat.SupergroupChatImpl + +public inline fun Chat.ifSupergroupChatImpl(block: (SupergroupChatImpl) -> T): T? = + supergroupChatImplOrNull() ?.let(block) + +public inline fun Chat.channelChatImplOrNull(): ChannelChatImpl? = this as? + dev.inmo.tgbotapi.types.chat.ChannelChatImpl + +public inline fun Chat.channelChatImplOrThrow(): ChannelChatImpl = this as + dev.inmo.tgbotapi.types.chat.ChannelChatImpl + +public inline fun Chat.ifChannelChatImpl(block: (ChannelChatImpl) -> T): T? = + channelChatImplOrNull() ?.let(block) + +public inline fun Chat.userOrNull(): User? = this as? dev.inmo.tgbotapi.types.chat.User + +public inline fun Chat.userOrThrow(): User = this as dev.inmo.tgbotapi.types.chat.User + +public inline fun Chat.ifUser(block: (User) -> T): T? = userOrNull() ?.let(block) + +public inline fun Chat.botOrNull(): Bot? = this as? dev.inmo.tgbotapi.types.chat.Bot + +public inline fun Chat.botOrThrow(): Bot = this as dev.inmo.tgbotapi.types.chat.Bot + +public inline fun Chat.ifBot(block: (Bot) -> T): T? = botOrNull() ?.let(block) + +public inline fun Chat.commonBotOrNull(): CommonBot? = this as? + dev.inmo.tgbotapi.types.chat.CommonBot + +public inline fun Chat.commonBotOrThrow(): CommonBot = this as + dev.inmo.tgbotapi.types.chat.CommonBot + +public inline fun Chat.ifCommonBot(block: (CommonBot) -> T): T? = commonBotOrNull() ?.let(block) + +public inline fun Chat.commonUserOrNull(): CommonUser? = this as? + dev.inmo.tgbotapi.types.chat.CommonUser + +public inline fun Chat.commonUserOrThrow(): CommonUser = this as + dev.inmo.tgbotapi.types.chat.CommonUser + +public inline fun Chat.ifCommonUser(block: (CommonUser) -> T): T? = commonUserOrNull() + ?.let(block) + +public inline fun Chat.unknownChatTypeOrNull(): UnknownChatType? = this as? + dev.inmo.tgbotapi.types.chat.UnknownChatType + +public inline fun Chat.unknownChatTypeOrThrow(): UnknownChatType = this as + dev.inmo.tgbotapi.types.chat.UnknownChatType + +public inline fun Chat.ifUnknownChatType(block: (UnknownChatType) -> T): T? = + unknownChatTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.cubeDiceAnimationTypeOrNull(): CubeDiceAnimationType? = this as? + dev.inmo.tgbotapi.types.dice.CubeDiceAnimationType + +public inline fun DiceAnimationType.cubeDiceAnimationTypeOrThrow(): CubeDiceAnimationType = this as + dev.inmo.tgbotapi.types.dice.CubeDiceAnimationType + +public inline fun + DiceAnimationType.ifCubeDiceAnimationType(block: (CubeDiceAnimationType) -> T): T? = + cubeDiceAnimationTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.dartsDiceAnimationTypeOrNull(): DartsDiceAnimationType? = this + as? dev.inmo.tgbotapi.types.dice.DartsDiceAnimationType + +public inline fun DiceAnimationType.dartsDiceAnimationTypeOrThrow(): DartsDiceAnimationType = this + as dev.inmo.tgbotapi.types.dice.DartsDiceAnimationType + +public inline fun + DiceAnimationType.ifDartsDiceAnimationType(block: (DartsDiceAnimationType) -> T): T? = + dartsDiceAnimationTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.basketballDiceAnimationTypeOrNull(): + BasketballDiceAnimationType? = this as? dev.inmo.tgbotapi.types.dice.BasketballDiceAnimationType + +public inline fun DiceAnimationType.basketballDiceAnimationTypeOrThrow(): + BasketballDiceAnimationType = this as dev.inmo.tgbotapi.types.dice.BasketballDiceAnimationType + +public inline fun + DiceAnimationType.ifBasketballDiceAnimationType(block: (BasketballDiceAnimationType) -> T): T? = + basketballDiceAnimationTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.footballDiceAnimationTypeOrNull(): FootballDiceAnimationType? = + this as? dev.inmo.tgbotapi.types.dice.FootballDiceAnimationType + +public inline fun DiceAnimationType.footballDiceAnimationTypeOrThrow(): FootballDiceAnimationType = + this as dev.inmo.tgbotapi.types.dice.FootballDiceAnimationType + +public inline fun + DiceAnimationType.ifFootballDiceAnimationType(block: (FootballDiceAnimationType) -> T): T? = + footballDiceAnimationTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.bowlingDiceAnimationTypeOrNull(): BowlingDiceAnimationType? = + this as? dev.inmo.tgbotapi.types.dice.BowlingDiceAnimationType + +public inline fun DiceAnimationType.bowlingDiceAnimationTypeOrThrow(): BowlingDiceAnimationType = + this as dev.inmo.tgbotapi.types.dice.BowlingDiceAnimationType + +public inline fun + DiceAnimationType.ifBowlingDiceAnimationType(block: (BowlingDiceAnimationType) -> T): T? = + bowlingDiceAnimationTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.slotMachineDiceAnimationTypeOrNull(): + SlotMachineDiceAnimationType? = this as? + dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType + +public inline fun DiceAnimationType.slotMachineDiceAnimationTypeOrThrow(): + SlotMachineDiceAnimationType = this as dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType + +public inline fun + DiceAnimationType.ifSlotMachineDiceAnimationType(block: (SlotMachineDiceAnimationType) -> T): T? + = slotMachineDiceAnimationTypeOrNull() ?.let(block) + +public inline fun DiceAnimationType.customDiceAnimationTypeOrNull(): CustomDiceAnimationType? = this + as? dev.inmo.tgbotapi.types.dice.CustomDiceAnimationType + +public inline fun DiceAnimationType.customDiceAnimationTypeOrThrow(): CustomDiceAnimationType = this + as dev.inmo.tgbotapi.types.dice.CustomDiceAnimationType + +public inline fun + DiceAnimationType.ifCustomDiceAnimationType(block: (CustomDiceAnimationType) -> T): T? = + customDiceAnimationTypeOrNull() ?.let(block) + +public inline fun TelegramMediaFile.animationFileOrNull(): AnimationFile? = this as? + dev.inmo.tgbotapi.types.files.AnimationFile + +public inline fun TelegramMediaFile.animationFileOrThrow(): AnimationFile = this as + dev.inmo.tgbotapi.types.files.AnimationFile + +public inline fun TelegramMediaFile.ifAnimationFile(block: (AnimationFile) -> T): T? = + animationFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.audioFileOrNull(): AudioFile? = this as? + dev.inmo.tgbotapi.types.files.AudioFile + +public inline fun TelegramMediaFile.audioFileOrThrow(): AudioFile = this as + dev.inmo.tgbotapi.types.files.AudioFile + +public inline fun TelegramMediaFile.ifAudioFile(block: (AudioFile) -> T): T? = audioFileOrNull() + ?.let(block) + +public inline fun TelegramMediaFile.documentFileOrNull(): DocumentFile? = this as? + dev.inmo.tgbotapi.types.files.DocumentFile + +public inline fun TelegramMediaFile.documentFileOrThrow(): DocumentFile = this as + dev.inmo.tgbotapi.types.files.DocumentFile + +public inline fun TelegramMediaFile.ifDocumentFile(block: (DocumentFile) -> T): T? = + documentFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.fileOrNull(): File? = this as? + dev.inmo.tgbotapi.types.files.File + +public inline fun TelegramMediaFile.fileOrThrow(): File = this as dev.inmo.tgbotapi.types.files.File + +public inline fun TelegramMediaFile.ifFile(block: (File) -> T): T? = fileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.mimedMediaFileOrNull(): MimedMediaFile? = this as? + dev.inmo.tgbotapi.types.files.MimedMediaFile + +public inline fun TelegramMediaFile.mimedMediaFileOrThrow(): MimedMediaFile = this as + dev.inmo.tgbotapi.types.files.MimedMediaFile + +public inline fun TelegramMediaFile.ifMimedMediaFile(block: (MimedMediaFile) -> T): T? = + mimedMediaFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.passportFileOrNull(): PassportFile? = this as? + dev.inmo.tgbotapi.types.files.PassportFile + +public inline fun TelegramMediaFile.passportFileOrThrow(): PassportFile = this as + dev.inmo.tgbotapi.types.files.PassportFile + +public inline fun TelegramMediaFile.ifPassportFile(block: (PassportFile) -> T): T? = + passportFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.pathedFileOrNull(): PathedFile? = this as? + dev.inmo.tgbotapi.types.files.PathedFile + +public inline fun TelegramMediaFile.pathedFileOrThrow(): PathedFile = this as + dev.inmo.tgbotapi.types.files.PathedFile + +public inline fun TelegramMediaFile.ifPathedFile(block: (PathedFile) -> T): T? = + pathedFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.photoSizeOrNull(): PhotoSize? = this as? + dev.inmo.tgbotapi.types.files.PhotoSize + +public inline fun TelegramMediaFile.photoSizeOrThrow(): PhotoSize = this as + dev.inmo.tgbotapi.types.files.PhotoSize + +public inline fun TelegramMediaFile.ifPhotoSize(block: (PhotoSize) -> T): T? = photoSizeOrNull() + ?.let(block) + +public inline fun TelegramMediaFile.playableMediaFileOrNull(): PlayableMediaFile? = this as? + dev.inmo.tgbotapi.types.files.PlayableMediaFile + +public inline fun TelegramMediaFile.playableMediaFileOrThrow(): PlayableMediaFile = this as + dev.inmo.tgbotapi.types.files.PlayableMediaFile + +public inline fun TelegramMediaFile.ifPlayableMediaFile(block: (PlayableMediaFile) -> T): T? = + playableMediaFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.sizedMediaFileOrNull(): SizedMediaFile? = this as? + dev.inmo.tgbotapi.types.files.SizedMediaFile + +public inline fun TelegramMediaFile.sizedMediaFileOrThrow(): SizedMediaFile = this as + dev.inmo.tgbotapi.types.files.SizedMediaFile + +public inline fun TelegramMediaFile.ifSizedMediaFile(block: (SizedMediaFile) -> T): T? = + sizedMediaFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.stickerOrNull(): Sticker? = this as? + dev.inmo.tgbotapi.types.files.Sticker + +public inline fun TelegramMediaFile.stickerOrThrow(): Sticker = this as + dev.inmo.tgbotapi.types.files.Sticker + +public inline fun TelegramMediaFile.ifSticker(block: (Sticker) -> T): T? = stickerOrNull() + ?.let(block) + +public inline fun TelegramMediaFile.simpleStickerOrNull(): SimpleSticker? = this as? + dev.inmo.tgbotapi.types.files.SimpleSticker + +public inline fun TelegramMediaFile.simpleStickerOrThrow(): SimpleSticker = this as + dev.inmo.tgbotapi.types.files.SimpleSticker + +public inline fun TelegramMediaFile.ifSimpleSticker(block: (SimpleSticker) -> T): T? = + simpleStickerOrNull() ?.let(block) + +public inline fun TelegramMediaFile.animatedStickerOrNull(): AnimatedSticker? = this as? + dev.inmo.tgbotapi.types.files.AnimatedSticker + +public inline fun TelegramMediaFile.animatedStickerOrThrow(): AnimatedSticker = this as + dev.inmo.tgbotapi.types.files.AnimatedSticker + +public inline fun TelegramMediaFile.ifAnimatedSticker(block: (AnimatedSticker) -> T): T? = + animatedStickerOrNull() ?.let(block) + +public inline fun TelegramMediaFile.videoStickerOrNull(): VideoSticker? = this as? + dev.inmo.tgbotapi.types.files.VideoSticker + +public inline fun TelegramMediaFile.videoStickerOrThrow(): VideoSticker = this as + dev.inmo.tgbotapi.types.files.VideoSticker + +public inline fun TelegramMediaFile.ifVideoSticker(block: (VideoSticker) -> T): T? = + videoStickerOrNull() ?.let(block) + +public inline fun TelegramMediaFile.thumbedMediaFileOrNull(): ThumbedMediaFile? = this as? + dev.inmo.tgbotapi.types.files.ThumbedMediaFile + +public inline fun TelegramMediaFile.thumbedMediaFileOrThrow(): ThumbedMediaFile = this as + dev.inmo.tgbotapi.types.files.ThumbedMediaFile + +public inline fun TelegramMediaFile.ifThumbedMediaFile(block: (ThumbedMediaFile) -> T): T? = + thumbedMediaFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.videoFileOrNull(): VideoFile? = this as? + dev.inmo.tgbotapi.types.files.VideoFile + +public inline fun TelegramMediaFile.videoFileOrThrow(): VideoFile = this as + dev.inmo.tgbotapi.types.files.VideoFile + +public inline fun TelegramMediaFile.ifVideoFile(block: (VideoFile) -> T): T? = videoFileOrNull() + ?.let(block) + +public inline fun TelegramMediaFile.videoNoteFileOrNull(): VideoNoteFile? = this as? + dev.inmo.tgbotapi.types.files.VideoNoteFile + +public inline fun TelegramMediaFile.videoNoteFileOrThrow(): VideoNoteFile = this as + dev.inmo.tgbotapi.types.files.VideoNoteFile + +public inline fun TelegramMediaFile.ifVideoNoteFile(block: (VideoNoteFile) -> T): T? = + videoNoteFileOrNull() ?.let(block) + +public inline fun TelegramMediaFile.voiceFileOrNull(): VoiceFile? = this as? + dev.inmo.tgbotapi.types.files.VoiceFile + +public inline fun TelegramMediaFile.voiceFileOrThrow(): VoiceFile = this as + dev.inmo.tgbotapi.types.files.VoiceFile + +public inline fun TelegramMediaFile.ifVoiceFile(block: (VoiceFile) -> T): T? = voiceFileOrNull() + ?.let(block) + +public inline fun Location.staticLocationOrNull(): StaticLocation? = this as? + dev.inmo.tgbotapi.types.location.StaticLocation + +public inline fun Location.staticLocationOrThrow(): StaticLocation = this as + dev.inmo.tgbotapi.types.location.StaticLocation + +public inline fun Location.ifStaticLocation(block: (StaticLocation) -> T): T? = + staticLocationOrNull() ?.let(block) + +public inline fun Location.liveLocationOrNull(): LiveLocation? = this as? + dev.inmo.tgbotapi.types.location.LiveLocation + +public inline fun Location.liveLocationOrThrow(): LiveLocation = this as + dev.inmo.tgbotapi.types.location.LiveLocation + +public inline fun Location.ifLiveLocation(block: (LiveLocation) -> T): T? = liveLocationOrNull() + ?.let(block) + +public inline fun TelegramMedia.duratedTelegramMediaOrNull(): DuratedTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.DuratedTelegramMedia + +public inline fun TelegramMedia.duratedTelegramMediaOrThrow(): DuratedTelegramMedia = this as + dev.inmo.tgbotapi.types.media.DuratedTelegramMedia + +public inline fun TelegramMedia.ifDuratedTelegramMedia(block: (DuratedTelegramMedia) -> T): T? = + duratedTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.mediaGroupMemberTelegramMediaOrNull(): + MediaGroupMemberTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.MediaGroupMemberTelegramMedia + +public inline fun TelegramMedia.mediaGroupMemberTelegramMediaOrThrow(): + MediaGroupMemberTelegramMedia = this as + dev.inmo.tgbotapi.types.media.MediaGroupMemberTelegramMedia + +public inline fun + TelegramMedia.ifMediaGroupMemberTelegramMedia(block: (MediaGroupMemberTelegramMedia) -> T): T? = + mediaGroupMemberTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.audioMediaGroupMemberTelegramMediaOrNull(): + AudioMediaGroupMemberTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.AudioMediaGroupMemberTelegramMedia + +public inline fun TelegramMedia.audioMediaGroupMemberTelegramMediaOrThrow(): + AudioMediaGroupMemberTelegramMedia = this as + dev.inmo.tgbotapi.types.media.AudioMediaGroupMemberTelegramMedia + +public inline fun + TelegramMedia.ifAudioMediaGroupMemberTelegramMedia(block: (AudioMediaGroupMemberTelegramMedia) -> T): + T? = audioMediaGroupMemberTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.documentMediaGroupMemberTelegramMediaOrNull(): + DocumentMediaGroupMemberTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.DocumentMediaGroupMemberTelegramMedia + +public inline fun TelegramMedia.documentMediaGroupMemberTelegramMediaOrThrow(): + DocumentMediaGroupMemberTelegramMedia = this as + dev.inmo.tgbotapi.types.media.DocumentMediaGroupMemberTelegramMedia + +public inline fun + TelegramMedia.ifDocumentMediaGroupMemberTelegramMedia(block: (DocumentMediaGroupMemberTelegramMedia) -> T): + T? = documentMediaGroupMemberTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.visualMediaGroupMemberTelegramMediaOrNull(): + VisualMediaGroupMemberTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.VisualMediaGroupMemberTelegramMedia + +public inline fun TelegramMedia.visualMediaGroupMemberTelegramMediaOrThrow(): + VisualMediaGroupMemberTelegramMedia = this as + dev.inmo.tgbotapi.types.media.VisualMediaGroupMemberTelegramMedia + +public inline fun + TelegramMedia.ifVisualMediaGroupMemberTelegramMedia(block: (VisualMediaGroupMemberTelegramMedia) -> T): + T? = visualMediaGroupMemberTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.sizedTelegramMediaOrNull(): SizedTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.SizedTelegramMedia + +public inline fun TelegramMedia.sizedTelegramMediaOrThrow(): SizedTelegramMedia = this as + dev.inmo.tgbotapi.types.media.SizedTelegramMedia + +public inline fun TelegramMedia.ifSizedTelegramMedia(block: (SizedTelegramMedia) -> T): T? = + sizedTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.telegramMediaAnimationOrNull(): TelegramMediaAnimation? = this as? + dev.inmo.tgbotapi.types.media.TelegramMediaAnimation + +public inline fun TelegramMedia.telegramMediaAnimationOrThrow(): TelegramMediaAnimation = this as + dev.inmo.tgbotapi.types.media.TelegramMediaAnimation + +public inline fun TelegramMedia.ifTelegramMediaAnimation(block: (TelegramMediaAnimation) -> T): + T? = telegramMediaAnimationOrNull() ?.let(block) + +public inline fun TelegramMedia.telegramMediaAudioOrNull(): TelegramMediaAudio? = this as? + dev.inmo.tgbotapi.types.media.TelegramMediaAudio + +public inline fun TelegramMedia.telegramMediaAudioOrThrow(): TelegramMediaAudio = this as + dev.inmo.tgbotapi.types.media.TelegramMediaAudio + +public inline fun TelegramMedia.ifTelegramMediaAudio(block: (TelegramMediaAudio) -> T): T? = + telegramMediaAudioOrNull() ?.let(block) + +public inline fun TelegramMedia.telegramMediaDocumentOrNull(): TelegramMediaDocument? = this as? + dev.inmo.tgbotapi.types.media.TelegramMediaDocument + +public inline fun TelegramMedia.telegramMediaDocumentOrThrow(): TelegramMediaDocument = this as + dev.inmo.tgbotapi.types.media.TelegramMediaDocument + +public inline fun TelegramMedia.ifTelegramMediaDocument(block: (TelegramMediaDocument) -> T): T? + = telegramMediaDocumentOrNull() ?.let(block) + +public inline fun TelegramMedia.telegramMediaPhotoOrNull(): TelegramMediaPhoto? = this as? + dev.inmo.tgbotapi.types.media.TelegramMediaPhoto + +public inline fun TelegramMedia.telegramMediaPhotoOrThrow(): TelegramMediaPhoto = this as + dev.inmo.tgbotapi.types.media.TelegramMediaPhoto + +public inline fun TelegramMedia.ifTelegramMediaPhoto(block: (TelegramMediaPhoto) -> T): T? = + telegramMediaPhotoOrNull() ?.let(block) + +public inline fun TelegramMedia.telegramMediaVideoOrNull(): TelegramMediaVideo? = this as? + dev.inmo.tgbotapi.types.media.TelegramMediaVideo + +public inline fun TelegramMedia.telegramMediaVideoOrThrow(): TelegramMediaVideo = this as + dev.inmo.tgbotapi.types.media.TelegramMediaVideo + +public inline fun TelegramMedia.ifTelegramMediaVideo(block: (TelegramMediaVideo) -> T): T? = + telegramMediaVideoOrNull() ?.let(block) + +public inline fun TelegramMedia.thumbedTelegramMediaOrNull(): ThumbedTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.ThumbedTelegramMedia + +public inline fun TelegramMedia.thumbedTelegramMediaOrThrow(): ThumbedTelegramMedia = this as + dev.inmo.tgbotapi.types.media.ThumbedTelegramMedia + +public inline fun TelegramMedia.ifThumbedTelegramMedia(block: (ThumbedTelegramMedia) -> T): T? = + thumbedTelegramMediaOrNull() ?.let(block) + +public inline fun TelegramMedia.titledTelegramMediaOrNull(): TitledTelegramMedia? = this as? + dev.inmo.tgbotapi.types.media.TitledTelegramMedia + +public inline fun TelegramMedia.titledTelegramMediaOrThrow(): TitledTelegramMedia = this as + dev.inmo.tgbotapi.types.media.TitledTelegramMedia + +public inline fun TelegramMedia.ifTitledTelegramMedia(block: (TitledTelegramMedia) -> T): T? = + titledTelegramMediaOrNull() ?.let(block) + +public inline fun ChatEvent.channelChatCreatedOrNull(): ChannelChatCreated? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.ChannelChatCreated + +public inline fun ChatEvent.channelChatCreatedOrThrow(): ChannelChatCreated = this as + dev.inmo.tgbotapi.types.message.ChatEvents.ChannelChatCreated + +public inline fun ChatEvent.ifChannelChatCreated(block: (ChannelChatCreated) -> T): T? = + channelChatCreatedOrNull() ?.let(block) + +public inline fun ChatEvent.deleteChatPhotoOrNull(): DeleteChatPhoto? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.DeleteChatPhoto + +public inline fun ChatEvent.deleteChatPhotoOrThrow(): DeleteChatPhoto = this as + dev.inmo.tgbotapi.types.message.ChatEvents.DeleteChatPhoto + +public inline fun ChatEvent.ifDeleteChatPhoto(block: (DeleteChatPhoto) -> T): T? = + deleteChatPhotoOrNull() ?.let(block) + +public inline fun ChatEvent.groupChatCreatedOrNull(): GroupChatCreated? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.GroupChatCreated + +public inline fun ChatEvent.groupChatCreatedOrThrow(): GroupChatCreated = this as + dev.inmo.tgbotapi.types.message.ChatEvents.GroupChatCreated + +public inline fun ChatEvent.ifGroupChatCreated(block: (GroupChatCreated) -> T): T? = + groupChatCreatedOrNull() ?.let(block) + +public inline fun ChatEvent.leftChatMemberEventOrNull(): LeftChatMemberEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.LeftChatMemberEvent + +public inline fun ChatEvent.leftChatMemberEventOrThrow(): LeftChatMemberEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.LeftChatMemberEvent + +public inline fun ChatEvent.ifLeftChatMemberEvent(block: (LeftChatMemberEvent) -> T): T? = + leftChatMemberEventOrNull() ?.let(block) + +public inline fun ChatEvent.messageAutoDeleteTimerChangedOrNull(): MessageAutoDeleteTimerChanged? = + this as? dev.inmo.tgbotapi.types.message.ChatEvents.MessageAutoDeleteTimerChanged + +public inline fun ChatEvent.messageAutoDeleteTimerChangedOrThrow(): MessageAutoDeleteTimerChanged = + this as dev.inmo.tgbotapi.types.message.ChatEvents.MessageAutoDeleteTimerChanged + +public inline fun + ChatEvent.ifMessageAutoDeleteTimerChanged(block: (MessageAutoDeleteTimerChanged) -> T): T? = + messageAutoDeleteTimerChangedOrNull() ?.let(block) + +public inline fun ChatEvent.migratedToSupergroupOrNull(): MigratedToSupergroup? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.MigratedToSupergroup + +public inline fun ChatEvent.migratedToSupergroupOrThrow(): MigratedToSupergroup = this as + dev.inmo.tgbotapi.types.message.ChatEvents.MigratedToSupergroup + +public inline fun ChatEvent.ifMigratedToSupergroup(block: (MigratedToSupergroup) -> T): T? = + migratedToSupergroupOrNull() ?.let(block) + +public inline fun ChatEvent.newChatMembersOrNull(): NewChatMembers? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.NewChatMembers + +public inline fun ChatEvent.newChatMembersOrThrow(): NewChatMembers = this as + dev.inmo.tgbotapi.types.message.ChatEvents.NewChatMembers + +public inline fun ChatEvent.ifNewChatMembers(block: (NewChatMembers) -> T): T? = + newChatMembersOrNull() ?.let(block) + +public inline fun ChatEvent.newChatPhotoOrNull(): NewChatPhoto? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.NewChatPhoto + +public inline fun ChatEvent.newChatPhotoOrThrow(): NewChatPhoto = this as + dev.inmo.tgbotapi.types.message.ChatEvents.NewChatPhoto + +public inline fun ChatEvent.ifNewChatPhoto(block: (NewChatPhoto) -> T): T? = + newChatPhotoOrNull() ?.let(block) + +public inline fun ChatEvent.newChatTitleOrNull(): NewChatTitle? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.NewChatTitle + +public inline fun ChatEvent.newChatTitleOrThrow(): NewChatTitle = this as + dev.inmo.tgbotapi.types.message.ChatEvents.NewChatTitle + +public inline fun ChatEvent.ifNewChatTitle(block: (NewChatTitle) -> T): T? = + newChatTitleOrNull() ?.let(block) + +public inline fun ChatEvent.pinnedMessageOrNull(): PinnedMessage? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.PinnedMessage + +public inline fun ChatEvent.pinnedMessageOrThrow(): PinnedMessage = this as + dev.inmo.tgbotapi.types.message.ChatEvents.PinnedMessage + +public inline fun ChatEvent.ifPinnedMessage(block: (PinnedMessage) -> T): T? = + pinnedMessageOrNull() ?.let(block) + +public inline fun ChatEvent.proximityAlertTriggeredOrNull(): ProximityAlertTriggered? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.ProximityAlertTriggered + +public inline fun ChatEvent.proximityAlertTriggeredOrThrow(): ProximityAlertTriggered = this as + dev.inmo.tgbotapi.types.message.ChatEvents.ProximityAlertTriggered + +public inline fun ChatEvent.ifProximityAlertTriggered(block: (ProximityAlertTriggered) -> T): T? + = proximityAlertTriggeredOrNull() ?.let(block) + +public inline fun ChatEvent.supergroupChatCreatedOrNull(): SupergroupChatCreated? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.SupergroupChatCreated + +public inline fun ChatEvent.supergroupChatCreatedOrThrow(): SupergroupChatCreated = this as + dev.inmo.tgbotapi.types.message.ChatEvents.SupergroupChatCreated + +public inline fun ChatEvent.ifSupergroupChatCreated(block: (SupergroupChatCreated) -> T): T? = + supergroupChatCreatedOrNull() ?.let(block) + +public inline fun ChatEvent.userLoggedInOrNull(): UserLoggedIn? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.UserLoggedIn + +public inline fun ChatEvent.userLoggedInOrThrow(): UserLoggedIn = this as + dev.inmo.tgbotapi.types.message.ChatEvents.UserLoggedIn + +public inline fun ChatEvent.ifUserLoggedIn(block: (UserLoggedIn) -> T): T? = + userLoggedInOrNull() ?.let(block) + +public inline fun ChatEvent.webAppDataOrNull(): WebAppData? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.WebAppData + +public inline fun ChatEvent.webAppDataOrThrow(): WebAppData = this as + dev.inmo.tgbotapi.types.message.ChatEvents.WebAppData + +public inline fun ChatEvent.ifWebAppData(block: (WebAppData) -> T): T? = webAppDataOrNull() + ?.let(block) + +public inline fun ChatEvent.channelEventOrNull(): ChannelEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent + +public inline fun ChatEvent.channelEventOrThrow(): ChannelEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent + +public inline fun ChatEvent.ifChannelEvent(block: (ChannelEvent) -> T): T? = + channelEventOrNull() ?.let(block) + +public inline fun ChatEvent.commonEventOrNull(): CommonEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent + +public inline fun ChatEvent.commonEventOrThrow(): CommonEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent + +public inline fun ChatEvent.ifCommonEvent(block: (CommonEvent) -> T): T? = commonEventOrNull() + ?.let(block) + +public inline fun ChatEvent.groupEventOrNull(): GroupEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.GroupEvent + +public inline fun ChatEvent.groupEventOrThrow(): GroupEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.GroupEvent + +public inline fun ChatEvent.ifGroupEvent(block: (GroupEvent) -> T): T? = groupEventOrNull() + ?.let(block) + +public inline fun ChatEvent.privateEventOrNull(): PrivateEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PrivateEvent + +public inline fun ChatEvent.privateEventOrThrow(): PrivateEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PrivateEvent + +public inline fun ChatEvent.ifPrivateEvent(block: (PrivateEvent) -> T): T? = + privateEventOrNull() ?.let(block) + +public inline fun ChatEvent.publicChatEventOrNull(): PublicChatEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent + +public inline fun ChatEvent.publicChatEventOrThrow(): PublicChatEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent + +public inline fun ChatEvent.ifPublicChatEvent(block: (PublicChatEvent) -> T): T? = + publicChatEventOrNull() ?.let(block) + +public inline fun ChatEvent.supergroupEventOrNull(): SupergroupEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.SupergroupEvent + +public inline fun ChatEvent.supergroupEventOrThrow(): SupergroupEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.SupergroupEvent + +public inline fun ChatEvent.ifSupergroupEvent(block: (SupergroupEvent) -> T): T? = + supergroupEventOrNull() ?.let(block) + +public inline fun ChatEvent.videoChatEventOrNull(): VideoChatEvent? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.VideoChatEvent + +public inline fun ChatEvent.videoChatEventOrThrow(): VideoChatEvent = this as + dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.VideoChatEvent + +public inline fun ChatEvent.ifVideoChatEvent(block: (VideoChatEvent) -> T): T? = + videoChatEventOrNull() ?.let(block) + +public inline fun ChatEvent.videoChatEndedOrNull(): VideoChatEnded? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatEnded + +public inline fun ChatEvent.videoChatEndedOrThrow(): VideoChatEnded = this as + dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatEnded + +public inline fun ChatEvent.ifVideoChatEnded(block: (VideoChatEnded) -> T): T? = + videoChatEndedOrNull() ?.let(block) + +public inline fun ChatEvent.videoChatParticipantsInvitedOrNull(): VideoChatParticipantsInvited? = + this as? dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatParticipantsInvited + +public inline fun ChatEvent.videoChatParticipantsInvitedOrThrow(): VideoChatParticipantsInvited = + this as dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatParticipantsInvited + +public inline fun + ChatEvent.ifVideoChatParticipantsInvited(block: (VideoChatParticipantsInvited) -> T): T? = + videoChatParticipantsInvitedOrNull() ?.let(block) + +public inline fun ChatEvent.videoChatScheduledOrNull(): VideoChatScheduled? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatScheduled + +public inline fun ChatEvent.videoChatScheduledOrThrow(): VideoChatScheduled = this as + dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatScheduled + +public inline fun ChatEvent.ifVideoChatScheduled(block: (VideoChatScheduled) -> T): T? = + videoChatScheduledOrNull() ?.let(block) + +public inline fun ChatEvent.videoChatStartedOrNull(): VideoChatStarted? = this as? + dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatStarted + +public inline fun ChatEvent.videoChatStartedOrThrow(): VideoChatStarted = this as + dev.inmo.tgbotapi.types.message.ChatEvents.voice.VideoChatStarted + +public inline fun ChatEvent.ifVideoChatStarted(block: (VideoChatStarted) -> T): T? = + videoChatStartedOrNull() ?.let(block) + +public inline fun ChatEvent.successfulPaymentEventOrNull(): SuccessfulPaymentEvent? = this as? + dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent + +public inline fun ChatEvent.successfulPaymentEventOrThrow(): SuccessfulPaymentEvent = this as + dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent + +public inline fun ChatEvent.ifSuccessfulPaymentEvent(block: (SuccessfulPaymentEvent) -> T): T? = + successfulPaymentEventOrNull() ?.let(block) + +public inline fun ForwardInfo.byAnonymousOrNull(): ForwardInfo.ByAnonymous? = this as? + dev.inmo.tgbotapi.types.message.ForwardInfo.ByAnonymous + +public inline fun ForwardInfo.byAnonymousOrThrow(): ForwardInfo.ByAnonymous = this as + dev.inmo.tgbotapi.types.message.ForwardInfo.ByAnonymous + +public inline fun ForwardInfo.ifByAnonymous(block: (ForwardInfo.ByAnonymous) -> T): T? = + byAnonymousOrNull() ?.let(block) + +public inline fun ForwardInfo.byUserOrNull(): ForwardInfo.ByUser? = this as? + dev.inmo.tgbotapi.types.message.ForwardInfo.ByUser + +public inline fun ForwardInfo.byUserOrThrow(): ForwardInfo.ByUser = this as + dev.inmo.tgbotapi.types.message.ForwardInfo.ByUser + +public inline fun ForwardInfo.ifByUser(block: (ForwardInfo.ByUser) -> T): T? = byUserOrNull() + ?.let(block) + +public inline fun ForwardInfo.publicChatOrNull(): ForwardInfo.PublicChat? = this as? + dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat + +public inline fun ForwardInfo.publicChatOrThrow(): ForwardInfo.PublicChat = this as + dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat + +public inline fun ForwardInfo.ifPublicChat(block: (ForwardInfo.PublicChat) -> T): T? = + publicChatOrNull() ?.let(block) + +public inline fun ForwardInfo.fromChannelOrNull(): ForwardInfo.PublicChat.FromChannel? = this as? + dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat.FromChannel + +public inline fun ForwardInfo.fromChannelOrThrow(): ForwardInfo.PublicChat.FromChannel = this as + dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat.FromChannel + +public inline fun ForwardInfo.ifFromChannel(block: (ForwardInfo.PublicChat.FromChannel) -> T): + T? = fromChannelOrNull() ?.let(block) + +public inline fun ForwardInfo.fromSupergroupOrNull(): ForwardInfo.PublicChat.FromSupergroup? = this + as? dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat.FromSupergroup + +public inline fun ForwardInfo.fromSupergroupOrThrow(): ForwardInfo.PublicChat.FromSupergroup = this + as dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat.FromSupergroup + +public inline fun + ForwardInfo.ifFromSupergroup(block: (ForwardInfo.PublicChat.FromSupergroup) -> T): T? = + fromSupergroupOrNull() ?.let(block) + +public inline fun ForwardInfo.sentByChannelOrNull(): ForwardInfo.PublicChat.SentByChannel? = this + as? dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat.SentByChannel + +public inline fun ForwardInfo.sentByChannelOrThrow(): ForwardInfo.PublicChat.SentByChannel = this as + dev.inmo.tgbotapi.types.message.ForwardInfo.PublicChat.SentByChannel + +public inline fun + ForwardInfo.ifSentByChannel(block: (ForwardInfo.PublicChat.SentByChannel) -> T): T? = + sentByChannelOrNull() ?.let(block) + +public inline fun Message.channelContentMessageImplOrNull(): + ChannelContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl + +public inline fun Message.channelContentMessageImplOrThrow(): + ChannelContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl + +public inline fun + Message.ifChannelContentMessageImpl(block: (ChannelContentMessageImpl) -> T): T? + = channelContentMessageImplOrNull() ?.let(block) + +public inline fun Message.channelEventMessageOrNull(): ChannelEventMessage? = this as? + dev.inmo.tgbotapi.types.message.ChannelEventMessage + +public inline fun Message.channelEventMessageOrThrow(): ChannelEventMessage = this as + dev.inmo.tgbotapi.types.message.ChannelEventMessage + +public inline fun + Message.ifChannelEventMessage(block: (ChannelEventMessage) -> T): T? = + channelEventMessageOrNull() ?.let(block) + +public inline fun Message.channelMediaGroupMessageOrNull(): + ChannelMediaGroupMessage? = this as? + dev.inmo.tgbotapi.types.message.ChannelMediaGroupMessage + +public inline fun Message.channelMediaGroupMessageOrThrow(): + ChannelMediaGroupMessage = this as + dev.inmo.tgbotapi.types.message.ChannelMediaGroupMessage + +public inline fun + Message.ifChannelMediaGroupMessage(block: (ChannelMediaGroupMessage) -> T): + T? = channelMediaGroupMessageOrNull() ?.let(block) + +public inline fun Message.commonGroupEventMessageOrNull(): CommonGroupEventMessage? = + this as? + dev.inmo.tgbotapi.types.message.CommonGroupEventMessage + +public inline fun Message.commonGroupEventMessageOrThrow(): CommonGroupEventMessage = + this as + dev.inmo.tgbotapi.types.message.CommonGroupEventMessage + +public inline fun + Message.ifCommonGroupEventMessage(block: (CommonGroupEventMessage) -> T): T? = + commonGroupEventMessageOrNull() ?.let(block) + +public inline fun Message.commonMediaGroupMessageOrNull(): + CommonMediaGroupMessage? = this as? + dev.inmo.tgbotapi.types.message.CommonMediaGroupMessage + +public inline fun Message.commonMediaGroupMessageOrThrow(): + CommonMediaGroupMessage = this as + dev.inmo.tgbotapi.types.message.CommonMediaGroupMessage + +public inline fun + Message.ifCommonMediaGroupMessage(block: (CommonMediaGroupMessage) -> T): T? + = commonMediaGroupMessageOrNull() ?.let(block) + +public inline fun Message.commonSupergroupEventMessageOrNull(): + CommonSupergroupEventMessage? = this as? + dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage + +public inline fun Message.commonSupergroupEventMessageOrThrow(): + CommonSupergroupEventMessage = this as + dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage + +public inline fun + Message.ifCommonSupergroupEventMessage(block: (CommonSupergroupEventMessage) -> T): + T? = commonSupergroupEventMessageOrNull() ?.let(block) + +public inline fun Message.connectedFromChannelGroupContentMessageImplOrNull(): + ConnectedFromChannelGroupContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.ConnectedFromChannelGroupContentMessageImpl + +public inline fun Message.connectedFromChannelGroupContentMessageImplOrThrow(): + ConnectedFromChannelGroupContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.ConnectedFromChannelGroupContentMessageImpl + +public inline fun + Message.ifConnectedFromChannelGroupContentMessageImpl(block: (ConnectedFromChannelGroupContentMessageImpl) -> T): + T? = connectedFromChannelGroupContentMessageImplOrNull() ?.let(block) + +public inline fun Message.unconnectedFromChannelGroupContentMessageImplOrNull(): + UnconnectedFromChannelGroupContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.UnconnectedFromChannelGroupContentMessageImpl + +public inline fun Message.unconnectedFromChannelGroupContentMessageImplOrThrow(): + UnconnectedFromChannelGroupContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.UnconnectedFromChannelGroupContentMessageImpl + +public inline fun + Message.ifUnconnectedFromChannelGroupContentMessageImpl(block: (UnconnectedFromChannelGroupContentMessageImpl) -> T): + T? = unconnectedFromChannelGroupContentMessageImplOrNull() ?.let(block) + +public inline fun Message.anonymousGroupContentMessageImplOrNull(): + AnonymousGroupContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.AnonymousGroupContentMessageImpl + +public inline fun Message.anonymousGroupContentMessageImplOrThrow(): + AnonymousGroupContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.AnonymousGroupContentMessageImpl + +public inline fun + Message.ifAnonymousGroupContentMessageImpl(block: (AnonymousGroupContentMessageImpl) -> T): + T? = anonymousGroupContentMessageImplOrNull() ?.let(block) + +public inline fun Message.commonGroupContentMessageImplOrNull(): + CommonGroupContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.CommonGroupContentMessageImpl + +public inline fun Message.commonGroupContentMessageImplOrThrow(): + CommonGroupContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.CommonGroupContentMessageImpl + +public inline fun + Message.ifCommonGroupContentMessageImpl(block: (CommonGroupContentMessageImpl) -> T): + T? = commonGroupContentMessageImplOrNull() ?.let(block) + +public inline fun Message.passportMessageOrNull(): PassportMessage? = this as? + dev.inmo.tgbotapi.types.message.PassportMessage + +public inline fun Message.passportMessageOrThrow(): PassportMessage = this as + dev.inmo.tgbotapi.types.message.PassportMessage + +public inline fun Message.ifPassportMessage(block: (PassportMessage) -> T): T? = + passportMessageOrNull() ?.let(block) + +public inline fun Message.privateContentMessageImplOrNull(): + PrivateContentMessageImpl? = this as? + dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl + +public inline fun Message.privateContentMessageImplOrThrow(): + PrivateContentMessageImpl = this as + dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl + +public inline fun + Message.ifPrivateContentMessageImpl(block: (PrivateContentMessageImpl) -> T): T? + = privateContentMessageImplOrNull() ?.let(block) + +public inline fun Message.privateEventMessageOrNull(): PrivateEventMessage? = this as? + dev.inmo.tgbotapi.types.message.PrivateEventMessage + +public inline fun Message.privateEventMessageOrThrow(): PrivateEventMessage = this as + dev.inmo.tgbotapi.types.message.PrivateEventMessage + +public inline fun + Message.ifPrivateEventMessage(block: (PrivateEventMessage) -> T): T? = + privateEventMessageOrNull() ?.let(block) + +public inline fun Message.channelContentMessageOrNull(): ChannelContentMessage? = + this as? + dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage + +public inline fun Message.channelContentMessageOrThrow(): ChannelContentMessage = + this as + dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage + +public inline fun + Message.ifChannelContentMessage(block: (ChannelContentMessage) -> T): T? = + channelContentMessageOrNull() ?.let(block) + +public inline fun Message.chatEventMessageOrNull(): ChatEventMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage + +public inline fun Message.chatEventMessageOrThrow(): ChatEventMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage + +public inline fun Message.ifChatEventMessage(block: (ChatEventMessage) -> T): T? = + chatEventMessageOrNull() ?.let(block) + +public inline fun Message.commonMessageOrNull(): CommonMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.CommonMessage + +public inline fun Message.commonMessageOrThrow(): CommonMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.CommonMessage + +public inline fun Message.ifCommonMessage(block: (CommonMessage) -> T): T? = + commonMessageOrNull() ?.let(block) + +public inline fun Message.contentMessageOrNull(): ContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.ContentMessage + +public inline fun Message.contentMessageOrThrow(): ContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.ContentMessage + +public inline fun Message.ifContentMessage(block: (ContentMessage) -> T): T? = + contentMessageOrNull() ?.let(block) + +public inline fun Message.fromUserMessageOrNull(): FromUserMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage + +public inline fun Message.fromUserMessageOrThrow(): FromUserMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage + +public inline fun Message.ifFromUserMessage(block: (FromUserMessage) -> T): T? = + fromUserMessageOrNull() ?.let(block) + +public inline fun Message.groupEventMessageOrNull(): GroupEventMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage + +public inline fun Message.groupEventMessageOrThrow(): GroupEventMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage + +public inline fun Message.ifGroupEventMessage(block: (GroupEventMessage) -> T): T? = + groupEventMessageOrNull() ?.let(block) + +public inline fun Message.groupContentMessageOrNull(): GroupContentMessage? = this + as? + dev.inmo.tgbotapi.types.message.abstracts.GroupContentMessage + +public inline fun Message.groupContentMessageOrThrow(): GroupContentMessage = this + as + dev.inmo.tgbotapi.types.message.abstracts.GroupContentMessage + +public inline fun + Message.ifGroupContentMessage(block: (GroupContentMessage) -> T): T? = + groupContentMessageOrNull() ?.let(block) + +public inline fun Message.fromChannelGroupContentMessageOrNull(): + FromChannelGroupContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.FromChannelGroupContentMessage + +public inline fun Message.fromChannelGroupContentMessageOrThrow(): + FromChannelGroupContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.FromChannelGroupContentMessage + +public inline fun + Message.ifFromChannelGroupContentMessage(block: (FromChannelGroupContentMessage) -> T): + T? = fromChannelGroupContentMessageOrNull() ?.let(block) + +public inline fun Message.connectedFromChannelGroupContentMessageOrNull(): + ConnectedFromChannelGroupContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage + +public inline fun Message.connectedFromChannelGroupContentMessageOrThrow(): + ConnectedFromChannelGroupContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage + +public inline fun + Message.ifConnectedFromChannelGroupContentMessage(block: (ConnectedFromChannelGroupContentMessage) -> T): + T? = connectedFromChannelGroupContentMessageOrNull() ?.let(block) + +public inline fun Message.unconnectedFromChannelGroupContentMessageOrNull(): + UnconnectedFromChannelGroupContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.UnconnectedFromChannelGroupContentMessage + +public inline fun Message.unconnectedFromChannelGroupContentMessageOrThrow(): + UnconnectedFromChannelGroupContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.UnconnectedFromChannelGroupContentMessage + +public inline fun + Message.ifUnconnectedFromChannelGroupContentMessage(block: (UnconnectedFromChannelGroupContentMessage) -> T): + T? = unconnectedFromChannelGroupContentMessageOrNull() ?.let(block) + +public inline fun Message.anonymousGroupContentMessageOrNull(): + AnonymousGroupContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage + +public inline fun Message.anonymousGroupContentMessageOrThrow(): + AnonymousGroupContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage + +public inline fun + Message.ifAnonymousGroupContentMessage(block: (AnonymousGroupContentMessage) -> T): + T? = anonymousGroupContentMessageOrNull() ?.let(block) + +public inline fun Message.commonGroupContentMessageOrNull(): + CommonGroupContentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage + +public inline fun Message.commonGroupContentMessageOrThrow(): + CommonGroupContentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage + +public inline fun + Message.ifCommonGroupContentMessage(block: (CommonGroupContentMessage) -> T): T? + = commonGroupContentMessageOrNull() ?.let(block) + +public inline fun Message.mediaGroupMessageOrNull(): MediaGroupMessage? = this + as? + dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage + +public inline fun Message.mediaGroupMessageOrThrow(): MediaGroupMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage + +public inline fun + Message.ifMediaGroupMessage(block: (MediaGroupMessage) -> T): T? = + mediaGroupMessageOrNull() ?.let(block) + +public inline fun Message.unknownMessageTypeOrNull(): UnknownMessageType? = this as? + dev.inmo.tgbotapi.types.message.abstracts.UnknownMessageType + +public inline fun Message.unknownMessageTypeOrThrow(): UnknownMessageType = this as + dev.inmo.tgbotapi.types.message.abstracts.UnknownMessageType + +public inline fun Message.ifUnknownMessageType(block: (UnknownMessageType) -> T): T? = + unknownMessageTypeOrNull() ?.let(block) + +public inline fun Message.possiblyEditedMessageOrNull(): PossiblyEditedMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.PossiblyEditedMessage + +public inline fun Message.possiblyEditedMessageOrThrow(): PossiblyEditedMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.PossiblyEditedMessage + +public inline fun Message.ifPossiblyEditedMessage(block: (PossiblyEditedMessage) -> T): T? = + possiblyEditedMessageOrNull() ?.let(block) + +public inline fun Message.possiblyForwardedMessageOrNull(): PossiblyForwardedMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage + +public inline fun Message.possiblyForwardedMessageOrThrow(): PossiblyForwardedMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage + +public inline fun Message.ifPossiblyForwardedMessage(block: (PossiblyForwardedMessage) -> T): T? + = possiblyForwardedMessageOrNull() ?.let(block) + +public inline fun Message.possiblyPaymentMessageOrNull(): PossiblyPaymentMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.PossiblyPaymentMessage + +public inline fun Message.possiblyPaymentMessageOrThrow(): PossiblyPaymentMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.PossiblyPaymentMessage + +public inline fun Message.ifPossiblyPaymentMessage(block: (PossiblyPaymentMessage) -> T): T? = + possiblyPaymentMessageOrNull() ?.let(block) + +public inline fun Message.possiblySentViaBotCommonMessageOrNull(): + PossiblySentViaBotCommonMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage + +public inline fun Message.possiblySentViaBotCommonMessageOrThrow(): + PossiblySentViaBotCommonMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage + +public inline fun + Message.ifPossiblySentViaBotCommonMessage(block: (PossiblySentViaBotCommonMessage) -> T): + T? = possiblySentViaBotCommonMessageOrNull() ?.let(block) + +public inline fun Message.privateContentMessageOrNull(): PrivateContentMessage? = + this as? + dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage + +public inline fun Message.privateContentMessageOrThrow(): PrivateContentMessage = + this as + dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage + +public inline fun + Message.ifPrivateContentMessage(block: (PrivateContentMessage) -> T): T? = + privateContentMessageOrNull() ?.let(block) + +public inline fun Message.publicContentMessageOrNull(): PublicContentMessage? = this + as? + dev.inmo.tgbotapi.types.message.abstracts.PublicContentMessage + +public inline fun Message.publicContentMessageOrThrow(): PublicContentMessage = this + as + dev.inmo.tgbotapi.types.message.abstracts.PublicContentMessage + +public inline fun + Message.ifPublicContentMessage(block: (PublicContentMessage) -> T): T? = + publicContentMessageOrNull() ?.let(block) + +public inline fun Message.signedMessageOrNull(): SignedMessage? = this as? + dev.inmo.tgbotapi.types.message.abstracts.SignedMessage + +public inline fun Message.signedMessageOrThrow(): SignedMessage = this as + dev.inmo.tgbotapi.types.message.abstracts.SignedMessage + +public inline fun Message.ifSignedMessage(block: (SignedMessage) -> T): T? = + signedMessageOrNull() ?.let(block) + +public inline fun Message.supergroupEventMessageOrNull(): SupergroupEventMessage? = + this as? + dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage + +public inline fun Message.supergroupEventMessageOrThrow(): SupergroupEventMessage = + this as + dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage + +public inline fun + Message.ifSupergroupEventMessage(block: (SupergroupEventMessage) -> T): T? = + supergroupEventMessageOrNull() ?.let(block) + +public inline fun ResendableContent.messageContentOrNull(): MessageContent? = this as? + dev.inmo.tgbotapi.types.message.content.MessageContent + +public inline fun ResendableContent.messageContentOrThrow(): MessageContent = this as + dev.inmo.tgbotapi.types.message.content.MessageContent + +public inline fun ResendableContent.ifMessageContent(block: (MessageContent) -> T): T? = + messageContentOrNull() ?.let(block) + +public inline fun ResendableContent.mediaCollectionContentOrNull(): + MediaCollectionContent? = this as? + dev.inmo.tgbotapi.types.message.content.MediaCollectionContent + +public inline fun ResendableContent.mediaCollectionContentOrThrow(): + MediaCollectionContent = this as + dev.inmo.tgbotapi.types.message.content.MediaCollectionContent + +public inline fun + ResendableContent.ifMediaCollectionContent(block: (MediaCollectionContent) -> T): + T? = mediaCollectionContentOrNull() ?.let(block) + +public inline fun ResendableContent.mediaContentOrNull(): MediaContent? = this as? + dev.inmo.tgbotapi.types.message.content.MediaContent + +public inline fun ResendableContent.mediaContentOrThrow(): MediaContent = this as + dev.inmo.tgbotapi.types.message.content.MediaContent + +public inline fun ResendableContent.ifMediaContent(block: (MediaContent) -> T): T? = + mediaContentOrNull() ?.let(block) + +public inline fun ResendableContent.audioMediaGroupContentOrNull(): AudioMediaGroupContent? = this + as? dev.inmo.tgbotapi.types.message.content.AudioMediaGroupContent + +public inline fun ResendableContent.audioMediaGroupContentOrThrow(): AudioMediaGroupContent = this + as dev.inmo.tgbotapi.types.message.content.AudioMediaGroupContent + +public inline fun + ResendableContent.ifAudioMediaGroupContent(block: (AudioMediaGroupContent) -> T): T? = + audioMediaGroupContentOrNull() ?.let(block) + +public inline fun ResendableContent.documentMediaGroupContentOrNull(): DocumentMediaGroupContent? = + this as? dev.inmo.tgbotapi.types.message.content.DocumentMediaGroupContent + +public inline fun ResendableContent.documentMediaGroupContentOrThrow(): DocumentMediaGroupContent = + this as dev.inmo.tgbotapi.types.message.content.DocumentMediaGroupContent + +public inline fun + ResendableContent.ifDocumentMediaGroupContent(block: (DocumentMediaGroupContent) -> T): T? = + documentMediaGroupContentOrNull() ?.let(block) + +public inline fun ResendableContent.mediaGroupContentOrNull(): MediaGroupContent? = this as? + dev.inmo.tgbotapi.types.message.content.MediaGroupContent + +public inline fun ResendableContent.mediaGroupContentOrThrow(): MediaGroupContent = this as + dev.inmo.tgbotapi.types.message.content.MediaGroupContent + +public inline fun ResendableContent.ifMediaGroupContent(block: (MediaGroupContent) -> T): T? = + mediaGroupContentOrNull() ?.let(block) + +public inline fun ResendableContent.textedMediaContentOrNull(): TextedMediaContent? = this as? + dev.inmo.tgbotapi.types.message.content.TextedMediaContent + +public inline fun ResendableContent.textedMediaContentOrThrow(): TextedMediaContent = this as + dev.inmo.tgbotapi.types.message.content.TextedMediaContent + +public inline fun ResendableContent.ifTextedMediaContent(block: (TextedMediaContent) -> T): T? = + textedMediaContentOrNull() ?.let(block) + +public inline fun ResendableContent.visualMediaGroupContentOrNull(): VisualMediaGroupContent? = this + as? dev.inmo.tgbotapi.types.message.content.VisualMediaGroupContent + +public inline fun ResendableContent.visualMediaGroupContentOrThrow(): VisualMediaGroupContent = this + as dev.inmo.tgbotapi.types.message.content.VisualMediaGroupContent + +public inline fun + ResendableContent.ifVisualMediaGroupContent(block: (VisualMediaGroupContent) -> T): T? = + visualMediaGroupContentOrNull() ?.let(block) + +public inline fun ResendableContent.animationContentOrNull(): AnimationContent? = this as? + dev.inmo.tgbotapi.types.message.content.AnimationContent + +public inline fun ResendableContent.animationContentOrThrow(): AnimationContent = this as + dev.inmo.tgbotapi.types.message.content.AnimationContent + +public inline fun ResendableContent.ifAnimationContent(block: (AnimationContent) -> T): T? = + animationContentOrNull() ?.let(block) + +public inline fun ResendableContent.audioContentOrNull(): AudioContent? = this as? + dev.inmo.tgbotapi.types.message.content.AudioContent + +public inline fun ResendableContent.audioContentOrThrow(): AudioContent = this as + dev.inmo.tgbotapi.types.message.content.AudioContent + +public inline fun ResendableContent.ifAudioContent(block: (AudioContent) -> T): T? = + audioContentOrNull() ?.let(block) + +public inline fun ResendableContent.contactContentOrNull(): ContactContent? = this as? + dev.inmo.tgbotapi.types.message.content.ContactContent + +public inline fun ResendableContent.contactContentOrThrow(): ContactContent = this as + dev.inmo.tgbotapi.types.message.content.ContactContent + +public inline fun ResendableContent.ifContactContent(block: (ContactContent) -> T): T? = + contactContentOrNull() ?.let(block) + +public inline fun ResendableContent.diceContentOrNull(): DiceContent? = this as? + dev.inmo.tgbotapi.types.message.content.DiceContent + +public inline fun ResendableContent.diceContentOrThrow(): DiceContent = this as + dev.inmo.tgbotapi.types.message.content.DiceContent + +public inline fun ResendableContent.ifDiceContent(block: (DiceContent) -> T): T? = + diceContentOrNull() ?.let(block) + +public inline fun ResendableContent.documentContentOrNull(): DocumentContent? = this as? + dev.inmo.tgbotapi.types.message.content.DocumentContent + +public inline fun ResendableContent.documentContentOrThrow(): DocumentContent = this as + dev.inmo.tgbotapi.types.message.content.DocumentContent + +public inline fun ResendableContent.ifDocumentContent(block: (DocumentContent) -> T): T? = + documentContentOrNull() ?.let(block) + +public inline fun ResendableContent.gameContentOrNull(): GameContent? = this as? + dev.inmo.tgbotapi.types.message.content.GameContent + +public inline fun ResendableContent.gameContentOrThrow(): GameContent = this as + dev.inmo.tgbotapi.types.message.content.GameContent + +public inline fun ResendableContent.ifGameContent(block: (GameContent) -> T): T? = + gameContentOrNull() ?.let(block) + +public inline fun ResendableContent.invoiceContentOrNull(): InvoiceContent? = this as? + dev.inmo.tgbotapi.types.message.content.InvoiceContent + +public inline fun ResendableContent.invoiceContentOrThrow(): InvoiceContent = this as + dev.inmo.tgbotapi.types.message.content.InvoiceContent + +public inline fun ResendableContent.ifInvoiceContent(block: (InvoiceContent) -> T): T? = + invoiceContentOrNull() ?.let(block) + +public inline fun ResendableContent.locationContentOrNull(): LocationContent? = this as? + dev.inmo.tgbotapi.types.message.content.LocationContent + +public inline fun ResendableContent.locationContentOrThrow(): LocationContent = this as + dev.inmo.tgbotapi.types.message.content.LocationContent + +public inline fun ResendableContent.ifLocationContent(block: (LocationContent) -> T): T? = + locationContentOrNull() ?.let(block) + +public inline fun ResendableContent.liveLocationContentOrNull(): LiveLocationContent? = this as? + dev.inmo.tgbotapi.types.message.content.LiveLocationContent + +public inline fun ResendableContent.liveLocationContentOrThrow(): LiveLocationContent = this as + dev.inmo.tgbotapi.types.message.content.LiveLocationContent + +public inline fun ResendableContent.ifLiveLocationContent(block: (LiveLocationContent) -> T): T? + = liveLocationContentOrNull() ?.let(block) + +public inline fun ResendableContent.staticLocationContentOrNull(): StaticLocationContent? = this as? + dev.inmo.tgbotapi.types.message.content.StaticLocationContent + +public inline fun ResendableContent.staticLocationContentOrThrow(): StaticLocationContent = this as + dev.inmo.tgbotapi.types.message.content.StaticLocationContent + +public inline fun + ResendableContent.ifStaticLocationContent(block: (StaticLocationContent) -> T): T? = + staticLocationContentOrNull() ?.let(block) + +public inline fun ResendableContent.photoContentOrNull(): PhotoContent? = this as? + dev.inmo.tgbotapi.types.message.content.PhotoContent + +public inline fun ResendableContent.photoContentOrThrow(): PhotoContent = this as + dev.inmo.tgbotapi.types.message.content.PhotoContent + +public inline fun ResendableContent.ifPhotoContent(block: (PhotoContent) -> T): T? = + photoContentOrNull() ?.let(block) + +public inline fun ResendableContent.pollContentOrNull(): PollContent? = this as? + dev.inmo.tgbotapi.types.message.content.PollContent + +public inline fun ResendableContent.pollContentOrThrow(): PollContent = this as + dev.inmo.tgbotapi.types.message.content.PollContent + +public inline fun ResendableContent.ifPollContent(block: (PollContent) -> T): T? = + pollContentOrNull() ?.let(block) + +public inline fun ResendableContent.stickerContentOrNull(): StickerContent? = this as? + dev.inmo.tgbotapi.types.message.content.StickerContent + +public inline fun ResendableContent.stickerContentOrThrow(): StickerContent = this as + dev.inmo.tgbotapi.types.message.content.StickerContent + +public inline fun ResendableContent.ifStickerContent(block: (StickerContent) -> T): T? = + stickerContentOrNull() ?.let(block) + +public inline fun ResendableContent.textContentOrNull(): TextContent? = this as? + dev.inmo.tgbotapi.types.message.content.TextContent + +public inline fun ResendableContent.textContentOrThrow(): TextContent = this as + dev.inmo.tgbotapi.types.message.content.TextContent + +public inline fun ResendableContent.ifTextContent(block: (TextContent) -> T): T? = + textContentOrNull() ?.let(block) + +public inline fun ResendableContent.venueContentOrNull(): VenueContent? = this as? + dev.inmo.tgbotapi.types.message.content.VenueContent + +public inline fun ResendableContent.venueContentOrThrow(): VenueContent = this as + dev.inmo.tgbotapi.types.message.content.VenueContent + +public inline fun ResendableContent.ifVenueContent(block: (VenueContent) -> T): T? = + venueContentOrNull() ?.let(block) + +public inline fun ResendableContent.videoContentOrNull(): VideoContent? = this as? + dev.inmo.tgbotapi.types.message.content.VideoContent + +public inline fun ResendableContent.videoContentOrThrow(): VideoContent = this as + dev.inmo.tgbotapi.types.message.content.VideoContent + +public inline fun ResendableContent.ifVideoContent(block: (VideoContent) -> T): T? = + videoContentOrNull() ?.let(block) + +public inline fun ResendableContent.videoNoteContentOrNull(): VideoNoteContent? = this as? + dev.inmo.tgbotapi.types.message.content.VideoNoteContent + +public inline fun ResendableContent.videoNoteContentOrThrow(): VideoNoteContent = this as + dev.inmo.tgbotapi.types.message.content.VideoNoteContent + +public inline fun ResendableContent.ifVideoNoteContent(block: (VideoNoteContent) -> T): T? = + videoNoteContentOrNull() ?.let(block) + +public inline fun ResendableContent.voiceContentOrNull(): VoiceContent? = this as? + dev.inmo.tgbotapi.types.message.content.VoiceContent + +public inline fun ResendableContent.voiceContentOrThrow(): VoiceContent = this as + dev.inmo.tgbotapi.types.message.content.VoiceContent + +public inline fun ResendableContent.ifVoiceContent(block: (VoiceContent) -> T): T? = + voiceContentOrNull() ?.let(block) + +public inline fun TextSource.boldTextSourceOrNull(): BoldTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.BoldTextSource + +public inline fun TextSource.boldTextSourceOrThrow(): BoldTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.BoldTextSource + +public inline fun TextSource.ifBoldTextSource(block: (BoldTextSource) -> T): T? = + boldTextSourceOrNull() ?.let(block) + +public inline fun TextSource.botCommandTextSourceOrNull(): BotCommandTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.BotCommandTextSource + +public inline fun TextSource.botCommandTextSourceOrThrow(): BotCommandTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.BotCommandTextSource + +public inline fun TextSource.ifBotCommandTextSource(block: (BotCommandTextSource) -> T): T? = + botCommandTextSourceOrNull() ?.let(block) + +public inline fun TextSource.cashTagTextSourceOrNull(): CashTagTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.CashTagTextSource + +public inline fun TextSource.cashTagTextSourceOrThrow(): CashTagTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.CashTagTextSource + +public inline fun TextSource.ifCashTagTextSource(block: (CashTagTextSource) -> T): T? = + cashTagTextSourceOrNull() ?.let(block) + +public inline fun TextSource.codeTextSourceOrNull(): CodeTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.CodeTextSource + +public inline fun TextSource.codeTextSourceOrThrow(): CodeTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.CodeTextSource + +public inline fun TextSource.ifCodeTextSource(block: (CodeTextSource) -> T): T? = + codeTextSourceOrNull() ?.let(block) + +public inline fun TextSource.eMailTextSourceOrNull(): EMailTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.EMailTextSource + +public inline fun TextSource.eMailTextSourceOrThrow(): EMailTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.EMailTextSource + +public inline fun TextSource.ifEMailTextSource(block: (EMailTextSource) -> T): T? = + eMailTextSourceOrNull() ?.let(block) + +public inline fun TextSource.hashTagTextSourceOrNull(): HashTagTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.HashTagTextSource + +public inline fun TextSource.hashTagTextSourceOrThrow(): HashTagTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.HashTagTextSource + +public inline fun TextSource.ifHashTagTextSource(block: (HashTagTextSource) -> T): T? = + hashTagTextSourceOrNull() ?.let(block) + +public inline fun TextSource.italicTextSourceOrNull(): ItalicTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.ItalicTextSource + +public inline fun TextSource.italicTextSourceOrThrow(): ItalicTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.ItalicTextSource + +public inline fun TextSource.ifItalicTextSource(block: (ItalicTextSource) -> T): T? = + italicTextSourceOrNull() ?.let(block) + +public inline fun TextSource.mentionTextSourceOrNull(): MentionTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.MentionTextSource + +public inline fun TextSource.mentionTextSourceOrThrow(): MentionTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.MentionTextSource + +public inline fun TextSource.ifMentionTextSource(block: (MentionTextSource) -> T): T? = + mentionTextSourceOrNull() ?.let(block) + +public inline fun TextSource.phoneNumberTextSourceOrNull(): PhoneNumberTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.PhoneNumberTextSource + +public inline fun TextSource.phoneNumberTextSourceOrThrow(): PhoneNumberTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.PhoneNumberTextSource + +public inline fun TextSource.ifPhoneNumberTextSource(block: (PhoneNumberTextSource) -> T): T? = + phoneNumberTextSourceOrNull() ?.let(block) + +public inline fun TextSource.preTextSourceOrNull(): PreTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.PreTextSource + +public inline fun TextSource.preTextSourceOrThrow(): PreTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.PreTextSource + +public inline fun TextSource.ifPreTextSource(block: (PreTextSource) -> T): T? = + preTextSourceOrNull() ?.let(block) + +public inline fun TextSource.regularTextSourceOrNull(): RegularTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.RegularTextSource + +public inline fun TextSource.regularTextSourceOrThrow(): RegularTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.RegularTextSource + +public inline fun TextSource.ifRegularTextSource(block: (RegularTextSource) -> T): T? = + regularTextSourceOrNull() ?.let(block) + +public inline fun TextSource.spoilerTextSourceOrNull(): SpoilerTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.SpoilerTextSource + +public inline fun TextSource.spoilerTextSourceOrThrow(): SpoilerTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.SpoilerTextSource + +public inline fun TextSource.ifSpoilerTextSource(block: (SpoilerTextSource) -> T): T? = + spoilerTextSourceOrNull() ?.let(block) + +public inline fun TextSource.strikethroughTextSourceOrNull(): StrikethroughTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.StrikethroughTextSource + +public inline fun TextSource.strikethroughTextSourceOrThrow(): StrikethroughTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.StrikethroughTextSource + +public inline fun TextSource.ifStrikethroughTextSource(block: (StrikethroughTextSource) -> T): + T? = strikethroughTextSourceOrNull() ?.let(block) + +public inline fun TextSource.textLinkTextSourceOrNull(): TextLinkTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.TextLinkTextSource + +public inline fun TextSource.textLinkTextSourceOrThrow(): TextLinkTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.TextLinkTextSource + +public inline fun TextSource.ifTextLinkTextSource(block: (TextLinkTextSource) -> T): T? = + textLinkTextSourceOrNull() ?.let(block) + +public inline fun TextSource.textMentionTextSourceOrNull(): TextMentionTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource + +public inline fun TextSource.textMentionTextSourceOrThrow(): TextMentionTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource + +public inline fun TextSource.ifTextMentionTextSource(block: (TextMentionTextSource) -> T): T? = + textMentionTextSourceOrNull() ?.let(block) + +public inline fun TextSource.multilevelTextSourceOrNull(): MultilevelTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.MultilevelTextSource + +public inline fun TextSource.multilevelTextSourceOrThrow(): MultilevelTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.MultilevelTextSource + +public inline fun TextSource.ifMultilevelTextSource(block: (MultilevelTextSource) -> T): T? = + multilevelTextSourceOrNull() ?.let(block) + +public inline fun TextSource.uRLTextSourceOrNull(): URLTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.URLTextSource + +public inline fun TextSource.uRLTextSourceOrThrow(): URLTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.URLTextSource + +public inline fun TextSource.ifURLTextSource(block: (URLTextSource) -> T): T? = + uRLTextSourceOrNull() ?.let(block) + +public inline fun TextSource.underlineTextSourceOrNull(): UnderlineTextSource? = this as? + dev.inmo.tgbotapi.types.message.textsources.UnderlineTextSource + +public inline fun TextSource.underlineTextSourceOrThrow(): UnderlineTextSource = this as + dev.inmo.tgbotapi.types.message.textsources.UnderlineTextSource + +public inline fun TextSource.ifUnderlineTextSource(block: (UnderlineTextSource) -> T): T? = + underlineTextSourceOrNull() ?.let(block) + +public inline fun PassportElementError.unknownPassportElementErrorOrNull(): + UnknownPassportElementError? = this as? + dev.inmo.tgbotapi.types.passport.UnknownPassportElementError + +public inline fun PassportElementError.unknownPassportElementErrorOrThrow(): + UnknownPassportElementError = this as + dev.inmo.tgbotapi.types.passport.UnknownPassportElementError + +public inline fun + PassportElementError.ifUnknownPassportElementError(block: (UnknownPassportElementError) -> T): + T? = unknownPassportElementErrorOrNull() ?.let(block) + +public inline fun PassportElementError.passportSingleElementErrorOrNull(): + PassportSingleElementError? = this as? + dev.inmo.tgbotapi.types.passport.PassportSingleElementError + +public inline fun PassportElementError.passportSingleElementErrorOrThrow(): + PassportSingleElementError = this as dev.inmo.tgbotapi.types.passport.PassportSingleElementError + +public inline fun + PassportElementError.ifPassportSingleElementError(block: (PassportSingleElementError) -> T): T? + = passportSingleElementErrorOrNull() ?.let(block) + +public inline fun PassportElementError.passportMultipleElementsErrorOrNull(): + PassportMultipleElementsError? = this as? + dev.inmo.tgbotapi.types.passport.PassportMultipleElementsError + +public inline fun PassportElementError.passportMultipleElementsErrorOrThrow(): + PassportMultipleElementsError = this as + dev.inmo.tgbotapi.types.passport.PassportMultipleElementsError + +public inline fun + PassportElementError.ifPassportMultipleElementsError(block: (PassportMultipleElementsError) -> T): + T? = passportMultipleElementsErrorOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementFileErrorOrNull(): PassportElementFileError? = + this as? dev.inmo.tgbotapi.types.passport.PassportElementFileError + +public inline fun PassportElementError.passportElementFileErrorOrThrow(): PassportElementFileError = + this as dev.inmo.tgbotapi.types.passport.PassportElementFileError + +public inline fun + PassportElementError.ifPassportElementFileError(block: (PassportElementFileError) -> T): T? = + passportElementFileErrorOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementFilesErrorOrNull(): PassportElementFilesError? + = this as? dev.inmo.tgbotapi.types.passport.PassportElementFilesError + +public inline fun PassportElementError.passportElementFilesErrorOrThrow(): PassportElementFilesError + = this as dev.inmo.tgbotapi.types.passport.PassportElementFilesError + +public inline fun + PassportElementError.ifPassportElementFilesError(block: (PassportElementFilesError) -> T): T? = + passportElementFilesErrorOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorDataFieldOrNull(): + PassportElementErrorDataField? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorDataField + +public inline fun PassportElementError.passportElementErrorDataFieldOrThrow(): + PassportElementErrorDataField = this as + dev.inmo.tgbotapi.types.passport.PassportElementErrorDataField + +public inline fun + PassportElementError.ifPassportElementErrorDataField(block: (PassportElementErrorDataField) -> T): + T? = passportElementErrorDataFieldOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorFrontSideOrNull(): + PassportElementErrorFrontSide? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorFrontSide + +public inline fun PassportElementError.passportElementErrorFrontSideOrThrow(): + PassportElementErrorFrontSide = this as + dev.inmo.tgbotapi.types.passport.PassportElementErrorFrontSide + +public inline fun + PassportElementError.ifPassportElementErrorFrontSide(block: (PassportElementErrorFrontSide) -> T): + T? = passportElementErrorFrontSideOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorReverseSideOrNull(): + PassportElementErrorReverseSide? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorReverseSide + +public inline fun PassportElementError.passportElementErrorReverseSideOrThrow(): + PassportElementErrorReverseSide = this as + dev.inmo.tgbotapi.types.passport.PassportElementErrorReverseSide + +public inline fun + PassportElementError.ifPassportElementErrorReverseSide(block: (PassportElementErrorReverseSide) -> T): + T? = passportElementErrorReverseSideOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorSelfieOrNull(): + PassportElementErrorSelfie? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorSelfie + +public inline fun PassportElementError.passportElementErrorSelfieOrThrow(): + PassportElementErrorSelfie = this as dev.inmo.tgbotapi.types.passport.PassportElementErrorSelfie + +public inline fun + PassportElementError.ifPassportElementErrorSelfie(block: (PassportElementErrorSelfie) -> T): T? + = passportElementErrorSelfieOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorFileOrNull(): PassportElementErrorFile? = + this as? dev.inmo.tgbotapi.types.passport.PassportElementErrorFile + +public inline fun PassportElementError.passportElementErrorFileOrThrow(): PassportElementErrorFile = + this as dev.inmo.tgbotapi.types.passport.PassportElementErrorFile + +public inline fun + PassportElementError.ifPassportElementErrorFile(block: (PassportElementErrorFile) -> T): T? = + passportElementErrorFileOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorFilesOrNull(): PassportElementErrorFiles? + = this as? dev.inmo.tgbotapi.types.passport.PassportElementErrorFiles + +public inline fun PassportElementError.passportElementErrorFilesOrThrow(): PassportElementErrorFiles + = this as dev.inmo.tgbotapi.types.passport.PassportElementErrorFiles + +public inline fun + PassportElementError.ifPassportElementErrorFiles(block: (PassportElementErrorFiles) -> T): T? = + passportElementErrorFilesOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorTranslationFileOrNull(): + PassportElementErrorTranslationFile? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorTranslationFile + +public inline fun PassportElementError.passportElementErrorTranslationFileOrThrow(): + PassportElementErrorTranslationFile = this as + dev.inmo.tgbotapi.types.passport.PassportElementErrorTranslationFile + +public inline fun + PassportElementError.ifPassportElementErrorTranslationFile(block: (PassportElementErrorTranslationFile) -> T): + T? = passportElementErrorTranslationFileOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorTranslationFilesOrNull(): + PassportElementErrorTranslationFiles? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorTranslationFiles + +public inline fun PassportElementError.passportElementErrorTranslationFilesOrThrow(): + PassportElementErrorTranslationFiles = this as + dev.inmo.tgbotapi.types.passport.PassportElementErrorTranslationFiles + +public inline fun + PassportElementError.ifPassportElementErrorTranslationFiles(block: (PassportElementErrorTranslationFiles) -> T): + T? = passportElementErrorTranslationFilesOrNull() ?.let(block) + +public inline fun PassportElementError.passportElementErrorUnspecifiedOrNull(): + PassportElementErrorUnspecified? = this as? + dev.inmo.tgbotapi.types.passport.PassportElementErrorUnspecified + +public inline fun PassportElementError.passportElementErrorUnspecifiedOrThrow(): + PassportElementErrorUnspecified = this as + dev.inmo.tgbotapi.types.passport.PassportElementErrorUnspecified + +public inline fun + PassportElementError.ifPassportElementErrorUnspecified(block: (PassportElementErrorUnspecified) -> T): + T? = passportElementErrorUnspecifiedOrNull() ?.let(block) + +public inline fun SecureValue.addressSecureValueOrNull(): AddressSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.AddressSecureValue + +public inline fun SecureValue.addressSecureValueOrThrow(): AddressSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.AddressSecureValue + +public inline fun SecureValue.ifAddressSecureValue(block: (AddressSecureValue) -> T): T? = + addressSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.identityWithReverseSideSecureValueOrNull(): + IdentityWithReverseSideSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.IdentityWithReverseSideSecureValue + +public inline fun SecureValue.identityWithReverseSideSecureValueOrThrow(): + IdentityWithReverseSideSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.IdentityWithReverseSideSecureValue + +public inline fun + SecureValue.ifIdentityWithReverseSideSecureValue(block: (IdentityWithReverseSideSecureValue) -> T): + T? = identityWithReverseSideSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.driverLicenseSecureValueOrNull(): DriverLicenseSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.DriverLicenseSecureValue + +public inline fun SecureValue.driverLicenseSecureValueOrThrow(): DriverLicenseSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.DriverLicenseSecureValue + +public inline fun + SecureValue.ifDriverLicenseSecureValue(block: (DriverLicenseSecureValue) -> T): T? = + driverLicenseSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.identityCardSecureValueOrNull(): IdentityCardSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.IdentityCardSecureValue + +public inline fun SecureValue.identityCardSecureValueOrThrow(): IdentityCardSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.IdentityCardSecureValue + +public inline fun SecureValue.ifIdentityCardSecureValue(block: (IdentityCardSecureValue) -> T): + T? = identityCardSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.otherDocumentsSecureValueOrNull(): OtherDocumentsSecureValue? = this + as? dev.inmo.tgbotapi.types.passport.decrypted.OtherDocumentsSecureValue + +public inline fun SecureValue.otherDocumentsSecureValueOrThrow(): OtherDocumentsSecureValue = this + as dev.inmo.tgbotapi.types.passport.decrypted.OtherDocumentsSecureValue + +public inline fun + SecureValue.ifOtherDocumentsSecureValue(block: (OtherDocumentsSecureValue) -> T): T? = + otherDocumentsSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.utilityBillSecureValueOrNull(): UtilityBillSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.UtilityBillSecureValue + +public inline fun SecureValue.utilityBillSecureValueOrThrow(): UtilityBillSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.UtilityBillSecureValue + +public inline fun SecureValue.ifUtilityBillSecureValue(block: (UtilityBillSecureValue) -> T): T? + = utilityBillSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.bankStatementSecureValueOrNull(): BankStatementSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.BankStatementSecureValue + +public inline fun SecureValue.bankStatementSecureValueOrThrow(): BankStatementSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.BankStatementSecureValue + +public inline fun + SecureValue.ifBankStatementSecureValue(block: (BankStatementSecureValue) -> T): T? = + bankStatementSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.rentalAgreementSecureValueOrNull(): RentalAgreementSecureValue? = this + as? dev.inmo.tgbotapi.types.passport.decrypted.RentalAgreementSecureValue + +public inline fun SecureValue.rentalAgreementSecureValueOrThrow(): RentalAgreementSecureValue = this + as dev.inmo.tgbotapi.types.passport.decrypted.RentalAgreementSecureValue + +public inline fun + SecureValue.ifRentalAgreementSecureValue(block: (RentalAgreementSecureValue) -> T): T? = + rentalAgreementSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.passportRegistrationSecureValueOrNull(): + PassportRegistrationSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.PassportRegistrationSecureValue + +public inline fun SecureValue.passportRegistrationSecureValueOrThrow(): + PassportRegistrationSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.PassportRegistrationSecureValue + +public inline fun + SecureValue.ifPassportRegistrationSecureValue(block: (PassportRegistrationSecureValue) -> T): T? + = passportRegistrationSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.temporalRegistrationSecureValueOrNull(): + TemporalRegistrationSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.TemporalRegistrationSecureValue + +public inline fun SecureValue.temporalRegistrationSecureValueOrThrow(): + TemporalRegistrationSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.TemporalRegistrationSecureValue + +public inline fun + SecureValue.ifTemporalRegistrationSecureValue(block: (TemporalRegistrationSecureValue) -> T): T? + = temporalRegistrationSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.passportSecureValueOrNull(): PassportSecureValue? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.PassportSecureValue + +public inline fun SecureValue.passportSecureValueOrThrow(): PassportSecureValue = this as + dev.inmo.tgbotapi.types.passport.decrypted.PassportSecureValue + +public inline fun SecureValue.ifPassportSecureValue(block: (PassportSecureValue) -> T): T? = + passportSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.commonPassportSecureValueOrNull(): CommonPassportSecureValue? = this + as? dev.inmo.tgbotapi.types.passport.decrypted.CommonPassportSecureValue + +public inline fun SecureValue.commonPassportSecureValueOrThrow(): CommonPassportSecureValue = this + as dev.inmo.tgbotapi.types.passport.decrypted.CommonPassportSecureValue + +public inline fun + SecureValue.ifCommonPassportSecureValue(block: (CommonPassportSecureValue) -> T): T? = + commonPassportSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.internalPassportSecureValueOrNull(): InternalPassportSecureValue? = + this as? dev.inmo.tgbotapi.types.passport.decrypted.InternalPassportSecureValue + +public inline fun SecureValue.internalPassportSecureValueOrThrow(): InternalPassportSecureValue = + this as dev.inmo.tgbotapi.types.passport.decrypted.InternalPassportSecureValue + +public inline fun + SecureValue.ifInternalPassportSecureValue(block: (InternalPassportSecureValue) -> T): T? = + internalPassportSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.personalDetailsSecureValueOrNull(): PersonalDetailsSecureValue? = this + as? dev.inmo.tgbotapi.types.passport.decrypted.PersonalDetailsSecureValue + +public inline fun SecureValue.personalDetailsSecureValueOrThrow(): PersonalDetailsSecureValue = this + as dev.inmo.tgbotapi.types.passport.decrypted.PersonalDetailsSecureValue + +public inline fun + SecureValue.ifPersonalDetailsSecureValue(block: (PersonalDetailsSecureValue) -> T): T? = + personalDetailsSecureValueOrNull() ?.let(block) + +public inline fun SecureValue.secureValueIdentityOrNull(): SecureValueIdentity? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueIdentity + +public inline fun SecureValue.secureValueIdentityOrThrow(): SecureValueIdentity = this as + dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueIdentity + +public inline fun SecureValue.ifSecureValueIdentity(block: (SecureValueIdentity) -> T): T? = + secureValueIdentityOrNull() ?.let(block) + +public inline fun SecureValue.secureValueWithDataOrNull(): SecureValueWithData? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithData + +public inline fun SecureValue.secureValueWithDataOrThrow(): SecureValueWithData = this as + dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithData + +public inline fun SecureValue.ifSecureValueWithData(block: (SecureValueWithData) -> T): T? = + secureValueWithDataOrNull() ?.let(block) + +public inline fun SecureValue.secureValueWithFilesOrNull(): SecureValueWithFiles? = this as? + dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithFiles + +public inline fun SecureValue.secureValueWithFilesOrThrow(): SecureValueWithFiles = this as + dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithFiles + +public inline fun SecureValue.ifSecureValueWithFiles(block: (SecureValueWithFiles) -> T): T? = + secureValueWithFilesOrNull() ?.let(block) + +public inline fun SecureValue.secureValueWithReverseSideOrNull(): SecureValueWithReverseSide? = this + as? dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithReverseSide + +public inline fun SecureValue.secureValueWithReverseSideOrThrow(): SecureValueWithReverseSide = this + as dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithReverseSide + +public inline fun + SecureValue.ifSecureValueWithReverseSide(block: (SecureValueWithReverseSide) -> T): T? = + secureValueWithReverseSideOrNull() ?.let(block) + +public inline fun SecureValue.secureValueWithTranslationsOrNull(): SecureValueWithTranslations? = + this as? dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithTranslations + +public inline fun SecureValue.secureValueWithTranslationsOrThrow(): SecureValueWithTranslations = + this as dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithTranslations + +public inline fun + SecureValue.ifSecureValueWithTranslations(block: (SecureValueWithTranslations) -> T): T? = + secureValueWithTranslationsOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.emailOrNull(): Email? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.Email + +public inline fun EncryptedPassportElement.emailOrThrow(): Email = this as + dev.inmo.tgbotapi.types.passport.encrypted.Email + +public inline fun EncryptedPassportElement.ifEmail(block: (Email) -> T): T? = emailOrNull() + ?.let(block) + +public inline fun EncryptedPassportElement.encryptedAddressOrNull(): EncryptedAddress? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedAddress + +public inline fun EncryptedPassportElement.encryptedAddressOrThrow(): EncryptedAddress = this as + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedAddress + +public inline fun EncryptedPassportElement.ifEncryptedAddress(block: (EncryptedAddress) -> T): + T? = encryptedAddressOrNull() ?.let(block) + +public inline + fun EncryptedPassportElement.encryptedPassportElementWithTranslatableFilesCollectionOrNull(): + EncryptedPassportElementWithTranslatableFilesCollection? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPassportElementWithTranslatableFilesCollection + +public inline + fun EncryptedPassportElement.encryptedPassportElementWithTranslatableFilesCollectionOrThrow(): + EncryptedPassportElementWithTranslatableFilesCollection = this as + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPassportElementWithTranslatableFilesCollection + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithTranslatableFilesCollection(block: (EncryptedPassportElementWithTranslatableFilesCollection) -> T): + T? = encryptedPassportElementWithTranslatableFilesCollectionOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.utilityBillOrNull(): UtilityBill? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.UtilityBill + +public inline fun EncryptedPassportElement.utilityBillOrThrow(): UtilityBill = this as + dev.inmo.tgbotapi.types.passport.encrypted.UtilityBill + +public inline fun EncryptedPassportElement.ifUtilityBill(block: (UtilityBill) -> T): T? = + utilityBillOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.bankStatementOrNull(): BankStatement? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.BankStatement + +public inline fun EncryptedPassportElement.bankStatementOrThrow(): BankStatement = this as + dev.inmo.tgbotapi.types.passport.encrypted.BankStatement + +public inline fun EncryptedPassportElement.ifBankStatement(block: (BankStatement) -> T): T? = + bankStatementOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.rentalAgreementOrNull(): RentalAgreement? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.RentalAgreement + +public inline fun EncryptedPassportElement.rentalAgreementOrThrow(): RentalAgreement = this as + dev.inmo.tgbotapi.types.passport.encrypted.RentalAgreement + +public inline fun EncryptedPassportElement.ifRentalAgreement(block: (RentalAgreement) -> T): T? + = rentalAgreementOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.passportRegistrationOrNull(): PassportRegistration? = + this as? dev.inmo.tgbotapi.types.passport.encrypted.PassportRegistration + +public inline fun EncryptedPassportElement.passportRegistrationOrThrow(): PassportRegistration = + this as dev.inmo.tgbotapi.types.passport.encrypted.PassportRegistration + +public inline fun + EncryptedPassportElement.ifPassportRegistration(block: (PassportRegistration) -> T): T? = + passportRegistrationOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.temporaryRegistrationOrNull(): TemporaryRegistration? = + this as? dev.inmo.tgbotapi.types.passport.encrypted.TemporaryRegistration + +public inline fun EncryptedPassportElement.temporaryRegistrationOrThrow(): TemporaryRegistration = + this as dev.inmo.tgbotapi.types.passport.encrypted.TemporaryRegistration + +public inline fun + EncryptedPassportElement.ifTemporaryRegistration(block: (TemporaryRegistration) -> T): T? = + temporaryRegistrationOrNull() ?.let(block) + +public inline + fun EncryptedPassportElement.encryptedPassportElementWithTranslatableIDDocumentOrNull(): + EncryptedPassportElementWithTranslatableIDDocument? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPassportElementWithTranslatableIDDocument + +public inline + fun EncryptedPassportElement.encryptedPassportElementWithTranslatableIDDocumentOrThrow(): + EncryptedPassportElementWithTranslatableIDDocument = this as + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPassportElementWithTranslatableIDDocument + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithTranslatableIDDocument(block: (EncryptedPassportElementWithTranslatableIDDocument) -> T): + T? = encryptedPassportElementWithTranslatableIDDocumentOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.driverLicenseOrNull(): DriverLicense? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.DriverLicense + +public inline fun EncryptedPassportElement.driverLicenseOrThrow(): DriverLicense = this as + dev.inmo.tgbotapi.types.passport.encrypted.DriverLicense + +public inline fun EncryptedPassportElement.ifDriverLicense(block: (DriverLicense) -> T): T? = + driverLicenseOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.identityCardOrNull(): IdentityCard? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.IdentityCard + +public inline fun EncryptedPassportElement.identityCardOrThrow(): IdentityCard = this as + dev.inmo.tgbotapi.types.passport.encrypted.IdentityCard + +public inline fun EncryptedPassportElement.ifIdentityCard(block: (IdentityCard) -> T): T? = + identityCardOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPersonalDetailsOrNull(): + EncryptedPersonalDetails? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPersonalDetails + +public inline fun EncryptedPassportElement.encryptedPersonalDetailsOrThrow(): + EncryptedPersonalDetails = this as + dev.inmo.tgbotapi.types.passport.encrypted.EncryptedPersonalDetails + +public inline fun + EncryptedPassportElement.ifEncryptedPersonalDetails(block: (EncryptedPersonalDetails) -> T): T? + = encryptedPersonalDetailsOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.passportOrNull(): Passport? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.Passport + +public inline fun EncryptedPassportElement.passportOrThrow(): Passport = this as + dev.inmo.tgbotapi.types.passport.encrypted.Passport + +public inline fun EncryptedPassportElement.ifPassport(block: (Passport) -> T): T? = + passportOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.commonPassportOrNull(): CommonPassport? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.CommonPassport + +public inline fun EncryptedPassportElement.commonPassportOrThrow(): CommonPassport = this as + dev.inmo.tgbotapi.types.passport.encrypted.CommonPassport + +public inline fun EncryptedPassportElement.ifCommonPassport(block: (CommonPassport) -> T): T? = + commonPassportOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.internalPassportOrNull(): InternalPassport? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.InternalPassport + +public inline fun EncryptedPassportElement.internalPassportOrThrow(): InternalPassport = this as + dev.inmo.tgbotapi.types.passport.encrypted.InternalPassport + +public inline fun EncryptedPassportElement.ifInternalPassport(block: (InternalPassport) -> T): + T? = internalPassportOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.phoneNumberOrNull(): PhoneNumber? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.PhoneNumber + +public inline fun EncryptedPassportElement.phoneNumberOrThrow(): PhoneNumber = this as + dev.inmo.tgbotapi.types.passport.encrypted.PhoneNumber + +public inline fun EncryptedPassportElement.ifPhoneNumber(block: (PhoneNumber) -> T): T? = + phoneNumberOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.unknownEncryptedPassportElementOrNull(): + UnknownEncryptedPassportElement? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.UnknownEncryptedPassportElement + +public inline fun EncryptedPassportElement.unknownEncryptedPassportElementOrThrow(): + UnknownEncryptedPassportElement = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.UnknownEncryptedPassportElement + +public inline fun + EncryptedPassportElement.ifUnknownEncryptedPassportElement(block: (UnknownEncryptedPassportElement) -> T): + T? = unknownEncryptedPassportElementOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementTranslatableOrNull(): + EncryptedPassportElementTranslatable? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementTranslatable + +public inline fun EncryptedPassportElement.encryptedPassportElementTranslatableOrThrow(): + EncryptedPassportElementTranslatable = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementTranslatable + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementTranslatable(block: (EncryptedPassportElementTranslatable) -> T): + T? = encryptedPassportElementTranslatableOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithDataOrNull(): + EncryptedPassportElementWithData? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithData + +public inline fun EncryptedPassportElement.encryptedPassportElementWithDataOrThrow(): + EncryptedPassportElementWithData = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithData + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithData(block: (EncryptedPassportElementWithData) -> T): + T? = encryptedPassportElementWithDataOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithEmailOrNull(): + EncryptedPassportElementWithEmail? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithEmail + +public inline fun EncryptedPassportElement.encryptedPassportElementWithEmailOrThrow(): + EncryptedPassportElementWithEmail = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithEmail + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithEmail(block: (EncryptedPassportElementWithEmail) -> T): + T? = encryptedPassportElementWithEmailOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithFilesCollectionOrNull(): + EncryptedPassportElementWithFilesCollection? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithFilesCollection + +public inline fun EncryptedPassportElement.encryptedPassportElementWithFilesCollectionOrThrow(): + EncryptedPassportElementWithFilesCollection = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithFilesCollection + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithFilesCollection(block: (EncryptedPassportElementWithFilesCollection) -> T): + T? = encryptedPassportElementWithFilesCollectionOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithFrontSideOrNull(): + EncryptedPassportElementWithFrontSide? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithFrontSide + +public inline fun EncryptedPassportElement.encryptedPassportElementWithFrontSideOrThrow(): + EncryptedPassportElementWithFrontSide = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithFrontSide + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithFrontSide(block: (EncryptedPassportElementWithFrontSide) -> T): + T? = encryptedPassportElementWithFrontSideOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithPhoneNumberOrNull(): + EncryptedPassportElementWithPhoneNumber? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithPhoneNumber + +public inline fun EncryptedPassportElement.encryptedPassportElementWithPhoneNumberOrThrow(): + EncryptedPassportElementWithPhoneNumber = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithPhoneNumber + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithPhoneNumber(block: (EncryptedPassportElementWithPhoneNumber) -> T): + T? = encryptedPassportElementWithPhoneNumberOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithReverseSideOrNull(): + EncryptedPassportElementWithReverseSide? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithReverseSide + +public inline fun EncryptedPassportElement.encryptedPassportElementWithReverseSideOrThrow(): + EncryptedPassportElementWithReverseSide = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithReverseSide + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithReverseSide(block: (EncryptedPassportElementWithReverseSide) -> T): + T? = encryptedPassportElementWithReverseSideOrNull() ?.let(block) + +public inline fun EncryptedPassportElement.encryptedPassportElementWithSelfieOrNull(): + EncryptedPassportElementWithSelfie? = this as? + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithSelfie + +public inline fun EncryptedPassportElement.encryptedPassportElementWithSelfieOrThrow(): + EncryptedPassportElementWithSelfie = this as + dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElementWithSelfie + +public inline fun + EncryptedPassportElement.ifEncryptedPassportElementWithSelfie(block: (EncryptedPassportElementWithSelfie) -> T): + T? = encryptedPassportElementWithSelfieOrNull() ?.let(block) + +public inline fun ScheduledCloseInfo.exactScheduledCloseInfoOrNull(): ExactScheduledCloseInfo? = + this as? dev.inmo.tgbotapi.types.polls.ExactScheduledCloseInfo + +public inline fun ScheduledCloseInfo.exactScheduledCloseInfoOrThrow(): ExactScheduledCloseInfo = + this as dev.inmo.tgbotapi.types.polls.ExactScheduledCloseInfo + +public inline fun + ScheduledCloseInfo.ifExactScheduledCloseInfo(block: (ExactScheduledCloseInfo) -> T): T? = + exactScheduledCloseInfoOrNull() ?.let(block) + +public inline fun ScheduledCloseInfo.approximateScheduledCloseInfoOrNull(): + ApproximateScheduledCloseInfo? = this as? + dev.inmo.tgbotapi.types.polls.ApproximateScheduledCloseInfo + +public inline fun ScheduledCloseInfo.approximateScheduledCloseInfoOrThrow(): + ApproximateScheduledCloseInfo = this as + dev.inmo.tgbotapi.types.polls.ApproximateScheduledCloseInfo + +public inline fun + ScheduledCloseInfo.ifApproximateScheduledCloseInfo(block: (ApproximateScheduledCloseInfo) -> T): + T? = approximateScheduledCloseInfoOrNull() ?.let(block) + +public inline fun Poll.multipleAnswersPollOrNull(): MultipleAnswersPoll? = this as? + dev.inmo.tgbotapi.types.polls.MultipleAnswersPoll + +public inline fun Poll.multipleAnswersPollOrThrow(): MultipleAnswersPoll = this as + dev.inmo.tgbotapi.types.polls.MultipleAnswersPoll + +public inline fun Poll.ifMultipleAnswersPoll(block: (MultipleAnswersPoll) -> T): T? = + multipleAnswersPollOrNull() ?.let(block) + +public inline fun Poll.unknownPollTypeOrNull(): UnknownPollType? = this as? + dev.inmo.tgbotapi.types.polls.UnknownPollType + +public inline fun Poll.unknownPollTypeOrThrow(): UnknownPollType = this as + dev.inmo.tgbotapi.types.polls.UnknownPollType + +public inline fun Poll.ifUnknownPollType(block: (UnknownPollType) -> T): T? = + unknownPollTypeOrNull() ?.let(block) + +public inline fun Poll.regularPollOrNull(): RegularPoll? = this as? + dev.inmo.tgbotapi.types.polls.RegularPoll + +public inline fun Poll.regularPollOrThrow(): RegularPoll = this as + dev.inmo.tgbotapi.types.polls.RegularPoll + +public inline fun Poll.ifRegularPoll(block: (RegularPoll) -> T): T? = regularPollOrNull() + ?.let(block) + +public inline fun Poll.quizPollOrNull(): QuizPoll? = this as? dev.inmo.tgbotapi.types.polls.QuizPoll + +public inline fun Poll.quizPollOrThrow(): QuizPoll = this as dev.inmo.tgbotapi.types.polls.QuizPoll + +public inline fun Poll.ifQuizPoll(block: (QuizPoll) -> T): T? = quizPollOrNull() ?.let(block) + +public inline fun Update.callbackQueryUpdateOrNull(): CallbackQueryUpdate? = this as? + dev.inmo.tgbotapi.types.update.CallbackQueryUpdate + +public inline fun Update.callbackQueryUpdateOrThrow(): CallbackQueryUpdate = this as + dev.inmo.tgbotapi.types.update.CallbackQueryUpdate + +public inline fun Update.ifCallbackQueryUpdate(block: (CallbackQueryUpdate) -> T): T? = + callbackQueryUpdateOrNull() ?.let(block) + +public inline fun Update.channelPostUpdateOrNull(): ChannelPostUpdate? = this as? + dev.inmo.tgbotapi.types.update.ChannelPostUpdate + +public inline fun Update.channelPostUpdateOrThrow(): ChannelPostUpdate = this as + dev.inmo.tgbotapi.types.update.ChannelPostUpdate + +public inline fun Update.ifChannelPostUpdate(block: (ChannelPostUpdate) -> T): T? = + channelPostUpdateOrNull() ?.let(block) + +public inline fun Update.chatJoinRequestUpdateOrNull(): ChatJoinRequestUpdate? = this as? + dev.inmo.tgbotapi.types.update.ChatJoinRequestUpdate + +public inline fun Update.chatJoinRequestUpdateOrThrow(): ChatJoinRequestUpdate = this as + dev.inmo.tgbotapi.types.update.ChatJoinRequestUpdate + +public inline fun Update.ifChatJoinRequestUpdate(block: (ChatJoinRequestUpdate) -> T): T? = + chatJoinRequestUpdateOrNull() ?.let(block) + +public inline fun Update.chosenInlineResultUpdateOrNull(): ChosenInlineResultUpdate? = this as? + dev.inmo.tgbotapi.types.update.ChosenInlineResultUpdate + +public inline fun Update.chosenInlineResultUpdateOrThrow(): ChosenInlineResultUpdate = this as + dev.inmo.tgbotapi.types.update.ChosenInlineResultUpdate + +public inline fun Update.ifChosenInlineResultUpdate(block: (ChosenInlineResultUpdate) -> T): T? + = chosenInlineResultUpdateOrNull() ?.let(block) + +public inline fun Update.commonChatMemberUpdatedUpdateOrNull(): CommonChatMemberUpdatedUpdate? = + this as? dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate + +public inline fun Update.commonChatMemberUpdatedUpdateOrThrow(): CommonChatMemberUpdatedUpdate = + this as dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate + +public inline fun + Update.ifCommonChatMemberUpdatedUpdate(block: (CommonChatMemberUpdatedUpdate) -> T): T? = + commonChatMemberUpdatedUpdateOrNull() ?.let(block) + +public inline fun Update.editChannelPostUpdateOrNull(): EditChannelPostUpdate? = this as? + dev.inmo.tgbotapi.types.update.EditChannelPostUpdate + +public inline fun Update.editChannelPostUpdateOrThrow(): EditChannelPostUpdate = this as + dev.inmo.tgbotapi.types.update.EditChannelPostUpdate + +public inline fun Update.ifEditChannelPostUpdate(block: (EditChannelPostUpdate) -> T): T? = + editChannelPostUpdateOrNull() ?.let(block) + +public inline fun Update.editMessageUpdateOrNull(): EditMessageUpdate? = this as? + dev.inmo.tgbotapi.types.update.EditMessageUpdate + +public inline fun Update.editMessageUpdateOrThrow(): EditMessageUpdate = this as + dev.inmo.tgbotapi.types.update.EditMessageUpdate + +public inline fun Update.ifEditMessageUpdate(block: (EditMessageUpdate) -> T): T? = + editMessageUpdateOrNull() ?.let(block) + +public inline fun Update.inlineQueryUpdateOrNull(): InlineQueryUpdate? = this as? + dev.inmo.tgbotapi.types.update.InlineQueryUpdate + +public inline fun Update.inlineQueryUpdateOrThrow(): InlineQueryUpdate = this as + dev.inmo.tgbotapi.types.update.InlineQueryUpdate + +public inline fun Update.ifInlineQueryUpdate(block: (InlineQueryUpdate) -> T): T? = + inlineQueryUpdateOrNull() ?.let(block) + +public inline fun Update.messageUpdateOrNull(): MessageUpdate? = this as? + dev.inmo.tgbotapi.types.update.MessageUpdate + +public inline fun Update.messageUpdateOrThrow(): MessageUpdate = this as + dev.inmo.tgbotapi.types.update.MessageUpdate + +public inline fun Update.ifMessageUpdate(block: (MessageUpdate) -> T): T? = + messageUpdateOrNull() ?.let(block) + +public inline fun Update.myChatMemberUpdatedUpdateOrNull(): MyChatMemberUpdatedUpdate? = this as? + dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate + +public inline fun Update.myChatMemberUpdatedUpdateOrThrow(): MyChatMemberUpdatedUpdate = this as + dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate + +public inline fun Update.ifMyChatMemberUpdatedUpdate(block: (MyChatMemberUpdatedUpdate) -> T): + T? = myChatMemberUpdatedUpdateOrNull() ?.let(block) + +public inline fun Update.pollAnswerUpdateOrNull(): PollAnswerUpdate? = this as? + dev.inmo.tgbotapi.types.update.PollAnswerUpdate + +public inline fun Update.pollAnswerUpdateOrThrow(): PollAnswerUpdate = this as + dev.inmo.tgbotapi.types.update.PollAnswerUpdate + +public inline fun Update.ifPollAnswerUpdate(block: (PollAnswerUpdate) -> T): T? = + pollAnswerUpdateOrNull() ?.let(block) + +public inline fun Update.pollUpdateOrNull(): PollUpdate? = this as? + dev.inmo.tgbotapi.types.update.PollUpdate + +public inline fun Update.pollUpdateOrThrow(): PollUpdate = this as + dev.inmo.tgbotapi.types.update.PollUpdate + +public inline fun Update.ifPollUpdate(block: (PollUpdate) -> T): T? = pollUpdateOrNull() + ?.let(block) + +public inline fun Update.preCheckoutQueryUpdateOrNull(): PreCheckoutQueryUpdate? = this as? + dev.inmo.tgbotapi.types.update.PreCheckoutQueryUpdate + +public inline fun Update.preCheckoutQueryUpdateOrThrow(): PreCheckoutQueryUpdate = this as + dev.inmo.tgbotapi.types.update.PreCheckoutQueryUpdate + +public inline fun Update.ifPreCheckoutQueryUpdate(block: (PreCheckoutQueryUpdate) -> T): T? = + preCheckoutQueryUpdateOrNull() ?.let(block) + +public inline fun Update.shippingQueryUpdateOrNull(): ShippingQueryUpdate? = this as? + dev.inmo.tgbotapi.types.update.ShippingQueryUpdate + +public inline fun Update.shippingQueryUpdateOrThrow(): ShippingQueryUpdate = this as + dev.inmo.tgbotapi.types.update.ShippingQueryUpdate + +public inline fun Update.ifShippingQueryUpdate(block: (ShippingQueryUpdate) -> T): T? = + shippingQueryUpdateOrNull() ?.let(block) + +public inline fun Update.baseEditMessageUpdateOrNull(): BaseEditMessageUpdate? = this as? + dev.inmo.tgbotapi.types.update.abstracts.BaseEditMessageUpdate + +public inline fun Update.baseEditMessageUpdateOrThrow(): BaseEditMessageUpdate = this as + dev.inmo.tgbotapi.types.update.abstracts.BaseEditMessageUpdate + +public inline fun Update.ifBaseEditMessageUpdate(block: (BaseEditMessageUpdate) -> T): T? = + baseEditMessageUpdateOrNull() ?.let(block) + +public inline fun Update.baseMessageUpdateOrNull(): BaseMessageUpdate? = this as? + dev.inmo.tgbotapi.types.update.abstracts.BaseMessageUpdate + +public inline fun Update.baseMessageUpdateOrThrow(): BaseMessageUpdate = this as + dev.inmo.tgbotapi.types.update.abstracts.BaseMessageUpdate + +public inline fun Update.ifBaseMessageUpdate(block: (BaseMessageUpdate) -> T): T? = + baseMessageUpdateOrNull() ?.let(block) + +public inline fun Update.baseSentMessageUpdateOrNull(): BaseSentMessageUpdate? = this as? + dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate + +public inline fun Update.baseSentMessageUpdateOrThrow(): BaseSentMessageUpdate = this as + dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate + +public inline fun Update.ifBaseSentMessageUpdate(block: (BaseSentMessageUpdate) -> T): T? = + baseSentMessageUpdateOrNull() ?.let(block) + +public inline fun Update.chatMemberUpdatedUpdateOrNull(): ChatMemberUpdatedUpdate? = this as? + dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate + +public inline fun Update.chatMemberUpdatedUpdateOrThrow(): ChatMemberUpdatedUpdate = this as + dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate + +public inline fun Update.ifChatMemberUpdatedUpdate(block: (ChatMemberUpdatedUpdate) -> T): T? = + chatMemberUpdatedUpdateOrNull() ?.let(block) + +public inline fun Update.unknownUpdateOrNull(): UnknownUpdate? = this as? + dev.inmo.tgbotapi.types.update.abstracts.UnknownUpdate + +public inline fun Update.unknownUpdateOrThrow(): UnknownUpdate = this as + dev.inmo.tgbotapi.types.update.abstracts.UnknownUpdate + +public inline fun Update.ifUnknownUpdate(block: (UnknownUpdate) -> T): T? = + unknownUpdateOrNull() ?.let(block) + +public inline fun Update.channelPostMediaGroupUpdateOrNull(): ChannelPostMediaGroupUpdate? = this + as? dev.inmo.tgbotapi.types.update.media_group.ChannelPostMediaGroupUpdate + +public inline fun Update.channelPostMediaGroupUpdateOrThrow(): ChannelPostMediaGroupUpdate = this as + dev.inmo.tgbotapi.types.update.media_group.ChannelPostMediaGroupUpdate + +public inline fun + Update.ifChannelPostMediaGroupUpdate(block: (ChannelPostMediaGroupUpdate) -> T): T? = + channelPostMediaGroupUpdateOrNull() ?.let(block) + +public inline fun Update.editChannelPostMediaGroupUpdateOrNull(): EditChannelPostMediaGroupUpdate? = + this as? dev.inmo.tgbotapi.types.update.media_group.EditChannelPostMediaGroupUpdate + +public inline fun Update.editChannelPostMediaGroupUpdateOrThrow(): EditChannelPostMediaGroupUpdate = + this as dev.inmo.tgbotapi.types.update.media_group.EditChannelPostMediaGroupUpdate + +public inline fun + Update.ifEditChannelPostMediaGroupUpdate(block: (EditChannelPostMediaGroupUpdate) -> T): T? = + editChannelPostMediaGroupUpdateOrNull() ?.let(block) + +public inline fun Update.editMessageMediaGroupUpdateOrNull(): EditMessageMediaGroupUpdate? = this + as? dev.inmo.tgbotapi.types.update.media_group.EditMessageMediaGroupUpdate + +public inline fun Update.editMessageMediaGroupUpdateOrThrow(): EditMessageMediaGroupUpdate = this as + dev.inmo.tgbotapi.types.update.media_group.EditMessageMediaGroupUpdate + +public inline fun + Update.ifEditMessageMediaGroupUpdate(block: (EditMessageMediaGroupUpdate) -> T): T? = + editMessageMediaGroupUpdateOrNull() ?.let(block) + +public inline fun Update.mediaGroupUpdateOrNull(): MediaGroupUpdate? = this as? + dev.inmo.tgbotapi.types.update.media_group.MediaGroupUpdate + +public inline fun Update.mediaGroupUpdateOrThrow(): MediaGroupUpdate = this as + dev.inmo.tgbotapi.types.update.media_group.MediaGroupUpdate + +public inline fun Update.ifMediaGroupUpdate(block: (MediaGroupUpdate) -> T): T? = + mediaGroupUpdateOrNull() ?.let(block) + +public inline fun Update.sentMediaGroupUpdateOrNull(): SentMediaGroupUpdate? = this as? + dev.inmo.tgbotapi.types.update.media_group.SentMediaGroupUpdate + +public inline fun Update.sentMediaGroupUpdateOrThrow(): SentMediaGroupUpdate = this as + dev.inmo.tgbotapi.types.update.media_group.SentMediaGroupUpdate + +public inline fun Update.ifSentMediaGroupUpdate(block: (SentMediaGroupUpdate) -> T): T? = + sentMediaGroupUpdateOrNull() ?.let(block) + +public inline fun Update.editMediaGroupUpdateOrNull(): EditMediaGroupUpdate? = this as? + dev.inmo.tgbotapi.types.update.media_group.EditMediaGroupUpdate + +public inline fun Update.editMediaGroupUpdateOrThrow(): EditMediaGroupUpdate = this as + dev.inmo.tgbotapi.types.update.media_group.EditMediaGroupUpdate + +public inline fun Update.ifEditMediaGroupUpdate(block: (EditMediaGroupUpdate) -> T): T? = + editMediaGroupUpdateOrNull() ?.let(block) + +public inline fun Update.messageMediaGroupUpdateOrNull(): MessageMediaGroupUpdate? = this as? + dev.inmo.tgbotapi.types.update.media_group.MessageMediaGroupUpdate + +public inline fun Update.messageMediaGroupUpdateOrThrow(): MessageMediaGroupUpdate = this as + dev.inmo.tgbotapi.types.update.media_group.MessageMediaGroupUpdate + +public inline fun Update.ifMessageMediaGroupUpdate(block: (MessageMediaGroupUpdate) -> T): T? = + messageMediaGroupUpdateOrNull() ?.let(block)