Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

18.0.0 #894

Merged
merged 22 commits into from
Sep 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f711eb0
start 17.1.0
InsanusMokrassar Aug 21, 2024
d7e9c6a
add customizing of UpdateDeserializationStrategy
InsanusMokrassar Aug 21, 2024
c03440c
add common customizable serializer
InsanusMokrassar Aug 21, 2024
6d90e57
add docs to new serialization/deserialization strategies and refactor…
InsanusMokrassar Aug 24, 2024
38e1d27
Add extension functions to ChatMember and ChatMemberUpdated to simpli…
Nik-mmzd Aug 28, 2024
5175395
Fix class comparison in ChatMember.isMemberStrict and ChatMember.isAd…
Nik-mmzd Aug 28, 2024
04ead7e
Add new methods to API dump
Nik-mmzd Aug 28, 2024
4944840
Add triggers for newly introduced ChatMemberUpdated filters
Nik-mmzd Aug 28, 2024
39de983
Merge pull request #891 from Nik-mmzd/feature-888
InsanusMokrassar Aug 29, 2024
93d1afd
update dependencies
InsanusMokrassar Aug 29, 2024
2d40af2
migration onto 18.0.0
InsanusMokrassar Aug 29, 2024
10d92c2
improvements and breaking changes in ChatMember hierarchy
InsanusMokrassar Aug 29, 2024
dd054f1
update jvm api dump
InsanusMokrassar Aug 29, 2024
b0d8abf
one more dump
InsanusMokrassar Aug 29, 2024
e8a280c
small optimization of extensions.gradle
InsanusMokrassar Aug 29, 2024
87ed66e
update ChatMember to use PreviewUser instead of User
InsanusMokrassar Aug 30, 2024
0485994
add note about Nik-mmzd contribution in CHANGELOG
InsanusMokrassar Aug 30, 2024
9f2ccde
add kicked changes listening
InsanusMokrassar Aug 30, 2024
6ba2b70
add waiters for new chat member updates extensions + add kicked varia…
InsanusMokrassar Aug 30, 2024
5b4a7d9
update api dump
InsanusMokrassar Aug 30, 2024
8936023
update MicroUtils
InsanusMokrassar Aug 30, 2024
b03eef8
update ChatMemberUpdated#gotRestrictionsChanged
InsanusMokrassar Aug 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
# TelegramBotAPI changelog

## 18.0.0

**THIS UPDATE CONTAINS BREAKING CHANGES**

