diff --git a/CHANGELOG.md b/CHANGELOG.md index 5220203107..7d42f7d26c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # TelegramBotAPI changelog +## 24.0.0 + +**THIS UPDATE CONTAINS BREAKING CHANGES IN `subcontextUpdatesFilter` WORK. TAKE CARE IN MIGRATION** + +* `Version`: + * `MicroUtils`: `0.24.6` -> `0.24.7` +* `Core`: + * `ForumContentMessage` got property `threadCreatingInfo` which represents information about topic where message has been sent +* `BehaviourBuilder`: + * Fix of overall `subcontextUpdatesFilter` behaviour. In fact, this update will fix its affection on scenaries + ## 23.2.1 * `Core`: diff --git a/gradle.properties b/gradle.properties index 1677ba08ad..8316a066e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,4 @@ kotlin.incremental=true kotlin.incremental.js=true library_group=dev.inmo -library_version=23.2.1 +library_version=24.0.0 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f0e0adf0eb..b13e080c54 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,10 +10,10 @@ korlibs = "5.4.0" uuid = "0.8.4" ktor = "3.1.0" -ksp = "2.1.10-1.0.29" +ksp = "2.1.10-1.0.30" kotlin-poet = "1.18.1" -microutils = "0.24.6" +microutils = "0.24.7" kslog = "1.4.1" versions = "0.51.0" diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MainTrigger.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MainTrigger.kt index 8e76465ffa..c04acadf9f 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MainTrigger.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/MainTrigger.kt @@ -1,13 +1,20 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling +import dev.inmo.micro_utils.coroutines.SpecialMutableStateFlow +import dev.inmo.micro_utils.coroutines.launchLoggingDropExceptions import dev.inmo.micro_utils.coroutines.launchSafelyWithoutExceptions +import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptionsAsync import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.expectFlow import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory +import dev.inmo.tgbotapi.extensions.utils.flatMap import dev.inmo.tgbotapi.types.update.abstracts.Update +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.flatMapLatest internal suspend fun BC.on( markerFactory: MarkerFactory?, @@ -40,11 +47,21 @@ internal suspend fun BC.on( } val handler: suspend (Pair) -> Unit = subcontextUpdatesFilter ?.let { { (update, triggerData) -> - createSubContextAndDoSynchronouslyWithUpdatesFilter { - if (subcontextUpdatesFilter(this, triggerData, update)) { - localSubcontextInitialAction(update, triggerData) - scenarioReceiver(triggerData) + val contextStateFlow = SpecialMutableStateFlow(null) + createSubContextAndDoSynchronouslyWithUpdatesFilter( + updatesUpstreamFlow = contextStateFlow.flatMapLatest { context -> + if (context == null) { + emptyFlow() + } else { + allUpdatesFlow.filter { + context.subcontextUpdatesFilter(triggerData, it) + } + } } + ) { + contextStateFlow.value = this + localSubcontextInitialAction(update, triggerData) + scenarioReceiver(triggerData) } } } ?: { (update, triggerData) -> @@ -57,8 +74,8 @@ internal suspend fun BC.on( { markerFactory(it.second) }, block = handler ) - } ?: subscribeSafelyWithoutExceptions(scope) { - scope.launchSafelyWithoutExceptions { + } ?: subscribeLoggingDropExceptions(scope) { + scope.launchLoggingDropExceptions { handler(it) } } diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 6a7372ceb5..4e68ad69e8 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -19165,6 +19165,7 @@ public final class dev/inmo/tgbotapi/types/message/AnonymousForumContentMessageI public fun getSenderBot ()Ldev/inmo/tgbotapi/types/chat/CommonBot; public synthetic fun getSenderChat ()Ldev/inmo/tgbotapi/types/chat/PreviewChat; public fun getSenderChat ()Ldev/inmo/tgbotapi/types/chat/PreviewGroupChat; + public fun getThreadCreatingInfo ()Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; public synthetic fun getThreadId-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId; public fun getThreadId-hDmiKeI ()J public fun hashCode ()I @@ -19853,6 +19854,7 @@ public final class dev/inmo/tgbotapi/types/message/CommonForumContentMessageImpl public fun getReplyTo ()Ldev/inmo/tgbotapi/types/message/abstracts/Message; public fun getSenderBoostsCount ()Ljava/lang/Integer; public fun getSenderBot ()Ldev/inmo/tgbotapi/types/chat/CommonBot; + public fun getThreadCreatingInfo ()Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; public synthetic fun getThreadId-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId; public fun getThreadId-hDmiKeI ()J public fun getUser ()Ldev/inmo/tgbotapi/types/chat/User; @@ -20137,6 +20139,7 @@ public final class dev/inmo/tgbotapi/types/message/FromChannelForumContentMessag public fun getSenderBot ()Ldev/inmo/tgbotapi/types/chat/CommonBot; public fun getSenderChat ()Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat; public synthetic fun getSenderChat ()Ldev/inmo/tgbotapi/types/chat/PreviewChat; + public fun getThreadCreatingInfo ()Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; public synthetic fun getThreadId-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId; public fun getThreadId-hDmiKeI ()J public fun hashCode ()I @@ -20572,6 +20575,7 @@ public final class dev/inmo/tgbotapi/types/message/abstracts/AnonymousForumConte public static fun getMetaInfo-fV8YnZ8 (Ldev/inmo/tgbotapi/types/message/abstracts/AnonymousForumContentMessage;)Lkotlin/Triple; public static fun getReplyTo (Ldev/inmo/tgbotapi/types/message/abstracts/AnonymousForumContentMessage;)Ldev/inmo/tgbotapi/types/message/abstracts/Message; public static fun getSenderChat (Ldev/inmo/tgbotapi/types/message/abstracts/AnonymousForumContentMessage;)Ldev/inmo/tgbotapi/types/chat/PreviewGroupChat; + public static fun getThreadCreatingInfo (Ldev/inmo/tgbotapi/types/message/abstracts/AnonymousForumContentMessage;)Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; } public abstract interface class dev/inmo/tgbotapi/types/message/abstracts/AnonymousGroupContentMessage : dev/inmo/tgbotapi/types/message/abstracts/GroupContentMessage, dev/inmo/tgbotapi/types/message/abstracts/SignedMessage, dev/inmo/tgbotapi/types/message/abstracts/WithSenderChatMessage { @@ -20636,6 +20640,7 @@ public final class dev/inmo/tgbotapi/types/message/abstracts/CommonForumContentM public static fun getForwardable (Ldev/inmo/tgbotapi/types/message/abstracts/CommonForumContentMessage;)Z public static fun getMetaInfo-fV8YnZ8 (Ldev/inmo/tgbotapi/types/message/abstracts/CommonForumContentMessage;)Lkotlin/Triple; public static fun getReplyTo (Ldev/inmo/tgbotapi/types/message/abstracts/CommonForumContentMessage;)Ldev/inmo/tgbotapi/types/message/abstracts/Message; + public static fun getThreadCreatingInfo (Ldev/inmo/tgbotapi/types/message/abstracts/CommonForumContentMessage;)Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; public static fun getUser (Ldev/inmo/tgbotapi/types/message/abstracts/CommonForumContentMessage;)Ldev/inmo/tgbotapi/types/chat/User; } @@ -20688,6 +20693,7 @@ public final class dev/inmo/tgbotapi/types/message/abstracts/ContentMessage$Defa public abstract interface class dev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage : dev/inmo/tgbotapi/types/message/abstracts/GroupContentMessage, dev/inmo/tgbotapi/types/message/abstracts/PossiblyTopicMessage { public abstract fun getChat ()Ldev/inmo/tgbotapi/types/chat/PreviewForumChat; + public abstract fun getThreadCreatingInfo ()Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; public abstract fun getThreadId-hDmiKeI ()J } @@ -20697,6 +20703,7 @@ public final class dev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage public static fun getForwardable (Ldev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage;)Z public static fun getMetaInfo-fV8YnZ8 (Ldev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage;)Lkotlin/Triple; public static fun getReplyTo (Ldev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage;)Ldev/inmo/tgbotapi/types/message/abstracts/Message; + public static fun getThreadCreatingInfo (Ldev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage;)Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; } public abstract interface class dev/inmo/tgbotapi/types/message/abstracts/FromChannelForumContentMessage : dev/inmo/tgbotapi/types/message/abstracts/ForumContentMessage, dev/inmo/tgbotapi/types/message/abstracts/FromChannelGroupContentMessage { @@ -20709,6 +20716,7 @@ public final class dev/inmo/tgbotapi/types/message/abstracts/FromChannelForumCon public static fun getMetaInfo-fV8YnZ8 (Ldev/inmo/tgbotapi/types/message/abstracts/FromChannelForumContentMessage;)Lkotlin/Triple; public static fun getReplyTo (Ldev/inmo/tgbotapi/types/message/abstracts/FromChannelForumContentMessage;)Ldev/inmo/tgbotapi/types/message/abstracts/Message; public static fun getSenderChat (Ldev/inmo/tgbotapi/types/message/abstracts/FromChannelForumContentMessage;)Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat; + public static fun getThreadCreatingInfo (Ldev/inmo/tgbotapi/types/message/abstracts/FromChannelForumContentMessage;)Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; } public abstract interface class dev/inmo/tgbotapi/types/message/abstracts/FromChannelGroupContentMessage : dev/inmo/tgbotapi/types/message/abstracts/GroupContentMessage, dev/inmo/tgbotapi/types/message/abstracts/SignedMessage, dev/inmo/tgbotapi/types/message/abstracts/WithSenderChatMessage { @@ -20930,6 +20938,7 @@ public final class dev/inmo/tgbotapi/types/message/abstracts/PossiblySentViaBotC } public abstract interface class dev/inmo/tgbotapi/types/message/abstracts/PossiblyTopicMessage : dev/inmo/tgbotapi/types/message/abstracts/AccessibleMessage { + public abstract fun getThreadCreatingInfo ()Ldev/inmo/tgbotapi/types/message/ChatEvents/forum/ForumTopicCreated; public abstract fun getThreadId-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId; } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt index 4f7f00be72..6df8cf2d76 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt @@ -1,7 +1,9 @@ package dev.inmo.tgbotapi.types.message.abstracts +import dev.inmo.tgbotapi.requests.chat.forum.CreateForumTopic import dev.inmo.tgbotapi.types.MessageThreadId import dev.inmo.tgbotapi.types.chat.* +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicCreated import dev.inmo.tgbotapi.types.message.content.MessageContent sealed interface GroupContentMessage : PublicContentMessage { @@ -15,6 +17,9 @@ sealed interface PotentiallyFromUserGroupContentMessage : Gr sealed interface ForumContentMessage : GroupContentMessage, PossiblyTopicMessage { override val chat: PreviewForumChat override val threadId: MessageThreadId + + override val threadCreatingInfo: ForumTopicCreated? + get() = (replyTo as? ChatEventMessage<*>) ?.chatEvent as? ForumTopicCreated } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyTopicMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyTopicMessage.kt index ba19d01b83..ad0f52c137 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyTopicMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyTopicMessage.kt @@ -1,7 +1,10 @@ package dev.inmo.tgbotapi.types.message.abstracts +import dev.inmo.tgbotapi.requests.chat.forum.CreateForumTopic import dev.inmo.tgbotapi.types.MessageThreadId +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicCreated interface PossiblyTopicMessage : AccessibleMessage { val threadId: MessageThreadId? + val threadCreatingInfo: ForumTopicCreated? }