diff --git a/.github/workflows/kdocs.yml b/.github/workflows/kdocs.yml index 39c1bb1712..2b4401b457 100644 --- a/.github/workflows/kdocs.yml +++ b/.github/workflows/kdocs.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 - name: Build run: ./gradlew dokkaHtmlMultiModule - name: Publish KDocs diff --git a/.github/workflows/packages_publishing.yml b/.github/workflows/packages_publishing.yml index 80bc770a21..d37efbf290 100644 --- a/.github/workflows/packages_publishing.yml +++ b/.github/workflows/packages_publishing.yml @@ -7,9 +7,9 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 - name: Setup LibCurl - run: sudo apt install -y libcurl4-openssl-dev + run: sudo apt update && sudo apt install -y libcurl4-openssl-dev - name: Rewrite version run: | branch="`echo "${{ github.ref }}" | grep -o "[^/]*$"`" diff --git a/CHANGELOG.md b/CHANGELOG.md index d29ee8e174..67ee7bb52e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # TelegramBotAPI changelog +## 9.3.0 + +This release become possible thanks to [Anton Lakotka](https://youtrack.jetbrains.com/users/anton.lakotka) + +**THIS RELEASE CONTAINS UPDATES UP TO RELEASE CANDIDATES VERSIONS** + +**UPDATE MAY HAVE BREAKING CHANGES** + +**SINCE THIS UPDATE IT WILL BE REQUIRED TO USE JDK 17+ FOR DEVELOPMENT** + +* `Version`: + * `Kotlin`: `1.8.22` -> `1.9.20` + * `Serialization`: `1.5.1` -> `1.6.0` + * `KorLibs`: `4.0.3` -> `4.0.10` + * `UUID`: `0.7.1` -> `0.8.1` + * `Ktor`: `2.3.4` -> `2.3.5` + * `MicroUtils`: `0.19.9` -> `0.20.12` + ## 9.2.4 * `Utils`: diff --git a/gradle.properties b/gradle.properties index a8cb3af671..7342f4c756 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,4 @@ kotlin.incremental=true kotlin.incremental.js=true library_group=dev.inmo -library_version=9.2.4 +library_version=9.3.0 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0fba10635e..ced16411b3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,22 +1,22 @@ [versions] -kotlin = "1.8.22" -kotlin-serialization = "1.5.1" +kotlin = "1.9.20" +kotlin-serialization = "1.6.0" kotlin-coroutines = "1.7.3" javax-activation = "1.1.1" -korlibs = "4.0.3" -uuid = "0.7.1" -ktor = "2.3.4" +korlibs = "4.0.10" +uuid = "0.8.1" +ktor = "2.3.5" -ksp = "1.8.22-1.0.11" +ksp = "1.9.20-1.0.14" kotlin-poet = "1.14.2" -microutils = "0.19.9" +microutils = "0.20.12" github-release-plugin = "2.4.1" -dokka = "1.8.20" +dokka = "1.9.10" [libraries] diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7182a7312b..4d6272d996 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip diff --git a/mppProjectWithSerialization.gradle b/mppProjectWithSerialization.gradle index 3a858f7e9a..aca28aecce 100644 --- a/mppProjectWithSerialization.gradle +++ b/mppProjectWithSerialization.gradle @@ -5,7 +5,7 @@ kotlin { jvm { compilations.main { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } @@ -15,6 +15,7 @@ kotlin { } linuxX64() mingwX64() + linuxArm64() sourceSets { commonMain { @@ -40,10 +41,18 @@ kotlin { implementation libs.kotlin.test.junit } } + all { + languageSettings { + optIn('dev.inmo.tgbotapi.utils.RiskFeature') + optIn('dev.inmo.tgbotapi.utils.PreviewFeature') + optIn('dev.inmo.micro_utils.common.Warning') + optIn('dev.inmo.micro_utils.common.PreviewFeature') + } + } } } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } diff --git a/publish.gradle b/publish.gradle index 0049dfc61a..1a3d5147a0 100644 --- a/publish.gradle +++ b/publish.gradle @@ -1,8 +1,7 @@ apply plugin: 'maven-publish' task javadocsJar(type: Jar) { - archiveClassifier.convention("javadoc") - archiveClassifier.set("javadoc") + archiveClassifier = 'javadoc' } publishing { @@ -20,22 +19,22 @@ publishing { } developers { - + developer { id = "InsanusMokrassar" name = "Ovsiannikov Aleksei" email = "ovsyannikov.alexey95@gmail.com" } - + } licenses { - + license { name = "Apache Software License 2.0" url = "https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE" } - + } } repositories { @@ -43,58 +42,64 @@ publishing { maven { name = "GithubPackages" url = uri("https://maven.pkg.github.com/InsanusMokrassar/TelegramBotAPI") - + credentials { username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER') password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD') } - + } } if (project.hasProperty('GITEA_TOKEN') || System.getenv('GITEA_TOKEN') != null) { maven { name = "Gitea" url = uri("https://git.inmo.dev/api/packages/InsanusMokrassar/maven") - + credentials(HttpHeaderCredentials) { name = "Authorization" value = project.hasProperty('GITEA_TOKEN') ? project.property('GITEA_TOKEN') : System.getenv('GITEA_TOKEN') } - + authentication { header(HttpHeaderAuthentication) } - + } } if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { maven { name = "sonatype" url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/") - + credentials { username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER') password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD') } - + } } } } } - + if (project.hasProperty("signing.gnupg.keyName")) { apply plugin: 'signing' - + signing { useGpgCmd() - + sign publishing.publications } - + task signAll { tasks.withType(Sign).forEach { dependsOn(it) } } + + // Workaround to make android sign operations depend on signing tasks + project.getTasks().withType(AbstractPublishToMaven.class).configureEach { + def signingTasks = project.getTasks().withType(Sign.class) + mustRunAfter(signingTasks) + } } diff --git a/tgbotapi.behaviour_builder/src/linuxArm64Main/kotlin/ActualDefaultCoroutineScopeProvider.kt b/tgbotapi.behaviour_builder/src/linuxArm64Main/kotlin/ActualDefaultCoroutineScopeProvider.kt new file mode 100644 index 0000000000..57f3662698 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/linuxArm64Main/kotlin/ActualDefaultCoroutineScopeProvider.kt @@ -0,0 +1,6 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers + +actual var defaultCoroutineScopeProvider: () -> CoroutineScope = { CoroutineScope(Dispatchers.Default) } diff --git a/tgbotapi.core/build.gradle b/tgbotapi.core/build.gradle index e6eb4c507c..f5269f1187 100644 --- a/tgbotapi.core/build.gradle +++ b/tgbotapi.core/build.gradle @@ -55,6 +55,12 @@ kotlin { } } + linuxArm64Main { + dependencies { + api libs.ktor.client.cio + } + } + mingwX64Main { dependencies { api libs.ktor.client.winhttp diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt index b0b1996613..833c420840 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt @@ -14,7 +14,18 @@ import kotlinx.serialization.json.Json * * On JS, JVM and MingwX64 platforms it is [dev.inmo.tgbotapi.bot.ktor.base.DefaultKtorRequestsExecutor] * * On LinuxX64 it is [dev.inmo.tgbotapi.bot.ktor.base.MultipleClientKtorRequestsExecutor] */ -expect class KtorRequestsExecutor ( +expect class KtorRequestsExecutor internal constructor( + telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper, + client: HttpClient, + callsFactories: List, + excludeDefaultFactories: Boolean, + requestsLimiter: RequestLimiter, + jsonFormatter: Json, + pipelineStepsHolder: KtorPipelineStepsHolder, + diff: Unit // just a diff property to know where constructor and where calling function with defaults +) : BaseRequestsExecutor + +fun KtorRequestsExecutor( telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper, client: HttpClient = HttpClient(), callsFactories: List = emptyList(), @@ -22,4 +33,13 @@ expect class KtorRequestsExecutor ( requestsLimiter: RequestLimiter = ExceptionsOnlyLimiter, jsonFormatter: Json = nonstrictJsonFormat, pipelineStepsHolder: KtorPipelineStepsHolder = KtorPipelineStepsHolder -) : BaseRequestsExecutor +) = KtorRequestsExecutor( + telegramAPIUrlsKeeper = telegramAPIUrlsKeeper, + client = client, + callsFactories = callsFactories, + excludeDefaultFactories = excludeDefaultFactories, + requestsLimiter = requestsLimiter, + jsonFormatter = jsonFormatter, + pipelineStepsHolder = pipelineStepsHolder, + diff = kotlin.Unit +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/DefaultKtorRequestsExecutor.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/DefaultKtorRequestsExecutor.kt index 3051931ec2..49ca017764 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/DefaultKtorRequestsExecutor.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/DefaultKtorRequestsExecutor.kt @@ -7,6 +7,7 @@ import dev.inmo.tgbotapi.bot.exceptions.CommonBotException import dev.inmo.tgbotapi.bot.exceptions.newRequestException import dev.inmo.tgbotapi.bot.ktor.KtorCallFactory import dev.inmo.tgbotapi.bot.ktor.KtorPipelineStepsHolder +import dev.inmo.tgbotapi.bot.ktor.KtorRequestsExecutor import dev.inmo.tgbotapi.bot.ktor.createTelegramBotDefaultKtorCallRequestsFactories import dev.inmo.tgbotapi.bot.settings.limiters.ExceptionsOnlyLimiter import dev.inmo.tgbotapi.bot.settings.limiters.RequestLimiter @@ -19,14 +20,15 @@ import io.ktor.client.plugins.* import io.ktor.client.statement.* import kotlinx.serialization.json.Json -class DefaultKtorRequestsExecutor( +class DefaultKtorRequestsExecutor internal constructor( telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper, - client: HttpClient = HttpClient(), - callsFactories: List = emptyList(), - excludeDefaultFactories: Boolean = false, - private val requestsLimiter: RequestLimiter = ExceptionsOnlyLimiter, - private val jsonFormatter: Json = nonstrictJsonFormat, - private val pipelineStepsHolder: KtorPipelineStepsHolder = KtorPipelineStepsHolder + client: HttpClient, + callsFactories: List, + excludeDefaultFactories: Boolean, + private val requestsLimiter: RequestLimiter, + private val jsonFormatter: Json, + private val pipelineStepsHolder: KtorPipelineStepsHolder, + diff: Unit ) : BaseRequestsExecutor(telegramAPIUrlsKeeper) { private val callsFactories: List = callsFactories.run { if (!excludeDefaultFactories) { diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipleClientKtorRequestsExecutor.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipleClientKtorRequestsExecutor.kt index c8c6a73337..adb30b2228 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipleClientKtorRequestsExecutor.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipleClientKtorRequestsExecutor.kt @@ -4,9 +4,12 @@ import dev.inmo.micro_utils.coroutines.runCatchingSafely import dev.inmo.tgbotapi.bot.BaseRequestsExecutor import dev.inmo.tgbotapi.bot.ktor.KtorCallFactory import dev.inmo.tgbotapi.bot.ktor.KtorPipelineStepsHolder +import dev.inmo.tgbotapi.bot.ktor.KtorRequestsExecutor +import dev.inmo.tgbotapi.bot.settings.limiters.ExceptionsOnlyLimiter import dev.inmo.tgbotapi.bot.settings.limiters.RequestLimiter import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper +import dev.inmo.tgbotapi.utils.nonstrictJsonFormat import io.ktor.client.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.first @@ -55,7 +58,8 @@ class MultipleClientKtorRequestsExecutor ( excludeDefaultFactories, requestsLimiter, jsonFormatter, - pipelineStepsHolder + pipelineStepsHolder, + Unit ) }.toSet() private val freeClients = MutableStateFlow>(requestExecutors) @@ -68,14 +72,15 @@ class MultipleClientKtorRequestsExecutor ( } } - constructor( + internal constructor( telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper, client: HttpClient, callsFactories: List, excludeDefaultFactories: Boolean, requestsLimiter: RequestLimiter, jsonFormatter: Json, - pipelineStepsHolder: KtorPipelineStepsHolder + pipelineStepsHolder: KtorPipelineStepsHolder, + diff: Unit ) : this( telegramAPIUrlsKeeper, callsFactories, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/StoryContent.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/StoryContent.kt index 48e85ade62..920e6a8699 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/StoryContent.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/StoryContent.kt @@ -7,7 +7,9 @@ import dev.inmo.tgbotapi.types.MessageId import dev.inmo.tgbotapi.types.MessageThreadId import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup import dev.inmo.tgbotapi.types.chat.Chat +import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage import dev.inmo.tgbotapi.types.message.abstracts.Message +import dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage import dev.inmo.tgbotapi.types.stories.Story import kotlinx.serialization.Serializable @@ -25,7 +27,7 @@ data class StoryContent( replyToMessageId: MessageId?, allowSendingWithoutReply: Boolean?, replyMarkup: KeyboardMarkup? - ): Request { + ): Request { return ForwardMessage( chat.id, toChatId = chatId, diff --git a/tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt b/tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.actual.jvm.kt similarity index 100% rename from tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt rename to tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.actual.jvm.kt diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/PackageInfo.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/PackageInfo.kt new file mode 100644 index 0000000000..20be3dda7a --- /dev/null +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/PackageInfo.kt @@ -0,0 +1 @@ +package dev.inmo.tgbotapi diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/KtorRequestsExecutor.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/KtorRequestsExecutor.kt new file mode 100644 index 0000000000..2f49bfc213 --- /dev/null +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/KtorRequestsExecutor.kt @@ -0,0 +1,5 @@ +package dev.inmo.tgbotapi.bot.ktor + +import dev.inmo.tgbotapi.bot.ktor.base.MultipleClientKtorRequestsExecutor + +actual typealias KtorRequestsExecutor = MultipleClientKtorRequestsExecutor diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt new file mode 100644 index 0000000000..ad3e4e5dce --- /dev/null +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt @@ -0,0 +1,22 @@ +package dev.inmo.tgbotapi.bot.ktor.base + +import io.ktor.client.* +import io.ktor.client.engine.cio.* + +/** + * This function is used in default constructor of [MultipleClientKtorRequestsExecutor] and on all non-native + * platforms and MingwX64 should return [client] + * + * On LinuxX64 it will create copy with Curl engine or throw an exception if engine is different with Curl + * + * @throws IllegalArgumentException When pass non Curl-based [HttpClient] on LinuxX64 + */ +internal actual inline fun platformClientCopy(client: HttpClient): HttpClient = (client.engineConfig as? CIOEngineConfig) ?.let { + lateinit var config: HttpClientConfig + client.config { + config = this as HttpClientConfig + }.close() + HttpClient(CIO) { + this.plusAssign(config) + } +} ?: throw IllegalArgumentException("On LinuxX64 TelegramBotAPI currently support only Curl Ktor HttpClient engine") diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/requests/abstracts/ActualMPPFileAsMultipartFile.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/requests/abstracts/ActualMPPFileAsMultipartFile.kt new file mode 100644 index 0000000000..942cbfddf2 --- /dev/null +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/requests/abstracts/ActualMPPFileAsMultipartFile.kt @@ -0,0 +1,9 @@ +package dev.inmo.tgbotapi.requests.abstracts + +import dev.inmo.micro_utils.common.MPPFile +import dev.inmo.micro_utils.ktor.common.input +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile + +actual fun MPPFile.asMultipartFile(): MultipartFile = MultipartFile(this.name) { + input() +} diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/utils/ActualByteReadChannelAsInput.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/utils/ActualByteReadChannelAsInput.kt new file mode 100644 index 0000000000..8f52f52a4e --- /dev/null +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/utils/ActualByteReadChannelAsInput.kt @@ -0,0 +1,7 @@ +package dev.inmo.tgbotapi.utils + +import io.ktor.utils.io.ByteReadChannel +import io.ktor.utils.io.core.Input +import io.ktor.utils.io.readRemaining + +actual suspend fun ByteReadChannel.asInput(): Input = readRemaining() diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/utils/ActualMimeType.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/utils/ActualMimeType.kt new file mode 100644 index 0000000000..18ea512429 --- /dev/null +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/utils/ActualMimeType.kt @@ -0,0 +1,12 @@ +package dev.inmo.tgbotapi.utils + +import kotlinx.serialization.Serializable + +//actual typealias MimeType = MimeType + +@OptIn(RiskFeature::class) +@Serializable(MimeTypeSerializer::class) +actual data class MimeType( + actual val raw: String +) +internal actual fun createMimeType(raw: String): MimeType = MimeType(raw) diff --git a/tgbotapi.core/src/linuxX64Main/kotlin/utils/ActualMimeType.kt b/tgbotapi.core/src/linuxX64Main/kotlin/utils/ActualMimeType.kt index 4158408546..18ea512429 100644 --- a/tgbotapi.core/src/linuxX64Main/kotlin/utils/ActualMimeType.kt +++ b/tgbotapi.core/src/linuxX64Main/kotlin/utils/ActualMimeType.kt @@ -4,6 +4,7 @@ import kotlinx.serialization.Serializable //actual typealias MimeType = MimeType +@OptIn(RiskFeature::class) @Serializable(MimeTypeSerializer::class) actual data class MimeType( actual val raw: String diff --git a/tgbotapi.ksp/src/main/kotlin/TelegramBotAPISymbolProcessor.kt b/tgbotapi.ksp/src/main/kotlin/TelegramBotAPISymbolProcessor.kt index 4eeff1ecc1..f6c5e3a9d7 100644 --- a/tgbotapi.ksp/src/main/kotlin/TelegramBotAPISymbolProcessor.kt +++ b/tgbotapi.ksp/src/main/kotlin/TelegramBotAPISymbolProcessor.kt @@ -24,6 +24,7 @@ class TelegramBotAPISymbolProcessor( private val outputFile: String = "Output", private val outputFolder: String? = null ) : SymbolProcessor { + @OptIn(RiskFeature::class) private val classCastsIncludedClassName = ClassCastsIncluded::class.asClassName() @OptIn(KspExperimental::class, RiskFeature::class) override fun process(resolver: Resolver): List { diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/updates/UpdatesUtils.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/updates/UpdatesUtils.kt index c6d0e4b90c..c59809eebb 100644 --- a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/updates/UpdatesUtils.kt +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/updates/UpdatesUtils.kt @@ -7,6 +7,7 @@ import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent import dev.inmo.tgbotapi.types.update.* import dev.inmo.tgbotapi.types.update.abstracts.* +import dev.inmo.tgbotapi.utils.RiskFeature import dev.inmo.tgbotapi.utils.extensions.asMediaGroupMessage /** @@ -22,6 +23,7 @@ fun List.lastUpdateIdentifier(): UpdateIdentifier? { * Will convert incoming list of [Update]s to list with [Update]s, which include [dev.inmo.tgbotapi.types.message.abstracts.ContentMessage]s * with [dev.inmo.tgbotapi.types.message.content.MediaGroupContent] */ +@OptIn(RiskFeature::class) fun List.convertWithMediaGroupUpdates(): List { val resultUpdates = mutableListOf() val mediaGroups = mutableMapOf>>>()