This update contains solution for [issue #888](https://github.com/InsanusMokrassar/ktgbotapi/issues/888), made by
[@Nik-mmzd](https://github.com/Nik-mmzd)

---

**Migration (step-by-step)**

Replace in a whole project:

1. `RestrictedChatMember` -> `RestrictedMemberChatMember`
2. `BannedChatMember` -> `RestrictedChatMember`

---

**Changes:**

* `Version`:
* `Kotlin`: `2.0.10` -> `2.0.20`
* `Serialization`: `1.7.1` -> `1.7.2`
* `MicroUtils`: `0.22.0` -> `0.22.2`
* `KSLog`: `1.3.5` -> `1.3.6`
* `Ktor`: `2.3.11` -> `2.3.12`
* `Core`:
* `RestrictedChatMember` has been renamed to `RestrictedMemberChatMember`
* `BannedChatMember` has been renamed to `RestrictedChatMember`
* `KickedChatMember` now implements `RestrictedChatMember` (due to rename)
* All `ChatMember`s now use `PreviewUser`s instead of `User`s
* `Utils`:
* Add a lot of extensions like `ChatMember.isMember`
* Add a lot of extensions like `ChatMemberUpdated.joinedChat`

## 17.0.0

**THIS UPDATE CONTAINS SUPPORT OF BOTS API 7.9**
Expand Down
2 changes: 1 addition & 1 deletion docs/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {

project.description = "Full collection of all built-in tgbotapi tools"

apply from: "$mppProjectWithSerializationPresetPath"
apply from: "$mppProjectWithSerialization"

kotlin {
sourceSets {
Expand Down
17 changes: 13 additions & 4 deletions extensions.gradle
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
File templatesFolder = new File("$rootProject.projectDir.absolutePath${File.separatorChar}gradle${File.separatorChar}templates")

Map properties = new HashMap<String, String>()

if (templatesFolder.exists() && templatesFolder.isDirectory()) {
templatesFolder.listFiles().each {
properties[it.name - ".gradle"] = it.absolutePath
}
}

allprojects {
ext {
mppProjectWithSerializationPresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerialization.gradle"
mppJsProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJsProject.gradle"

publishGradlePath = "${rootProject.projectDir.absolutePath}/publish.gradle"
properties.forEach { k, v ->
it[k] = v
}
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ kotlin.incremental=true
kotlin.incremental.js=true

library_group=dev.inmo
library_version=17.0.0
library_version=18.0.0
12 changes: 6 additions & 6 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
[versions]

kotlin = "2.0.10"
kotlin-serialization = "1.7.1"
kotlin = "2.0.20"
kotlin-serialization = "1.7.2"
kotlin-coroutines = "1.8.1"

javax-activation = "1.1.1"

korlibs = "5.4.0"
uuid = "0.8.4"
ktor = "2.3.11"
ktor = "2.3.12"

ksp = "2.0.10-1.0.24"
ksp = "2.0.20-1.0.24"
kotlin-poet = "1.18.1"

microutils = "0.22.0"
kslog = "1.3.5"
microutils = "0.22.2"
kslog = "1.3.6"

versions = "0.51.0"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
project.version = "$version"
project.group = "$group"

apply from: "$publishGradlePath"
apply from: "$mpp_publish"

kotlin {
js (IR) {
Expand Down
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions tgbotapi.api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ plugins {

project.description = "API extensions with \"Telegram Bot API\"-like extensions for TelegramBot and RequestsExecutor"

apply from: "$mppProjectWithSerializationPresetPath"
apply from: "$publishGradlePath"
apply from: "$mppProjectWithSerialization"
apply from: "$mpp_publish"

kotlin {
sourceSets {
Expand Down
4 changes: 2 additions & 2 deletions tgbotapi.behaviour_builder.fsm/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ plugins {

project.description = "Behaviour Builder DSL"

apply from: "$mppProjectWithSerializationPresetPath"
apply from: "$publishGradlePath"
apply from: "$mppProjectWithSerialization"
apply from: "$mpp_publish"

kotlin {
sourceSets {
Expand Down
185 changes: 185 additions & 0 deletions tgbotapi.behaviour_builder/api/tgbotapi.behaviour_builder.api

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions tgbotapi.behaviour_builder/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ plugins {

project.description = "Behaviour Builder DSL"

apply from: "$mppProjectWithSerializationPresetPath"
apply from: "$publishGradlePath"
apply from: "$mppProjectWithSerialization"
apply from: "$mpp_publish"

kotlin {
sourceSets {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations

import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.*
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChatMemberUpdatedInternal
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatChatMemberUpdatedMarkerFactory
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times
import dev.inmo.tgbotapi.requests.abstracts.Request
import dev.inmo.tgbotapi.types.chat.member.ChatMemberUpdated
import dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate
import dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate
import dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate
import dev.inmo.tgbotapi.types.update.abstracts.Update
import dev.inmo.tgbotapi.utils.RiskFeature
import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter

typealias ChatMemberUpdatedMapper<T> = suspend T.() -> T?

Expand Down Expand Up @@ -37,3 +45,213 @@ suspend fun BehaviourContext.waitMyChatMemberUpdated(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdatedWithFilter<MyChatMemberUpdatedUpdate>(initRequest, errorFactory)

suspend fun BehaviourContext.waitChatMemberJoined(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) };

suspend fun BehaviourContext.waitChatMemberLeft(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) };

suspend fun BehaviourContext.waitChatMemberSubscribed(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) };

suspend fun BehaviourContext.waitChatMemberSubscriptionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) };

suspend fun BehaviourContext.waitChatMemberUnsubscribed(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) };

suspend fun BehaviourContext.waitChatMemberGotPromoted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) };

suspend fun BehaviourContext.waitChatMemberGotPromotionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) };

suspend fun BehaviourContext.waitChatMemberGotDemoted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) };

suspend fun BehaviourContext.waitChatMemberBecameOwner(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) };

suspend fun BehaviourContext.waitChatMemberCeasedOwnership(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) };

suspend fun BehaviourContext.waitChatMemberGotRestricted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) };

suspend fun BehaviourContext.waitChatMemberGotRestrictionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) };

suspend fun BehaviourContext.waitChatMemberGotUnrestricted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) };

suspend fun BehaviourContext.waitChatMemberKicked(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberJoined(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberLeft(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberSubscribed(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberSubscriptionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberUnsubscribed(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberGotPromoted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberGotPromotionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberGotDemoted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberBecameOwner(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberCeasedOwnership(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberGotRestricted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberGotRestrictionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberGotUnrestricted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) };

suspend fun BehaviourContext.waitCommonChatMemberKicked(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberJoined(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberLeft(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberSubscribed(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberSubscriptionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberUnsubscribed(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberGotPromoted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberGotPromotionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberGotDemoted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberBecameOwner(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberCeasedOwnership(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberGotRestricted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberGotRestrictionChanged(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberGotUnrestricted(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) };

suspend fun BehaviourContext.waitMyChatMemberKicked(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) };
Loading
Loading