1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2026-06-22 03:05:09 +00:00

Compare commits

..

9 Commits

36 changed files with 3225 additions and 2242 deletions

View File

@@ -1,5 +1,24 @@
# TelegramBotAPI changelog # TelegramBotAPI changelog
## 31.0.0
## 30.0.2
* `Version`:
* `Kotlin`: `2.2.20` -> `2.2.21`
* `Ktor`: `3.3.1` -> `3.3.2`
* `KSP`: `2.2.20-2.0.4` -> `2.3.2`
* `MicroUtils`: `0.26.6` -> `0.26.8`
* `KSLog`: `1.5.1` -> `1.5.2`
* `Core`:
* Allow to use `SetWebhook` with `maxAllowedConnections` up to `100000` (fix of [#1019](https://github.com/InsanusMokrassar/ktgbotapi/issues/1019))
* `KSP`:
* Fixed annotation property access for KSP2 compatibility using `withNoSuchElementWorkaround`
* Removed `ksp.useKSP2=false` workaround from `gradle.properties` (KSP2 is now properly supported)
* `Utils`:
* Regenerated class casts extensions
* Allow to use custom `GetUpdates` in `longPollingFlow`
## 30.0.1 ## 30.0.1
* `Core`: * `Core`:

View File

@@ -5,8 +5,5 @@ kotlin.js.generate.externals=true
kotlin.incremental=true kotlin.incremental=true
kotlin.incremental.js=true kotlin.incremental.js=true
# https://github.com/google/ksp/issues/2491
ksp.useKSP2=false
library_group=dev.inmo library_group=dev.inmo
library_version=30.0.1 library_version=31.0.0

View File

@@ -1,6 +1,6 @@
[versions] [versions]
kotlin = "2.2.20" kotlin = "2.2.21"
kotlin-serialization = "1.9.0" kotlin-serialization = "1.9.0"
kotlin-coroutines = "1.10.2" kotlin-coroutines = "1.10.2"
@@ -8,13 +8,13 @@ javax-activation = "1.1.1"
korlibs = "5.4.0" korlibs = "5.4.0"
uuid = "0.8.4" uuid = "0.8.4"
ktor = "3.3.1" ktor = "3.3.2"
ksp = "2.2.20-2.0.4" ksp = "2.3.2"
kotlin-poet = "2.2.0" kotlin-poet = "2.2.0"
microutils = "0.26.6" microutils = "0.26.8"
kslog = "1.5.1" kslog = "1.5.2"
versions = "0.53.0" versions = "0.53.0"

View File

@@ -513,6 +513,7 @@ public final class dev/inmo/tgbotapi/extensions/api/chat/get/GetChatKt {
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/GroupChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/GroupChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PrivateChat;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PrivateChat;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PrivateChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PrivateChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PublicChat;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/PublicChat;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/SupergroupChat;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/SupergroupChat;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/SupergroupChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun getChat (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/SupergroupChatImpl;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;

View File

@@ -117,6 +117,17 @@ public suspend fun TelegramBot.getChat(
chat: PrivateChatImpl chat: PrivateChatImpl
): ExtendedPrivateChatImpl = getChat(chat.id) as ExtendedPrivateChatImpl ): ExtendedPrivateChatImpl = getChat(chat.id) as ExtendedPrivateChatImpl
/**
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
* [ExtendedPrivateForumChatImpl] with unsafe operator "as"
*
* @throws ClassCastException
*/
@PreviewFeature
public suspend fun TelegramBot.getChat(
chat: PrivateForumChatImpl
): ExtendedPrivateForumChatImpl = getChat(chat.id) as ExtendedPrivateForumChatImpl
/** /**
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a * Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
* [ExtendedUser] with unsafe operator "as" * [ExtendedUser] with unsafe operator "as"

View File

@@ -10654,6 +10654,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt {
public static final field yShiftField Ljava/lang/String; public static final field yShiftField Ljava/lang/String;
public static final field yearField Ljava/lang/String; public static final field yearField Ljava/lang/String;
public static final fun getAllowedConnectionsLength ()Lkotlin/ranges/IntRange; public static final fun getAllowedConnectionsLength ()Lkotlin/ranges/IntRange;
public static final fun getAllowedConnectionsWithLocalServerLength ()Lkotlin/ranges/IntRange;
public static final fun getBasketballAndFootballDiceResultLimit ()Lkotlin/ranges/IntRange; public static final fun getBasketballAndFootballDiceResultLimit ()Lkotlin/ranges/IntRange;
public static final fun getBotCommandDescriptionLimit ()Lkotlin/ranges/IntRange; public static final fun getBotCommandDescriptionLimit ()Lkotlin/ranges/IntRange;
public static final fun getBotCommandLengthLimit ()Lkotlin/ranges/IntRange; public static final fun getBotCommandLengthLimit ()Lkotlin/ranges/IntRange;
@@ -17199,7 +17200,7 @@ public final class dev/inmo/tgbotapi/types/chat/ExtendedChatWithUsername$Default
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/ExtendedChatWithUsername;)Z public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/ExtendedChatWithUsername;)Z
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedForumChat : dev/inmo/tgbotapi/types/chat/ExtendedSupergroupChat, dev/inmo/tgbotapi/types/chat/ForumChat { public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedForumChat : dev/inmo/tgbotapi/types/chat/ExtendedSupergroupChat, dev/inmo/tgbotapi/types/chat/SupergroupForumChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/ExtendedForumChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/ExtendedForumChat$Companion;
} }
@@ -17394,7 +17395,7 @@ public final class dev/inmo/tgbotapi/types/chat/ExtendedNonBotChat$DefaultImpls
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/ExtendedNonBotChat;)Z public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/ExtendedNonBotChat;)Z
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedPrivateChat : dev/inmo/tgbotapi/types/chat/ExtendedChatWithUsername, dev/inmo/tgbotapi/types/chat/ExtendedNonBotChat, dev/inmo/tgbotapi/types/chat/PrivateChat { public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedPrivateChat : dev/inmo/tgbotapi/types/chat/ExtendedChatWithUsername, dev/inmo/tgbotapi/types/chat/ExtendedNonBotChat, dev/inmo/tgbotapi/types/chat/PrivateUserChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateChat$Companion;
public fun getAllowCreateUserIdLink ()Z public fun getAllowCreateUserIdLink ()Z
public abstract fun getBio ()Ljava/lang/String; public abstract fun getBio ()Ljava/lang/String;
@@ -17491,6 +17492,94 @@ public final class dev/inmo/tgbotapi/types/chat/ExtendedPrivateChatImpl$Companio
public final fun serializer ()Lkotlinx/serialization/KSerializer; public final fun serializer ()Lkotlinx/serialization/KSerializer;
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat : dev/inmo/tgbotapi/types/chat/ExtendedPrivateChat, dev/inmo/tgbotapi/types/chat/PrivateForumChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat$Companion;
}
public final class dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat$DefaultImpls {
public static fun getAllowCreateUserIdLink (Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat;)Z
public static fun getCanReceiveGifts (Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat;)Z
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat;)Z
}
public final class dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl : dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl$Companion;
public synthetic fun <init> (JLdev/inmo/tgbotapi/types/ChatPhoto;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ldev/inmo/tgbotapi/types/TelegramDate;ILdev/inmo/tgbotapi/types/colors/ColorId;Ljava/lang/String;Ljava/lang/String;Ldev/inmo/tgbotapi/types/business_connection/BusinessIntro;Ldev/inmo/tgbotapi/types/business_connection/BusinessLocation;Ldev/inmo/tgbotapi/types/business_connection/BusinessOpeningHours;Ldev/inmo/tgbotapi/types/Birthdate;Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat;ILdev/inmo/tgbotapi/types/gifts/AcceptedGiftTypes;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (JLdev/inmo/tgbotapi/types/ChatPhoto;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ldev/inmo/tgbotapi/types/TelegramDate;ILdev/inmo/tgbotapi/types/colors/ColorId;Ljava/lang/String;Ljava/lang/String;Ldev/inmo/tgbotapi/types/business_connection/BusinessIntro;Ldev/inmo/tgbotapi/types/business_connection/BusinessLocation;Ldev/inmo/tgbotapi/types/business_connection/BusinessOpeningHours;Ldev/inmo/tgbotapi/types/Birthdate;Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat;ILdev/inmo/tgbotapi/types/gifts/AcceptedGiftTypes;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1-tHkBKVM ()J
public final fun component10-GbmMWyQ ()Ljava/lang/String;
public final fun component11 ()Ldev/inmo/tgbotapi/types/TelegramDate;
public final fun component12-f3WtEc0 ()I
public final fun component13-mg_h9nU ()Ldev/inmo/tgbotapi/types/colors/ColorId;
public final fun component14-GbmMWyQ ()Ljava/lang/String;
public final fun component15-GbmMWyQ ()Ljava/lang/String;
public final fun component16 ()Ldev/inmo/tgbotapi/types/business_connection/BusinessIntro;
public final fun component17 ()Ldev/inmo/tgbotapi/types/business_connection/BusinessLocation;
public final fun component18 ()Ldev/inmo/tgbotapi/types/business_connection/BusinessOpeningHours;
public final fun component19 ()Ldev/inmo/tgbotapi/types/Birthdate;
public final fun component2 ()Ldev/inmo/tgbotapi/types/ChatPhoto;
public final fun component20 ()Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat;
public final fun component21 ()I
public final fun component22 ()Ldev/inmo/tgbotapi/types/gifts/AcceptedGiftTypes;
public final fun component3-san03mo ()Ljava/lang/String;
public final fun component4 ()Ljava/util/List;
public final fun component5 ()Ljava/lang/String;
public final fun component6 ()Ljava/lang/String;
public final fun component7 ()Ljava/lang/String;
public final fun component8 ()Z
public final fun component9 ()Z
public final fun copy-5RSODus (JLdev/inmo/tgbotapi/types/ChatPhoto;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ldev/inmo/tgbotapi/types/TelegramDate;ILdev/inmo/tgbotapi/types/colors/ColorId;Ljava/lang/String;Ljava/lang/String;Ldev/inmo/tgbotapi/types/business_connection/BusinessIntro;Ldev/inmo/tgbotapi/types/business_connection/BusinessLocation;Ldev/inmo/tgbotapi/types/business_connection/BusinessOpeningHours;Ldev/inmo/tgbotapi/types/Birthdate;Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat;ILdev/inmo/tgbotapi/types/gifts/AcceptedGiftTypes;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl;
public static synthetic fun copy-5RSODus$default (Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl;JLdev/inmo/tgbotapi/types/ChatPhoto;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ldev/inmo/tgbotapi/types/TelegramDate;ILdev/inmo/tgbotapi/types/colors/ColorId;Ljava/lang/String;Ljava/lang/String;Ldev/inmo/tgbotapi/types/business_connection/BusinessIntro;Ldev/inmo/tgbotapi/types/business_connection/BusinessLocation;Ldev/inmo/tgbotapi/types/business_connection/BusinessOpeningHours;Ldev/inmo/tgbotapi/types/Birthdate;Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat;ILdev/inmo/tgbotapi/types/gifts/AcceptedGiftTypes;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl;
public fun equals (Ljava/lang/Object;)Z
public fun getAccentColorId-f3WtEc0 ()I
public fun getAcceptedGiftTypes ()Ldev/inmo/tgbotapi/types/gifts/AcceptedGiftTypes;
public fun getActiveUsernames ()Ljava/util/List;
public fun getAllowCreateUserIdLink ()Z
public fun getBackgroundCustomEmojiId-GbmMWyQ ()Ljava/lang/String;
public fun getBio ()Ljava/lang/String;
public fun getBirthdate ()Ldev/inmo/tgbotapi/types/Birthdate;
public fun getBusinessIntro ()Ldev/inmo/tgbotapi/types/business_connection/BusinessIntro;
public fun getBusinessLocation ()Ldev/inmo/tgbotapi/types/business_connection/BusinessLocation;
public fun getBusinessOpeningHours ()Ldev/inmo/tgbotapi/types/business_connection/BusinessOpeningHours;
public fun getCanReceiveGifts ()Z
public fun getChatPhoto ()Ldev/inmo/tgbotapi/types/ChatPhoto;
public fun getFirstName ()Ljava/lang/String;
public fun getHasPrivateForwards ()Z
public fun getHasRestrictedVoiceAndVideoMessages ()Z
public synthetic fun getId ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;
public fun getId-tHkBKVM ()J
public fun getLastName ()Ljava/lang/String;
public fun getMaxReactionsCount ()I
public fun getPersonalChat ()Ldev/inmo/tgbotapi/types/chat/PreviewChannelChat;
public fun getProfileAccentColorId-mg_h9nU ()Ldev/inmo/tgbotapi/types/colors/ColorId;
public fun getProfileBackgroundCustomEmojiId-GbmMWyQ ()Ljava/lang/String;
public fun getStatusEmojiExpiration ()Ldev/inmo/tgbotapi/types/TelegramDate;
public fun getStatusEmojiId-GbmMWyQ ()Ljava/lang/String;
public fun getUsername-san03mo ()Ljava/lang/String;
public fun hashCode ()I
public fun isDirectMessages ()Z
public fun toString ()Ljava/lang/String;
}
public final synthetic class dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChatImpl$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedPublicChat : dev/inmo/tgbotapi/types/chat/ExtendedChat, dev/inmo/tgbotapi/types/chat/ExtendedNonBotChat, dev/inmo/tgbotapi/types/chat/PublicChat { public abstract interface class dev/inmo/tgbotapi/types/chat/ExtendedPublicChat : dev/inmo/tgbotapi/types/chat/ExtendedChat, dev/inmo/tgbotapi/types/chat/ExtendedNonBotChat, dev/inmo/tgbotapi/types/chat/PublicChat {
public abstract fun getAvailableReactions ()Ljava/util/List; public abstract fun getAvailableReactions ()Ljava/util/List;
public abstract fun getDescription ()Ljava/lang/String; public abstract fun getDescription ()Ljava/lang/String;
@@ -17617,7 +17706,7 @@ public final class dev/inmo/tgbotapi/types/chat/ExtendedSupergroupChatImpl$Compa
public final fun serializer ()Lkotlinx/serialization/KSerializer; public final fun serializer ()Lkotlinx/serialization/KSerializer;
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/ForumChat : dev/inmo/tgbotapi/types/chat/SupergroupChat { public abstract interface class dev/inmo/tgbotapi/types/chat/ForumChat : dev/inmo/tgbotapi/types/chat/Chat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/ForumChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/ForumChat$Companion;
} }
@@ -17718,7 +17807,7 @@ public final class dev/inmo/tgbotapi/types/chat/PossiblyPremiumChat$DefaultImpls
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PossiblyPremiumChat;)Z public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PossiblyPremiumChat;)Z
} }
public abstract class dev/inmo/tgbotapi/types/chat/PreviewBot : dev/inmo/tgbotapi/types/chat/PreviewUser { public abstract class dev/inmo/tgbotapi/types/chat/PreviewBot : dev/inmo/tgbotapi/types/chat/User, dev/inmo/tgbotapi/types/chat/PreviewChat, dev/inmo/tgbotapi/types/chat/PrivateChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewBot$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewBot$Companion;
} }
@@ -17783,7 +17872,7 @@ public final class dev/inmo/tgbotapi/types/chat/PreviewChatSerializer : kotlinx/
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewForumChat : dev/inmo/tgbotapi/types/chat/ForumChat, dev/inmo/tgbotapi/types/chat/PreviewSupergroupChat { public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewForumChat : dev/inmo/tgbotapi/types/chat/PreviewSupergroupChat, dev/inmo/tgbotapi/types/chat/SupergroupForumChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewForumChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewForumChat$Companion;
} }
@@ -17807,7 +17896,7 @@ public final class dev/inmo/tgbotapi/types/chat/PreviewGroupChat$DefaultImpls {
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PreviewGroupChat;)Z public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PreviewGroupChat;)Z
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewPrivateChat : dev/inmo/tgbotapi/types/chat/PreviewUsernameChat, dev/inmo/tgbotapi/types/chat/PrivateChat { public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewPrivateChat : dev/inmo/tgbotapi/types/chat/PreviewUsernameChat, dev/inmo/tgbotapi/types/chat/PrivateUserChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat$Companion;
} }
@@ -17819,6 +17908,18 @@ public final class dev/inmo/tgbotapi/types/chat/PreviewPrivateChat$DefaultImpls
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat;)Z public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat;)Z
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat : dev/inmo/tgbotapi/types/chat/PreviewPrivateChat, dev/inmo/tgbotapi/types/chat/PrivateForumChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat$Companion;
}
public final class dev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat$DefaultImpls {
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat;)Z
}
public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewPublicChat : dev/inmo/tgbotapi/types/chat/PreviewChat, dev/inmo/tgbotapi/types/chat/PublicChat { public abstract interface class dev/inmo/tgbotapi/types/chat/PreviewPublicChat : dev/inmo/tgbotapi/types/chat/PreviewChat, dev/inmo/tgbotapi/types/chat/PublicChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewPublicChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/PreviewPublicChat$Companion;
} }
@@ -17926,6 +18027,66 @@ public final class dev/inmo/tgbotapi/types/chat/PrivateChatImpl$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer; public final fun serializer ()Lkotlinx/serialization/KSerializer;
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/PrivateForumChat : dev/inmo/tgbotapi/types/chat/ForumChat, dev/inmo/tgbotapi/types/chat/PrivateUserChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PrivateForumChat$Companion;
}
public final class dev/inmo/tgbotapi/types/chat/PrivateForumChat$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/PrivateForumChat$DefaultImpls {
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PrivateForumChat;)Z
}
public final class dev/inmo/tgbotapi/types/chat/PrivateForumChatImpl : dev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl$Companion;
public synthetic fun <init> (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1-tHkBKVM ()J
public final fun component2-san03mo ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/String;
public final fun component4 ()Ljava/lang/String;
public final fun copy-55YrAcc (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl;
public static synthetic fun copy-55YrAcc$default (Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl;JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl;
public fun equals (Ljava/lang/Object;)Z
public fun getFirstName ()Ljava/lang/String;
public synthetic fun getId ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;
public fun getId-tHkBKVM ()J
public fun getLastName ()Ljava/lang/String;
public fun getUsername-san03mo ()Ljava/lang/String;
public fun hashCode ()I
public fun isDirectMessages ()Z
public fun toString ()Ljava/lang/String;
}
public final synthetic class dev/inmo/tgbotapi/types/chat/PrivateForumChatImpl$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/chat/PrivateForumChatImpl;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/PrivateForumChatImpl$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class dev/inmo/tgbotapi/types/chat/PrivateUserChat : dev/inmo/tgbotapi/types/chat/PrivateChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PrivateUserChat$Companion;
}
public final class dev/inmo/tgbotapi/types/chat/PrivateUserChat$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/PrivateUserChat$DefaultImpls {
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/PrivateUserChat;)Z
}
public abstract interface class dev/inmo/tgbotapi/types/chat/PublicChat : dev/inmo/tgbotapi/types/chat/Chat { public abstract interface class dev/inmo/tgbotapi/types/chat/PublicChat : dev/inmo/tgbotapi/types/chat/Chat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/PublicChat$Companion; public static final field Companion Ldev/inmo/tgbotapi/types/chat/PublicChat$Companion;
public abstract fun getTitle ()Ljava/lang/String; public abstract fun getTitle ()Ljava/lang/String;
@@ -17997,6 +18158,18 @@ public final class dev/inmo/tgbotapi/types/chat/SupergroupChatImpl$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer; public final fun serializer ()Lkotlinx/serialization/KSerializer;
} }
public abstract interface class dev/inmo/tgbotapi/types/chat/SupergroupForumChat : dev/inmo/tgbotapi/types/chat/ForumChat, dev/inmo/tgbotapi/types/chat/SupergroupChat {
public static final field Companion Ldev/inmo/tgbotapi/types/chat/SupergroupForumChat$Companion;
}
public final class dev/inmo/tgbotapi/types/chat/SupergroupForumChat$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/chat/SupergroupForumChat$DefaultImpls {
public static fun isDirectMessages (Ldev/inmo/tgbotapi/types/chat/SupergroupForumChat;)Z
}
public final class dev/inmo/tgbotapi/types/chat/UnknownChatType : dev/inmo/tgbotapi/types/chat/Chat, dev/inmo/tgbotapi/types/chat/PreviewChat { public final class dev/inmo/tgbotapi/types/chat/UnknownChatType : dev/inmo/tgbotapi/types/chat/Chat, dev/inmo/tgbotapi/types/chat/PreviewChat {
public fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)V public fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)V
public final fun component1 ()Ldev/inmo/tgbotapi/types/IdChatIdentifier; public final fun component1 ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;

View File

@@ -37,6 +37,8 @@ data class ForwardMessage(
val disableNotification: Boolean = false, val disableNotification: Boolean = false,
@SerialName(protectContentField) @SerialName(protectContentField)
override val protectContent: Boolean = false, override val protectContent: Boolean = false,
@SerialName(messageEffectIdField)
val effectId: EffectId? = null,
@SerialName(suggestedPostParametersField) @SerialName(suggestedPostParametersField)
override val suggestedPostParameters: SuggestedPostParameters? = null override val suggestedPostParameters: SuggestedPostParameters? = null
): SimpleRequest<PossiblyForwardedMessage>, ): SimpleRequest<PossiblyForwardedMessage>,

View File

@@ -9,7 +9,10 @@ import dev.inmo.tgbotapi.types.excludeUnsavedField
import dev.inmo.tgbotapi.types.excludeSavedField import dev.inmo.tgbotapi.types.excludeSavedField
import dev.inmo.tgbotapi.types.excludeUnlimitedField import dev.inmo.tgbotapi.types.excludeUnlimitedField
import dev.inmo.tgbotapi.types.excludeLimitedField import dev.inmo.tgbotapi.types.excludeLimitedField
import dev.inmo.tgbotapi.types.excludeLimitedUpgradableField
import dev.inmo.tgbotapi.types.excludeLimitedNonUpgradableField
import dev.inmo.tgbotapi.types.excludeUniqueField import dev.inmo.tgbotapi.types.excludeUniqueField
import dev.inmo.tgbotapi.types.excludeFromBlockchainField
import dev.inmo.tgbotapi.types.sortByPriceField import dev.inmo.tgbotapi.types.sortByPriceField
import dev.inmo.tgbotapi.types.offsetField import dev.inmo.tgbotapi.types.offsetField
import dev.inmo.tgbotapi.types.limitField import dev.inmo.tgbotapi.types.limitField
@@ -29,10 +32,17 @@ data class GetBusinessAccountGifts(
val excludeSaved: Boolean = false, val excludeSaved: Boolean = false,
@SerialName(excludeUnlimitedField) @SerialName(excludeUnlimitedField)
val excludeUnlimited: Boolean = false, val excludeUnlimited: Boolean = false,
@Deprecated("Use excludeLimitedUpgradable and excludeLimitedNonUpgradable instead")
@SerialName(excludeLimitedField) @SerialName(excludeLimitedField)
val excludeLimited: Boolean = false, val excludeLimited: Boolean = false,
@SerialName(excludeLimitedUpgradableField)
val excludeLimitedUpgradable: Boolean = false,
@SerialName(excludeLimitedNonUpgradableField)
val excludeLimitedNonUpgradable: Boolean = false,
@SerialName(excludeUniqueField) @SerialName(excludeUniqueField)
val excludeUnique: Boolean = false, val excludeUnique: Boolean = false,
@SerialName(excludeFromBlockchainField)
val excludeFromBlockchain: Boolean = false,
@SerialName(sortByPriceField) @SerialName(sortByPriceField)
val sortByPrice: Boolean = false, val sortByPrice: Boolean = false,
@SerialName(offsetField) @SerialName(offsetField)

View File

@@ -0,0 +1,38 @@
package dev.inmo.tgbotapi.requests.gifts
import dev.inmo.micro_utils.common.Warning
import dev.inmo.tgbotapi.abstracts.types.ChatRequest
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.types.ChatIdentifier
import dev.inmo.tgbotapi.types.OwnedGifts
import dev.inmo.tgbotapi.types.chatIdField
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived
import dev.inmo.tgbotapi.types.limitField
import dev.inmo.tgbotapi.types.offsetField
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationStrategy
// TODO::Fix
@Serializable
data class GetChatGifts(
@SerialName(chatIdField)
override val chatId: ChatIdentifier,
@SerialName(offsetField)
val offset: String? = null,
@SerialName(limitField)
val limit: Int? = null,
) : SimpleRequest<OwnedGifts<GiftSentOrReceived>>, ChatRequest {
override fun method(): String = "getChatGifts"
override val resultDeserializer: DeserializationStrategy<OwnedGifts<GiftSentOrReceived>>
get() = Companion.resultSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
companion object {
@Warning("This API can be changed without any warranties of backward compatibility")
val resultSerializer = OwnedGifts.serializer(GiftSentOrReceived.serializer())
}
}

View File

@@ -0,0 +1,38 @@
package dev.inmo.tgbotapi.requests.gifts
import dev.inmo.micro_utils.common.Warning
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.types.OwnedGifts
import dev.inmo.tgbotapi.types.UserId
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived
import dev.inmo.tgbotapi.types.limitField
import dev.inmo.tgbotapi.types.offsetField
import dev.inmo.tgbotapi.types.userIdField
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationStrategy
// TODO::Fix
@Serializable
data class GetUserGifts(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(userIdField)
val userId: UserId,
@SerialName(offsetField)
val offset: String? = null,
@SerialName(limitField)
val limit: Int? = null,
) : SimpleRequest<OwnedGifts<GiftSentOrReceived>> {
override fun method(): String = "getUserGifts"
override val resultDeserializer: DeserializationStrategy<OwnedGifts<GiftSentOrReceived>>
get() = Companion.resultSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
companion object {
@Warning("This API can be changed without any warranties of backward compatibility")
val resultSerializer = OwnedGifts.serializer(GiftSentOrReceived.serializer())
}
}

View File

@@ -95,6 +95,7 @@ fun CopyMessage(
disableNotification: Boolean = false, disableNotification: Boolean = false,
protectContent: Boolean = false, protectContent: Boolean = false,
allowPaidBroadcast: Boolean = false, allowPaidBroadcast: Boolean = false,
effectId: EffectId? = null,
suggestedPostParameters: SuggestedPostParameters? = null, suggestedPostParameters: SuggestedPostParameters? = null,
replyParameters: ReplyParameters? = null, replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null replyMarkup: KeyboardMarkup? = null
@@ -112,6 +113,7 @@ fun CopyMessage(
disableNotification = disableNotification, disableNotification = disableNotification,
protectContent = protectContent, protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast, allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId,
suggestedPostParameters = suggestedPostParameters, suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
@@ -129,6 +131,7 @@ fun CopyMessage(
disableNotification: Boolean = false, disableNotification: Boolean = false,
protectContent: Boolean = false, protectContent: Boolean = false,
allowPaidBroadcast: Boolean = false, allowPaidBroadcast: Boolean = false,
effectId: EffectId? = null,
suggestedPostParameters: SuggestedPostParameters? = null, suggestedPostParameters: SuggestedPostParameters? = null,
replyParameters: ReplyParameters? = null, replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null replyMarkup: KeyboardMarkup? = null
@@ -146,6 +149,7 @@ fun CopyMessage(
disableNotification = disableNotification, disableNotification = disableNotification,
protectContent = protectContent, protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast, allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId,
suggestedPostParameters = suggestedPostParameters, suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
@@ -184,6 +188,8 @@ data class CopyMessage internal constructor(
override val protectContent: Boolean = false, override val protectContent: Boolean = false,
@SerialName(allowPaidBroadcastField) @SerialName(allowPaidBroadcastField)
override val allowPaidBroadcast: Boolean = false, override val allowPaidBroadcast: Boolean = false,
@SerialName(messageEffectIdField)
val effectId: EffectId? = null,
@SerialName(suggestedPostParametersField) @SerialName(suggestedPostParametersField)
override val suggestedPostParameters: SuggestedPostParameters? = null, override val suggestedPostParameters: SuggestedPostParameters? = null,
@SerialName(replyParametersField) @SerialName(replyParametersField)

View File

@@ -0,0 +1,146 @@
package dev.inmo.tgbotapi.requests.send
import dev.inmo.tgbotapi.abstracts.types.LinkPreviewOptionsContainer
import dev.inmo.tgbotapi.requests.send.abstracts.*
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
import dev.inmo.tgbotapi.types.message.ParseMode
import dev.inmo.tgbotapi.types.message.parseModeField
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
import dev.inmo.tgbotapi.types.message.*
import dev.inmo.tgbotapi.types.message.RawMessageEntity
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializationStrategyClass
import dev.inmo.tgbotapi.types.message.content.TextContent
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
import dev.inmo.tgbotapi.utils.extensions.makeString
import dev.inmo.tgbotapi.utils.throwRangeError
import kotlinx.serialization.*
internal val TextContentMessageDraftResultDeserializer: DeserializationStrategy<ContentMessage<TextContent>>
= TelegramBotAPIMessageDeserializationStrategyClass()
fun SendMessageDraft(
chatId: ChatIdentifier,
text: String,
parseMode: ParseMode? = null,
linkPreviewOptions: LinkPreviewOptions? = null,
threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
allowPaidBroadcast: Boolean = false,
effectId: EffectId? = null,
suggestedPostParameters: SuggestedPostParameters? = null,
replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null
) = SendMessageDraft(
chatId = chatId,
text = text,
parseMode = parseMode,
rawEntities = null,
threadId = threadId,
directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId,
linkPreviewOptions = linkPreviewOptions,
disableNotification = disableNotification,
protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId,
suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters,
replyMarkup = replyMarkup
)
fun SendMessageDraft(
chatId: ChatIdentifier,
entities: TextSourcesList,
linkPreviewOptions: LinkPreviewOptions? = null,
threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
allowPaidBroadcast: Boolean = false,
effectId: EffectId? = null,
suggestedPostParameters: SuggestedPostParameters? = null,
replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null
) = SendMessageDraft(
chatId = chatId,
text = entities.makeString(),
parseMode = null,
rawEntities = entities.toRawMessageEntities(),
threadId = threadId,
directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId,
linkPreviewOptions = linkPreviewOptions,
disableNotification = disableNotification,
protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId,
suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters,
replyMarkup = replyMarkup
)
@ConsistentCopyVisibility
@Serializable
data class SendMessageDraft internal constructor(
@SerialName(chatIdField)
override val chatId: ChatIdentifier,
@SerialName(textField)
override val text: String,
@SerialName(parseModeField)
override val parseMode: ParseMode? = null,
@SerialName(entitiesField)
private val rawEntities: List<RawMessageEntity>? = null,
@OptIn(ExperimentalSerializationApi::class)
@SerialName(messageThreadIdField)
@EncodeDefault
override val threadId: MessageThreadId? = chatId.threadId,
@OptIn(ExperimentalSerializationApi::class)
@EncodeDefault
@SerialName(directMessagesTopicIdField)
override val directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
@SerialName(businessConnectionIdField)
override val businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@SerialName(linkPreviewOptionsField)
override val linkPreviewOptions: LinkPreviewOptions? = null,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)
override val protectContent: Boolean = false,
@SerialName(allowPaidBroadcastField)
override val allowPaidBroadcast: Boolean = false,
@SerialName(messageEffectIdField)
override val effectId: EffectId? = null,
@SerialName(suggestedPostParametersField)
override val suggestedPostParameters: SuggestedPostParameters? = null,
@SerialName(replyParametersField)
override val replyParameters: ReplyParameters? = null,
@SerialName(replyMarkupField)
override val replyMarkup: KeyboardMarkup? = null
) : SendContentMessageRequest<ContentMessage<TextContent>>,
ReplyingMarkupSendMessageRequest<ContentMessage<TextContent>>,
TextableSendMessageRequest<ContentMessage<TextContent>>,
LinkPreviewOptionsContainer
{
override val textSources: TextSourcesList? by lazy {
rawEntities ?.asTextSources(text)
}
init {
if (text.length !in textLength) {
throwRangeError("Text length", textLength, text.length)
}
}
override fun method(): String = "sendMessageDraft"
override val resultDeserializer: DeserializationStrategy<ContentMessage<TextContent>>
get() = TextContentMessageDraftResultDeserializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -0,0 +1,31 @@
package dev.inmo.tgbotapi.requests.stories
import dev.inmo.tgbotapi.abstracts.types.WithBusinessConnectionId
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.types.StoryId
import dev.inmo.tgbotapi.types.businessConnectionIdField
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
import dev.inmo.tgbotapi.types.fromBusinessConnectionIdField
import dev.inmo.tgbotapi.types.storyIdField
import dev.inmo.tgbotapi.types.stories.Story
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationStrategy
@Serializable
data class RepostStory(
@SerialName(businessConnectionIdField)
override val businessConnectionId: BusinessConnectionId,
@SerialName(fromBusinessConnectionIdField)
val fromBusinessConnectionId: BusinessConnectionId,
@SerialName(storyIdField)
val storyId: StoryId,
) : SimpleRequest<Story>, WithBusinessConnectionId {
override fun method(): String = "repostStory"
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
override val resultDeserializer: DeserializationStrategy<Story>
get() = Story.serializer()
}

View File

@@ -1,9 +1,11 @@
package dev.inmo.tgbotapi.requests.webhook package dev.inmo.tgbotapi.requests.webhook
import dev.inmo.kslog.common.w
import dev.inmo.tgbotapi.requests.abstracts.* import dev.inmo.tgbotapi.requests.abstracts.*
import dev.inmo.tgbotapi.requests.send.media.base.DataRequest import dev.inmo.tgbotapi.requests.send.media.base.DataRequest
import dev.inmo.tgbotapi.requests.send.media.base.MultipartRequestImpl import dev.inmo.tgbotapi.requests.send.media.base.MultipartRequestImpl
import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.utils.DefaultKTgBotAPIKSLog
import kotlinx.serialization.* import kotlinx.serialization.*
import kotlinx.serialization.builtins.serializer import kotlinx.serialization.builtins.serializer
@@ -118,11 +120,22 @@ fun SetWebhook(
) )
/** /**
* Use this method to specify a url and receive incoming updates via an outgoing webhook. Whenever there is an update * Represents a request for setting a webhook in Telegram's Bot API. A webhook allows Telegram to send updates directly
* for the bot, we will send an HTTPS POST request to the specified url, containing a JSON-serialized Update. * to the bot via an HTTPS POST request to the provided URL, enabling real-time interaction.
* *
* If you'd like to make sure that the Webhook request comes from Telegram, we recommend using a secret path in the [url], * @constructor Creates a data class holding configuration options for the webhook.
* e.g. https://www.example.com/<token>. Since nobody else knows your bot's token, you can be pretty sure it's us. *
* @property url The HTTPS URL to which updates will be posted. Must be valid and accessible.
* @property certificateFile An optional path to a public certificate file for webhook verification. Use only if a self-signed certificate is applied.
* @property ipAddress The fixed IP address for incoming webhook connections.
* @property maxAllowedConnections The maximum number of simultaneous HTTPS connections allowed to the webhook for
* delivering updates. You may use value outside of [allowedConnectionsLength], but be sure that it is in
* [allowedConnectionsWithLocalServerLength] and you are using local bot api url
* @property allowedUpdates A list of update types the bot will receive. Defaults to all update types.
* @property dropPendingUpdates If true, all pending updates will be dropped when the webhook is changed.
* @property secretToken An optional arbitrary secret key to ensure the webhook updates are coming from Telegram.
*
* @throws IllegalArgumentException if the provided maxAllowedConnections value is outside the permitted range (both [allowedConnectionsLength] and [allowedConnectionsWithLocalServerLength])
*/ */
@ConsistentCopyVisibility @ConsistentCopyVisibility
@Serializable @Serializable
@@ -150,8 +163,19 @@ data class SetWebhook internal constructor(
init { init {
maxAllowedConnections ?.let { maxAllowedConnections ?.let {
if (it !in allowedConnectionsLength) { when {
throw IllegalArgumentException("Allowed connection for webhook must be in $allowedConnectionsLength range (but passed $it)") it !in allowedConnectionsLength && it in allowedConnectionsWithLocalServerLength -> {
DefaultKTgBotAPIKSLog.w {
"""
Passed amount of allowed connections to server is $it and it exceeds default amount of
connections $allowedConnectionsLength, but can be used with local bot api server. Make sure
you are using local bot api url in your bot.
""".trimIndent()
}
}
it !in allowedConnectionsLength -> {
throw IllegalArgumentException("Allowed connection for webhook must be in $allowedConnectionsLength range (but passed $it)")
}
} }
} }
} }

View File

@@ -64,6 +64,7 @@ val threadNameLength = 1 until 128
val chatDescriptionLength = 0 until 256 val chatDescriptionLength = 0 until 256
val inlineResultQueryIdLingth = 1 until 64 val inlineResultQueryIdLingth = 1 until 64
val allowedConnectionsLength = 1 .. 100 val allowedConnectionsLength = 1 .. 100
val allowedConnectionsWithLocalServerLength = 1 .. 100000
val invoiceTitleLimit = 1 until 32 val invoiceTitleLimit = 1 until 32
val invoiceDescriptionLimit = 1 until 256 val invoiceDescriptionLimit = 1 until 256
@@ -189,6 +190,7 @@ const val unrestrictBoostsCountField = "unrestrict_boost_count"
const val customEmojiStickerSetNameField = "custom_emoji_sticker_set_name" const val customEmojiStickerSetNameField = "custom_emoji_sticker_set_name"
const val iconCustomEmojiIdField = "icon_custom_emoji_id" const val iconCustomEmojiIdField = "icon_custom_emoji_id"
const val hasMainWebAppField = "has_main_web_app" const val hasMainWebAppField = "has_main_web_app"
const val hasTopicsEnabledField = "has_topics_enabled"
const val canJoinGroupsField = "can_join_groups" const val canJoinGroupsField = "can_join_groups"
const val canReadAllGroupMessagesField = "can_read_all_group_messages" const val canReadAllGroupMessagesField = "can_read_all_group_messages"
const val canReplyField = "can_reply" const val canReplyField = "can_reply"
@@ -312,8 +314,10 @@ const val createsJoinRequestField = "creates_join_request"
const val pendingJoinRequestCountField = "pending_join_request_count" const val pendingJoinRequestCountField = "pending_join_request_count"
const val memberLimitField = "member_limit" const val memberLimitField = "member_limit"
const val iconColorField = "icon_color" const val iconColorField = "icon_color"
const val isNameImplicitField = "is_name_implicit"
const val emojiListField = "emoji_list" const val emojiListField = "emoji_list"
const val completedByUserField = "completed_by_user" const val completedByUserField = "completed_by_user"
const val completedByChatField = "completed_by_chat"
const val completionDateField = "completion_date" const val completionDateField = "completion_date"
const val titleEntitiesField = "title_entities" const val titleEntitiesField = "title_entities"
const val tasksField = "tasks" const val tasksField = "tasks"
@@ -532,6 +536,7 @@ const val topicIdField = "topic_id"
const val isPublicField = "is_public" const val isPublicField = "is_public"
const val giftField = "gift" const val giftField = "gift"
const val giftUpgradeSentField = "gift_upgrade_sent"
const val giftsField = "gifts" const val giftsField = "gifts"
const val rarityPerMilleField = "rarity_per_mille" const val rarityPerMilleField = "rarity_per_mille"
const val acceptedGiftTypesField = "accepted_gift_types" const val acceptedGiftTypesField = "accepted_gift_types"
@@ -544,6 +549,8 @@ const val isDirectMessagesField = "is_direct_messages"
const val nextTransferDateField = "next_transfer_date" const val nextTransferDateField = "next_transfer_date"
const val transferStarCountField = "transfer_star_count" const val transferStarCountField = "transfer_star_count"
const val lastResaleStarCountField = "last_resale_star_count" const val lastResaleStarCountField = "last_resale_star_count"
const val lastResaleCurrencyField = "last_resale_currency"
const val lastResaleAmountField = "last_resale_amount"
const val newOwnerChatIdField = "new_owner_chat_id" const val newOwnerChatIdField = "new_owner_chat_id"
const val pointField = "point" const val pointField = "point"
@@ -648,6 +655,8 @@ const val mediaField = "media"
const val mainFrameTimestampField = "main_frame_timestamp" const val mainFrameTimestampField = "main_frame_timestamp"
const val paidMessageStarCountField = "paid_message_star_count" const val paidMessageStarCountField = "paid_message_star_count"
const val ratingField = "rating"
const val uniqueGiftColorsField = "unique_gift_colors"
const val paidStarCountField = "paid_star_count" const val paidStarCountField = "paid_star_count"
const val isPaidPostField = "is_paid_post" const val isPaidPostField = "is_paid_post"
@@ -729,31 +738,48 @@ const val upgradeStarCountField = "upgrade_star_count"
const val payToUpgradeField = "pay_for_upgrade" const val payToUpgradeField = "pay_for_upgrade"
const val paidMediaField = "paid_media" const val paidMediaField = "paid_media"
const val publisherChatField = "publisher_chat" const val publisherChatField = "publisher_chat"
const val personalTotalCountField = "personal_total_count"
const val personalRemainingCountField = "personal_remaining_count"
const val isPremiumField2 = "is_premium"
const val hasColorsField = "has_colors"
const val uniqueGiftVariantCountField = "unique_gift_variant_count"
const val uniqueGiftNumberField = "unique_gift_number"
const val isUpgradeSeparateField = "is_upgrade_separate"
const val isFromBlockchainField = "is_from_blockchain"
const val centerColorField = "center_color" const val centerColorField = "center_color"
const val edgeColorField = "edge_color" const val edgeColorField = "edge_color"
const val symbolColorField = "symbol_color" const val symbolColorField = "symbol_color"
const val textColorField = "text_color" const val textColorField = "text_color"
const val nameColorField = "name_color"
const val baseColorField = "base_color"
const val linkColorField = "link_color"
const val baseNameField = "base_name" const val baseNameField = "base_name"
const val numberField = "number" const val numberField = "number"
const val modelField = "model" const val modelField = "model"
const val symbolField = "symbol" const val symbolField = "symbol"
const val backdropField = "backdrop" const val backdropField = "backdrop"
const val backgroundField = "background"
const val unlimitedGiftsField = "unlimited_gifts" const val unlimitedGiftsField = "unlimited_gifts"
const val limitedGiftsField = "limited_gifts" const val limitedGiftsField = "limited_gifts"
const val uniqueGiftsField = "unique_gifts" const val uniqueGiftsField = "unique_gifts"
const val premiumSubscriptionField = "premium_subscription" const val premiumSubscriptionField = "premium_subscription"
const val giftsFromChannelsField = "gifts_from_channels"
const val excludeUnsavedField = "exclude_unsaved" const val excludeUnsavedField = "exclude_unsaved"
const val excludeSavedField = "exclude_saved" const val excludeSavedField = "exclude_saved"
const val excludeUnlimitedField = "exclude_unlimited" const val excludeUnlimitedField = "exclude_unlimited"
const val excludeLimitedField = "exclude_limited" const val excludeLimitedField = "exclude_limited"
const val excludeLimitedUpgradableField = "exclude_limited_upgradable"
const val excludeLimitedNonUpgradableField = "exclude_limited_non_upgradable"
const val excludeUniqueField = "exclude_unique" const val excludeUniqueField = "exclude_unique"
const val excludeFromBlockchainField = "exclude_from_blockchain"
const val sortByPriceField = "sort_by_price" const val sortByPriceField = "sort_by_price"
const val businessConnectionIdField = "business_connection_id" const val businessConnectionIdField = "business_connection_id"
const val fromBusinessConnectionIdField = "from_business_connection_id"
const val businessIntroField = "business_intro" const val businessIntroField = "business_intro"
const val businessLocationField = "business_location" const val businessLocationField = "business_location"
const val businessOpeningHoursField = "business_opening_hours" const val businessOpeningHoursField = "business_opening_hours"

View File

@@ -13,7 +13,9 @@ data class ForumTopic(
@SerialName(iconColorField) @SerialName(iconColorField)
val color: RGBColor, val color: RGBColor,
@SerialName(iconCustomEmojiIdField) @SerialName(iconCustomEmojiIdField)
val iconEmojiId: CustomEmojiId? = null val iconEmojiId: CustomEmojiId? = null,
@SerialName(isNameImplicitField)
val isNameImplicit: Boolean = false
) { ) {
companion object { companion object {
val CYAN = RGBColor(0x6FB9F0) val CYAN = RGBColor(0x6FB9F0)

View File

@@ -18,6 +18,15 @@ sealed interface PrivateChat : Chat, UsernameChat {
val lastName: String val lastName: String
} }
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatSerializer::class)
sealed interface PrivateUserChat : PrivateChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatSerializer::class)
sealed interface PrivateForumChat : PrivateUserChat, ForumChat {
}
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatSerializer::class) @Serializable(ChatSerializer::class)
sealed interface BusinessChat : Chat { sealed interface BusinessChat : Chat {
@@ -51,7 +60,11 @@ sealed interface SupergroupChat : GroupChat, SuperPublicChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatSerializer::class) @Serializable(ChatSerializer::class)
sealed interface ForumChat : SupergroupChat sealed interface ForumChat : Chat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatSerializer::class)
sealed interface SupergroupForumChat : SupergroupChat, ForumChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatSerializer::class) @Serializable(ChatSerializer::class)

View File

@@ -81,8 +81,16 @@ object ChatSerializer : KSerializer<Chat> {
val original = decodedJson[originField] val original = decodedJson[originField]
when (type) { when (type) {
ChatType.Sender -> formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson) ChatType.Sender -> if (isForum) {
ChatType.Private -> formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson) formatter.decodeFromJsonElement(PrivateForumChatImpl.serializer(), decodedJson)
} else {
formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson)
}
ChatType.Private -> if (isForum) {
formatter.decodeFromJsonElement(PrivateForumChatImpl.serializer(), decodedJson)
} else {
formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson)
}
ChatType.Group -> formatter.decodeFromJsonElement(GroupChatImpl.serializer(), decodedJson) ChatType.Group -> formatter.decodeFromJsonElement(GroupChatImpl.serializer(), decodedJson)
ChatType.Supergroup -> when { ChatType.Supergroup -> when {
isForum -> formatter.decodeFromJsonElement(ForumChatImpl.serializer(), decodedJson) isForum -> formatter.decodeFromJsonElement(ForumChatImpl.serializer(), decodedJson)
@@ -128,8 +136,16 @@ object PreviewChatSerializer : KSerializer<PreviewChat> {
val original = decodedJson[originField] val original = decodedJson[originField]
return when (type) { return when (type) {
ChatType.Sender -> formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson) ChatType.Sender -> if (isForum) {
ChatType.Private -> formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson) formatter.decodeFromJsonElement(PrivateForumChatImpl.serializer(), decodedJson)
} else {
formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson)
}
ChatType.Private -> if (isForum) {
formatter.decodeFromJsonElement(PrivateForumChatImpl.serializer(), decodedJson)
} else {
formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson)
}
ChatType.Group -> formatter.decodeFromJsonElement(GroupChatImpl.serializer(), decodedJson) ChatType.Group -> formatter.decodeFromJsonElement(GroupChatImpl.serializer(), decodedJson)
ChatType.Supergroup -> { ChatType.Supergroup -> {
when { when {
@@ -156,6 +172,7 @@ object PreviewChatSerializer : KSerializer<PreviewChat> {
override fun serialize(encoder: Encoder, value: PreviewChat) { override fun serialize(encoder: Encoder, value: PreviewChat) {
when (value) { when (value) {
is PrivateChatImpl -> PrivateChatImpl.serializer().serialize(encoder, value) is PrivateChatImpl -> PrivateChatImpl.serializer().serialize(encoder, value)
is PrivateForumChatImpl -> PrivateForumChatImpl.serializer().serialize(encoder, value)
is BusinessChatImpl -> BusinessChatImpl.serializer().serialize(encoder, value) is BusinessChatImpl -> BusinessChatImpl.serializer().serialize(encoder, value)
is GroupChatImpl -> GroupChatImpl.serializer().serialize(encoder, value) is GroupChatImpl -> GroupChatImpl.serializer().serialize(encoder, value)
is SupergroupChatImpl -> SupergroupChatImpl.serializer().serialize(encoder, value) is SupergroupChatImpl -> SupergroupChatImpl.serializer().serialize(encoder, value)
@@ -183,8 +200,16 @@ sealed class ExtendedChatSerializer : KSerializer<ExtendedChat> {
val original = decodedJson[originField] val original = decodedJson[originField]
return when (type) { return when (type) {
ChatType.Sender -> formatter.decodeFromJsonElement(ExtendedPrivateChatImpl.serializer(), decodedJson) ChatType.Sender -> if (isForum) {
ChatType.Private -> formatter.decodeFromJsonElement(ExtendedPrivateChatImpl.serializer(), decodedJson) formatter.decodeFromJsonElement(ExtendedPrivateForumChatImpl.serializer(), decodedJson)
} else {
formatter.decodeFromJsonElement(ExtendedPrivateChatImpl.serializer(), decodedJson)
}
ChatType.Private -> if (isForum) {
formatter.decodeFromJsonElement(ExtendedPrivateForumChatImpl.serializer(), decodedJson)
} else {
formatter.decodeFromJsonElement(ExtendedPrivateChatImpl.serializer(), decodedJson)
}
ChatType.Group -> formatter.decodeFromJsonElement(ExtendedGroupChatImpl.serializer(), decodedJson) ChatType.Group -> formatter.decodeFromJsonElement(ExtendedGroupChatImpl.serializer(), decodedJson)
ChatType.Supergroup -> { ChatType.Supergroup -> {
when { when {
@@ -212,6 +237,7 @@ sealed class ExtendedChatSerializer : KSerializer<ExtendedChat> {
when (value) { when (value) {
is ExtendedBusinessChatImpl -> ExtendedBusinessChatImpl.serializer().serialize(encoder, value) is ExtendedBusinessChatImpl -> ExtendedBusinessChatImpl.serializer().serialize(encoder, value)
is ExtendedPrivateChatImpl -> ExtendedPrivateChatImpl.serializer().serialize(encoder, value) is ExtendedPrivateChatImpl -> ExtendedPrivateChatImpl.serializer().serialize(encoder, value)
is ExtendedPrivateForumChatImpl -> ExtendedPrivateForumChatImpl.serializer().serialize(encoder, value)
is ExtendedGroupChatImpl -> ExtendedGroupChatImpl.serializer().serialize(encoder, value) is ExtendedGroupChatImpl -> ExtendedGroupChatImpl.serializer().serialize(encoder, value)
is ExtendedSupergroupChatImpl -> ExtendedSupergroupChatImpl.serializer().serialize(encoder, value) is ExtendedSupergroupChatImpl -> ExtendedSupergroupChatImpl.serializer().serialize(encoder, value)
is ExtendedForumChatImpl -> ExtendedForumChatImpl.serializer().serialize(encoder, value) is ExtendedForumChatImpl -> ExtendedForumChatImpl.serializer().serialize(encoder, value)
@@ -238,7 +264,7 @@ sealed class ExtendedChatSerializer : KSerializer<ExtendedChat> {
class BasedOnBusinessConnection(private val businessConnectionId: BusinessConnectionId) : ExtendedChatSerializer() { class BasedOnBusinessConnection(private val businessConnectionId: BusinessConnectionId) : ExtendedChatSerializer() {
override fun deserialize(decoder: Decoder): ExtendedChat { override fun deserialize(decoder: Decoder): ExtendedChat {
return super.deserialize(decoder).let { return super.deserialize(decoder).let {
if (it is ExtendedPrivateChatImpl) { if (it is ExtendedPrivateChatImpl || it is ExtendedPrivateForumChatImpl) {
ExtendedBusinessChatImpl( ExtendedBusinessChatImpl(
BusinessChatId(it.id.chatId, businessConnectionId), BusinessChatId(it.id.chatId, businessConnectionId),
it it

View File

@@ -6,6 +6,7 @@ import dev.inmo.tgbotapi.types.business_connection.BusinessLocation
import dev.inmo.tgbotapi.types.business_connection.BusinessOpeningHours import dev.inmo.tgbotapi.types.business_connection.BusinessOpeningHours
import dev.inmo.tgbotapi.types.colors.ColorId import dev.inmo.tgbotapi.types.colors.ColorId
import dev.inmo.tgbotapi.types.gifts.AcceptedGiftTypes import dev.inmo.tgbotapi.types.gifts.AcceptedGiftTypes
import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftColors
import dev.inmo.tgbotapi.types.message.abstracts.Message import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
import dev.inmo.tgbotapi.types.reactions.Reaction import dev.inmo.tgbotapi.types.reactions.Reaction
@@ -65,7 +66,13 @@ data class ExtendedChannelChatImpl(
@SerialName(hasVisibleHistoryField) @SerialName(hasVisibleHistoryField)
override val newMembersSeeHistory: Boolean = false, override val newMembersSeeHistory: Boolean = false,
@SerialName(maxReactionCountField) @SerialName(maxReactionCountField)
override val maxReactionsCount: Int = 3 override val maxReactionsCount: Int = 3,
@SerialName(ratingField)
override val rating: UserRating? = null,
@SerialName(paidMessageStarCountField)
override val paidMessageStarCount: Int? = null,
@SerialName(uniqueGiftColorsField)
override val uniqueGiftColors: UniqueGiftColors? = null
) : ExtendedChannelChat ) : ExtendedChannelChat
@Serializable @Serializable
@@ -109,6 +116,12 @@ data class ExtendedGroupChatImpl(
override val maxReactionsCount: Int = 3, override val maxReactionsCount: Int = 3,
@SerialName(acceptedGiftTypesField) @SerialName(acceptedGiftTypesField)
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(), override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
@SerialName(ratingField)
override val rating: UserRating? = null,
@SerialName(paidMessageStarCountField)
override val paidMessageStarCount: Int? = null,
@SerialName(uniqueGiftColorsField)
override val uniqueGiftColors: UniqueGiftColors? = null
) : ExtendedGroupChat ) : ExtendedGroupChat
@Serializable @Serializable
@@ -165,7 +178,61 @@ data class ExtendedPrivateChatImpl(
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(), override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
) : ExtendedPrivateChat ) : ExtendedPrivateChat
typealias ExtendedUser = ExtendedPrivateChatImpl @Serializable
@RiskFeature("This class is a subject of changes. It is better to use ExtendedPrivateChat due")
data class ExtendedPrivateForumChatImpl(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(idField)
override val id: UserId,
@SerialName(photoField)
override val chatPhoto: ChatPhoto? = null,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(usernameField)
override val username: Username? = null,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(activeUsernamesField)
override val activeUsernames: List<Username> = emptyList(),
@SerialName(firstNameField)
override val firstName: String = "",
@SerialName(lastNameField)
override val lastName: String = "",
@SerialName(bioField)
override val bio: String = "",
@SerialName(hasPrivateForwardsField)
override val hasPrivateForwards: Boolean = false,
@SerialName(hasRestrictedVoiceAndVideoMessagesField)
override val hasRestrictedVoiceAndVideoMessages: Boolean = false,
@SerialName(emojiStatusCustomEmojiIdField)
override val statusEmojiId: CustomEmojiId? = null,
@SerialName(emojiStatusExpirationDateField)
override val statusEmojiExpiration: TelegramDate? = null,
@SerialName(accentColorIdField)
override val accentColorId: ColorId = ColorId(0),
@SerialName(profileAccentColorIdField)
override val profileAccentColorId: ColorId? = null,
@SerialName(backgroundCustomEmojiIdField)
override val backgroundCustomEmojiId: CustomEmojiId? = null,
@SerialName(profileBackgroundCustomEmojiIdField)
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null,
@SerialName(businessIntroField)
override val businessIntro: BusinessIntro? = null,
@SerialName(businessLocationField)
override val businessLocation: BusinessLocation? = null,
@SerialName(businessOpeningHoursField)
override val businessOpeningHours: BusinessOpeningHours? = null,
@SerialName(birthdateField)
override val birthdate: Birthdate? = null,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(personalChatField)
@Serializable(PreviewChatSerializer::class)
override val personalChat: PreviewChannelChat? = null,
@SerialName(maxReactionCountField)
override val maxReactionsCount: Int = 3,
@SerialName(acceptedGiftTypesField)
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
) : ExtendedPrivateForumChat
typealias ExtendedUser = ExtendedPrivateChat
@Serializable @Serializable
@RiskFeature("This class is a subject of changes. It is better to use ExtendedSupergroupChat due") @RiskFeature("This class is a subject of changes. It is better to use ExtendedSupergroupChat due")
@@ -235,6 +302,12 @@ data class ExtendedSupergroupChatImpl(
override val maxReactionsCount: Int = 3, override val maxReactionsCount: Int = 3,
@SerialName(acceptedGiftTypesField) @SerialName(acceptedGiftTypesField)
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(), override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
@SerialName(ratingField)
override val rating: UserRating? = null,
@SerialName(paidMessageStarCountField)
override val paidMessageStarCount: Int? = null,
@SerialName(uniqueGiftColorsField)
override val uniqueGiftColors: UniqueGiftColors? = null
) : ExtendedSupergroupChat ) : ExtendedSupergroupChat
@Serializable @Serializable
@@ -305,6 +378,12 @@ data class ExtendedForumChatImpl(
override val maxReactionsCount: Int = 3, override val maxReactionsCount: Int = 3,
@SerialName(acceptedGiftTypesField) @SerialName(acceptedGiftTypesField)
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(), override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
@SerialName(ratingField)
override val rating: UserRating? = null,
@SerialName(paidMessageStarCountField)
override val paidMessageStarCount: Int? = null,
@SerialName(uniqueGiftColorsField)
override val uniqueGiftColors: UniqueGiftColors? = null
) : ExtendedForumChat ) : ExtendedForumChat
@Serializable @Serializable
@@ -378,6 +457,12 @@ data class ExtendedChannelDirectMessagesChatImpl(
override val maxReactionsCount: Int = 3, override val maxReactionsCount: Int = 3,
@SerialName(acceptedGiftTypesField) @SerialName(acceptedGiftTypesField)
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(), override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
@SerialName(ratingField)
override val rating: UserRating? = null,
@SerialName(paidMessageStarCountField)
override val paidMessageStarCount: Int? = null,
@SerialName(uniqueGiftColorsField)
override val uniqueGiftColors: UniqueGiftColors? = null
) : ExtendedChannelDirectMessagesChat { ) : ExtendedChannelDirectMessagesChat {
@OptIn(ExperimentalSerializationApi::class) @OptIn(ExperimentalSerializationApi::class)
@SerialName(isDirectMessagesField) @SerialName(isDirectMessagesField)
@@ -419,6 +504,8 @@ data class ExtendedBot(
override val maxReactionsCount: Int = 3, override val maxReactionsCount: Int = 3,
@SerialName(hasMainWebAppField) @SerialName(hasMainWebAppField)
val hasMainWebApp: Boolean = false, val hasMainWebApp: Boolean = false,
@SerialName(hasTopicsEnabledField)
val hasTopicsEnabled: Boolean = false,
@SerialName(acceptedGiftTypesField) @SerialName(acceptedGiftTypesField)
override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(), override val acceptedGiftTypes: AcceptedGiftTypes = AcceptedGiftTypes(),
) : Bot(), ExtendedChat { ) : Bot(), ExtendedChat {

View File

@@ -6,6 +6,7 @@ import dev.inmo.tgbotapi.types.business_connection.BusinessLocation
import dev.inmo.tgbotapi.types.business_connection.BusinessOpeningHours import dev.inmo.tgbotapi.types.business_connection.BusinessOpeningHours
import dev.inmo.tgbotapi.types.colors.ColorId import dev.inmo.tgbotapi.types.colors.ColorId
import dev.inmo.tgbotapi.types.gifts.AcceptedGiftTypes import dev.inmo.tgbotapi.types.gifts.AcceptedGiftTypes
import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftColors
import dev.inmo.tgbotapi.types.message.abstracts.Message import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
import dev.inmo.tgbotapi.types.reactions.Reaction import dev.inmo.tgbotapi.types.reactions.Reaction
@@ -56,7 +57,7 @@ sealed interface ExtendedGroupChat : GroupChat, ExtendedPublicChat {
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ExtendedChatSerializer.Companion::class) @Serializable(ExtendedChatSerializer.Companion::class)
sealed interface ExtendedPrivateChat : PrivateChat, ExtendedChatWithUsername, ExtendedNonBotChat { sealed interface ExtendedPrivateChat : PrivateUserChat, ExtendedChatWithUsername, ExtendedNonBotChat {
val bio: String val bio: String
val hasPrivateForwards: Boolean val hasPrivateForwards: Boolean
val hasRestrictedVoiceAndVideoMessages: Boolean val hasRestrictedVoiceAndVideoMessages: Boolean
@@ -72,6 +73,10 @@ sealed interface ExtendedPrivateChat : PrivateChat, ExtendedChatWithUsername, Ex
get() = hasPrivateForwards get() = hasPrivateForwards
} }
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ExtendedChatSerializer.Companion::class)
sealed interface ExtendedPrivateForumChat : ExtendedPrivateChat, PrivateForumChat
sealed interface ExtendedPublicChat : ExtendedChat, PublicChat, ExtendedNonBotChat { sealed interface ExtendedPublicChat : ExtendedChat, PublicChat, ExtendedNonBotChat {
val description: String val description: String
val inviteLink: String? val inviteLink: String?
@@ -81,6 +86,9 @@ sealed interface ExtendedPublicChat : ExtendedChat, PublicChat, ExtendedNonBotCh
val membersHidden: Boolean val membersHidden: Boolean
val availableReactions: List<Reaction>? val availableReactions: List<Reaction>?
val newMembersSeeHistory: Boolean val newMembersSeeHistory: Boolean
val rating: UserRating?
val paidMessageStarCount: Int?
val uniqueGiftColors: UniqueGiftColors?
} }
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@@ -112,7 +120,7 @@ sealed interface ExtendedSupergroupChat : SupergroupChat, ExtendedGroupChat, Ext
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ExtendedChatSerializer.Companion::class) @Serializable(ExtendedChatSerializer.Companion::class)
sealed interface ExtendedForumChat : ExtendedSupergroupChat, ForumChat sealed interface ExtendedForumChat : ExtendedSupergroupChat, SupergroupForumChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PreviewChatSerializer::class) @Serializable(PreviewChatSerializer::class)

View File

@@ -33,6 +33,20 @@ data class PrivateChatImpl(
@SerialName(lastNameField) @SerialName(lastNameField)
override val lastName: String = "" override val lastName: String = ""
) : PreviewPrivateChat ) : PreviewPrivateChat
@Serializable
@RiskFeature("This class is a subject of changes. It is better to use PrivateChat due")
data class PrivateForumChatImpl(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(idField)
override val id: UserId,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(usernameField)
override val username: Username? = null,
@SerialName(firstNameField)
override val firstName: String = "",
@SerialName(lastNameField)
override val lastName: String = ""
) : PreviewPrivateForumChat
@Serializable @Serializable
@RiskFeature("This class is a subject of changes. It is better to use PrivateChat due") @RiskFeature("This class is a subject of changes. It is better to use PrivateChat due")
@@ -115,7 +129,7 @@ sealed class Bot : User()
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(UserSerializer::class) @Serializable(UserSerializer::class)
sealed class PreviewBot : PreviewUser() sealed class PreviewBot : PrivateChat, PreviewChat, User()
@Serializable @Serializable
data class CommonBot( data class CommonBot(
@@ -129,6 +143,8 @@ data class CommonBot(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(usernameField) @SerialName(usernameField)
override val username: Username? = null, override val username: Username? = null,
@SerialName(hasTopicsEnabledField)
val hasTopicsEnabled: Boolean = false,
) : PreviewBot() { ) : PreviewBot() {
@SerialName(isBotField) @SerialName(isBotField)
private val isBot = true private val isBot = true

View File

@@ -11,7 +11,11 @@ sealed interface PreviewUsernameChat : PreviewChat, UsernameChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PreviewChatSerializer::class) @Serializable(PreviewChatSerializer::class)
sealed interface PreviewPrivateChat : PreviewUsernameChat, PrivateChat sealed interface PreviewPrivateChat : PreviewUsernameChat, PrivateUserChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PreviewChatSerializer::class)
sealed interface PreviewPrivateForumChat : PreviewPrivateChat, PrivateForumChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PreviewChatSerializer::class) @Serializable(PreviewChatSerializer::class)
@@ -39,7 +43,7 @@ sealed interface PreviewSupergroupChat : PreviewGroupChat, PreviewSuperPublicCha
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PreviewChatSerializer::class) @Serializable(PreviewChatSerializer::class)
sealed interface PreviewForumChat : PreviewSupergroupChat, ForumChat sealed interface PreviewForumChat : PreviewSupergroupChat, SupergroupForumChat
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PreviewChatSerializer::class) @Serializable(PreviewChatSerializer::class)

View File

@@ -0,0 +1,14 @@
package dev.inmo.tgbotapi.types.chat
import dev.inmo.tgbotapi.types.countField
import dev.inmo.tgbotapi.types.ratingField
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class UserRating(
@SerialName(countField)
val count: Int,
@SerialName(ratingField)
val rating: Double
)

View File

@@ -3,8 +3,10 @@ package dev.inmo.tgbotapi.types.checklists
import dev.inmo.micro_utils.common.Warning import dev.inmo.micro_utils.common.Warning
import dev.inmo.tgbotapi.abstracts.TextedInput import dev.inmo.tgbotapi.abstracts.TextedInput
import dev.inmo.tgbotapi.types.TelegramDate import dev.inmo.tgbotapi.types.TelegramDate
import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.chat.PreviewUser import dev.inmo.tgbotapi.types.chat.PreviewUser
import dev.inmo.tgbotapi.types.completedByUserField import dev.inmo.tgbotapi.types.completedByUserField
import dev.inmo.tgbotapi.types.completedByChatField
import dev.inmo.tgbotapi.types.completionDateField import dev.inmo.tgbotapi.types.completionDateField
import dev.inmo.tgbotapi.types.idField import dev.inmo.tgbotapi.types.idField
import dev.inmo.tgbotapi.types.message.ParseMode import dev.inmo.tgbotapi.types.message.ParseMode
@@ -130,6 +132,8 @@ sealed interface ChecklistTask : TextedInput {
override val id: ChecklistTaskId, override val id: ChecklistTaskId,
@SerialName(completedByUserField) @SerialName(completedByUserField)
override val completedByUser: PreviewUser, override val completedByUser: PreviewUser,
@SerialName(completedByChatField)
val completedByChat: PreviewChat? = null,
@SerialName(completionDateField) @SerialName(completionDateField)
override val completionDate: TelegramDate, override val completionDate: TelegramDate,
@SerialName(textEntitiesField) @SerialName(textEntitiesField)
@@ -145,10 +149,12 @@ sealed interface ChecklistTask : TextedInput {
id: ChecklistTaskId, id: ChecklistTaskId,
text: String, text: String,
completedByUser: PreviewUser, completedByUser: PreviewUser,
completedByChat: PreviewChat? = null,
completionDate: TelegramDate, completionDate: TelegramDate,
): this( ): this(
id, id,
completedByUser, completedByUser,
completedByChat,
completionDate, completionDate,
listOf( listOf(
RegularTextSource(text) RegularTextSource(text)
@@ -176,6 +182,8 @@ sealed interface ChecklistTask : TextedInput {
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(completedByUserField) @SerialName(completedByUserField)
val completedByUser: PreviewUser? = null, val completedByUser: PreviewUser? = null,
@SerialName(completedByChatField)
val completedByChat: PreviewChat? = null,
@SerialName(completionDateField) @SerialName(completionDateField)
val completionDate: TelegramDate = TelegramDate(0), // TelegramDate(0) is the default according to https://core.telegram.org/bots/api#checklisttask val completionDate: TelegramDate = TelegramDate(0), // TelegramDate(0) is the default according to https://core.telegram.org/bots/api#checklisttask
) )
@@ -190,6 +198,7 @@ sealed interface ChecklistTask : TextedInput {
raw.completedByUser != null -> Done( raw.completedByUser != null -> Done(
id = raw.id, id = raw.id,
completedByUser = raw.completedByUser, completedByUser = raw.completedByUser,
completedByChat = raw.completedByChat,
completionDate = raw.completionDate, completionDate = raw.completionDate,
textSources = raw.textSources.asTextSources(raw.text), textSources = raw.textSources.asTextSources(raw.text),
) )
@@ -207,6 +216,7 @@ sealed interface ChecklistTask : TextedInput {
id = value.id, id = value.id,
text = value.text, text = value.text,
completedByUser = value.completedByUser, completedByUser = value.completedByUser,
completedByChat = (value as? Done)?.completedByChat,
completionDate = value.completionDate ?: TelegramDate(0), completionDate = value.completionDate ?: TelegramDate(0),
textSources = value.textSources.toRawMessageEntities() textSources = value.textSources.toRawMessageEntities()
) )

View File

@@ -1,5 +1,6 @@
package dev.inmo.tgbotapi.types.gifts package dev.inmo.tgbotapi.types.gifts
import dev.inmo.tgbotapi.types.giftsFromChannelsField
import dev.inmo.tgbotapi.types.limitedGiftsField import dev.inmo.tgbotapi.types.limitedGiftsField
import dev.inmo.tgbotapi.types.premiumSubscriptionField import dev.inmo.tgbotapi.types.premiumSubscriptionField
import dev.inmo.tgbotapi.types.uniqueGiftsField import dev.inmo.tgbotapi.types.uniqueGiftsField
@@ -17,5 +18,7 @@ data class AcceptedGiftTypes(
@SerialName(uniqueGiftsField) @SerialName(uniqueGiftsField)
val uniqueGifts: Boolean = false, val uniqueGifts: Boolean = false,
@SerialName(premiumSubscriptionField) @SerialName(premiumSubscriptionField)
val premiumSubscription: Boolean = false val premiumSubscription: Boolean = false,
@SerialName(giftsFromChannelsField)
val giftsFromChannels: Boolean = false
) )

View File

@@ -4,6 +4,7 @@ import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.chat.PreviewChat import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.files.Sticker import dev.inmo.tgbotapi.types.files.Sticker
import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftBackdrop import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftBackdrop
import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftColors
import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftModel import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftModel
import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftSymbol import dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftSymbol
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
@@ -24,6 +25,12 @@ sealed interface Gift {
val totalCount: Int? val totalCount: Int?
val upgradeStarCount: Int? val upgradeStarCount: Int?
val remainingCount: Int? val remainingCount: Int?
val personalTotalCount: Int?
val personalRemainingCount: Int?
val isPremium: Boolean
val hasColors: Boolean
val background: dev.inmo.tgbotapi.types.gifts.GiftBackground?
val uniqueGiftVariantCount: Int?
@Serializable @Serializable
data class Unlimited( data class Unlimited(
@@ -37,6 +44,18 @@ sealed interface Gift {
override val upgradeStarCount: Int? = null, override val upgradeStarCount: Int? = null,
@SerialName(publisherChatField) @SerialName(publisherChatField)
override val publisherChat: PreviewChat? = null, override val publisherChat: PreviewChat? = null,
@SerialName(personalTotalCountField)
override val personalTotalCount: Int? = null,
@SerialName(personalRemainingCountField)
override val personalRemainingCount: Int? = null,
@SerialName(isPremiumField2)
override val isPremium: Boolean = false,
@SerialName(hasColorsField)
override val hasColors: Boolean = false,
@SerialName(backgroundField)
override val background: dev.inmo.tgbotapi.types.gifts.GiftBackground? = null,
@SerialName(uniqueGiftVariantCountField)
override val uniqueGiftVariantCount: Int? = null,
) : Regular { ) : Regular {
override val totalCount: Int? override val totalCount: Int?
get() = null get() = null
@@ -60,6 +79,18 @@ sealed interface Gift {
override val upgradeStarCount: Int? = null, override val upgradeStarCount: Int? = null,
@SerialName(publisherChatField) @SerialName(publisherChatField)
override val publisherChat: PreviewChat? = null, override val publisherChat: PreviewChat? = null,
@SerialName(personalTotalCountField)
override val personalTotalCount: Int? = null,
@SerialName(personalRemainingCountField)
override val personalRemainingCount: Int? = null,
@SerialName(isPremiumField2)
override val isPremium: Boolean = false,
@SerialName(hasColorsField)
override val hasColors: Boolean = false,
@SerialName(backgroundField)
override val background: dev.inmo.tgbotapi.types.gifts.GiftBackground? = null,
@SerialName(uniqueGiftVariantCountField)
override val uniqueGiftVariantCount: Int? = null,
) : Regular ) : Regular
companion object : KSerializer<Regular> { companion object : KSerializer<Regular> {
@@ -73,6 +104,12 @@ sealed interface Gift {
val remaining_count: Int? = null, val remaining_count: Int? = null,
val upgrade_star_count: Int? = null, val upgrade_star_count: Int? = null,
val publisher_chat: PreviewChat? = null, val publisher_chat: PreviewChat? = null,
val personal_total_count: Int? = null,
val personal_remaining_count: Int? = null,
val is_premium: Boolean = false,
val has_colors: Boolean = false,
val background: dev.inmo.tgbotapi.types.gifts.GiftBackground? = null,
val unique_gift_variant_count: Int? = null,
) )
override val descriptor: SerialDescriptor override val descriptor: SerialDescriptor
@@ -89,7 +126,13 @@ sealed interface Gift {
totalCount = surrogate.total_count, totalCount = surrogate.total_count,
remainingCount = surrogate.remaining_count, remainingCount = surrogate.remaining_count,
upgradeStarCount = surrogate.upgrade_star_count, upgradeStarCount = surrogate.upgrade_star_count,
publisherChat = surrogate.publisher_chat publisherChat = surrogate.publisher_chat,
personalTotalCount = surrogate.personal_total_count,
personalRemainingCount = surrogate.personal_remaining_count,
isPremium = surrogate.is_premium,
hasColors = surrogate.has_colors,
background = surrogate.background,
uniqueGiftVariantCount = surrogate.unique_gift_variant_count
) )
} else { } else {
Unlimited( Unlimited(
@@ -98,6 +141,12 @@ sealed interface Gift {
starCount = surrogate.star_count, starCount = surrogate.star_count,
upgradeStarCount = surrogate.upgrade_star_count, upgradeStarCount = surrogate.upgrade_star_count,
publisherChat = surrogate.publisher_chat, publisherChat = surrogate.publisher_chat,
personalTotalCount = surrogate.personal_total_count,
personalRemainingCount = surrogate.personal_remaining_count,
isPremium = surrogate.is_premium,
hasColors = surrogate.has_colors,
background = surrogate.background,
uniqueGiftVariantCount = surrogate.unique_gift_variant_count
) )
} }
} }
@@ -110,7 +159,13 @@ sealed interface Gift {
total_count = value.totalCount, total_count = value.totalCount,
remaining_count = value.remainingCount, remaining_count = value.remainingCount,
upgrade_star_count = value.upgradeStarCount, upgrade_star_count = value.upgradeStarCount,
publisher_chat = value.publisherChat publisher_chat = value.publisherChat,
personal_total_count = value.personalTotalCount,
personal_remaining_count = value.personalRemainingCount,
is_premium = value.isPremium,
has_colors = value.hasColors,
background = value.background,
unique_gift_variant_count = value.uniqueGiftVariantCount
) )
RegularGiftSurrogate.serializer().serialize(encoder, surrogate) RegularGiftSurrogate.serializer().serialize(encoder, surrogate)
} }
@@ -119,6 +174,8 @@ sealed interface Gift {
@Serializable @Serializable
data class Unique( data class Unique(
@SerialName(giftIdField)
val id: GiftId? = null,
@SerialName(baseNameField) @SerialName(baseNameField)
val baseName: String, val baseName: String,
@SerialName(nameField) @SerialName(nameField)
@@ -132,7 +189,13 @@ sealed interface Gift {
@SerialName(backdropField) @SerialName(backdropField)
val backdrop: UniqueGiftBackdrop, val backdrop: UniqueGiftBackdrop,
@SerialName(publisherChatField) @SerialName(publisherChatField)
override val publisherChat: PreviewChat? = null override val publisherChat: PreviewChat? = null,
@SerialName(isFromBlockchainField)
val isFromBlockchain: Boolean = false,
@SerialName(isPremiumField2)
val isPremium: Boolean = false,
@SerialName(colorsField)
val colors: UniqueGiftColors = null
) : Gift ) : Gift
companion object : KSerializer<Gift> { companion object : KSerializer<Gift> {
@@ -146,6 +209,12 @@ sealed interface Gift {
val total_count: Int? = null, val total_count: Int? = null,
val remaining_count: Int? = null, val remaining_count: Int? = null,
val upgrade_star_count: Int? = null, val upgrade_star_count: Int? = null,
val personal_total_count: Int? = null,
val personal_remaining_count: Int? = null,
val is_premium: Boolean = false,
val has_colors: Boolean = false,
val background: dev.inmo.tgbotapi.types.gifts.GiftBackground? = null,
val unique_gift_variant_count: Int? = null,
// unique gift fields // unique gift fields
val base_name: String? = null, val base_name: String? = null,
val name: String? = null, val name: String? = null,
@@ -153,6 +222,8 @@ sealed interface Gift {
val model: UniqueGiftModel? = null, val model: UniqueGiftModel? = null,
val symbol: UniqueGiftSymbol? = null, val symbol: UniqueGiftSymbol? = null,
val backdrop: UniqueGiftBackdrop? = null, val backdrop: UniqueGiftBackdrop? = null,
val is_from_blockchain: Boolean = false,
val colors: dev.inmo.tgbotapi.types.gifts.unique.UniqueGiftColors? = null,
val publisher_chat: PreviewChat? = null, val publisher_chat: PreviewChat? = null,
) )
@@ -164,13 +235,17 @@ sealed interface Gift {
return if (surrogate.base_name != null && surrogate.name != null && surrogate.number != null && surrogate.model != null && surrogate.symbol != null && surrogate.backdrop != null) { return if (surrogate.base_name != null && surrogate.name != null && surrogate.number != null && surrogate.model != null && surrogate.symbol != null && surrogate.backdrop != null) {
Unique( Unique(
id = surrogate.id,
baseName = surrogate.base_name, baseName = surrogate.base_name,
name = surrogate.name, name = surrogate.name,
number = surrogate.number, number = surrogate.number,
model = surrogate.model, model = surrogate.model,
symbol = surrogate.symbol, symbol = surrogate.symbol,
backdrop = surrogate.backdrop, backdrop = surrogate.backdrop,
publisherChat = surrogate.publisher_chat publisherChat = surrogate.publisher_chat,
isFromBlockchain = surrogate.is_from_blockchain,
isPremium = surrogate.is_premium,
colors = surrogate.colors
) )
} else { } else {
decoder.decodeSerializableValue(Regular.serializer()) decoder.decodeSerializableValue(Regular.serializer())
@@ -188,12 +263,21 @@ sealed interface Gift {
total_count = (value as? Regular.Limited)?.totalCount, total_count = (value as? Regular.Limited)?.totalCount,
remaining_count = (value as? Regular.Limited)?.remainingCount, remaining_count = (value as? Regular.Limited)?.remainingCount,
upgrade_star_count = (value as? Regular)?.upgradeStarCount, upgrade_star_count = (value as? Regular)?.upgradeStarCount,
personal_total_count = (value as? Regular)?.personalTotalCount,
personal_remaining_count = (value as? Regular)?.personalRemainingCount,
is_premium = (value as? Regular)?.isPremium ?: (value as? Unique)?.isPremium ?: false,
has_colors = (value as? Regular)?.hasColors ?: false,
background = (value as? Regular)?.background,
unique_gift_variant_count = (value as? Regular)?.uniqueGiftVariantCount,
base_name = (value as? Unique)?.baseName, base_name = (value as? Unique)?.baseName,
name = (value as? Unique)?.name, name = (value as? Unique)?.name,
number = (value as? Unique)?.number, number = (value as? Unique)?.number,
model = (value as? Unique)?.model, model = (value as? Unique)?.model,
symbol = (value as? Unique)?.symbol, symbol = (value as? Unique)?.symbol,
backdrop = (value as? Unique)?.backdrop, backdrop = (value as? Unique)?.backdrop,
gift_id = (value as? Unique)?.id,
is_from_blockchain = (value as? Unique)?.isFromBlockchain ?: false,
colors = (value as? Unique)?.colors,
publisher_chat = value.publisherChat, publisher_chat = value.publisherChat,
) )
GiftSurrogate.serializer().serialize(encoder, surrogate) GiftSurrogate.serializer().serialize(encoder, surrogate)

View File

@@ -0,0 +1,13 @@
package dev.inmo.tgbotapi.types.gifts
import dev.inmo.tgbotapi.types.backgroundField
import dev.inmo.tgbotapi.types.files.PathedFile
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class GiftBackground(
@SerialName(backgroundField)
val background: PathedFile
)

View File

@@ -9,6 +9,7 @@ import dev.inmo.tgbotapi.types.message.asTextSources
import dev.inmo.tgbotapi.types.message.textsources.TextSource import dev.inmo.tgbotapi.types.message.textsources.TextSource
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
import dev.inmo.tgbotapi.types.message.toRawMessageEntities import dev.inmo.tgbotapi.types.message.toRawMessageEntities
import dev.inmo.tgbotapi.types.payments.abstracts.Currency
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
import kotlinx.serialization.EncodeDefault import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
@@ -51,6 +52,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
val prepaidUpgradeStarCount: Int? val prepaidUpgradeStarCount: Int?
val canBeUpgraded: Boolean val canBeUpgraded: Boolean
val isPrivate: Boolean val isPrivate: Boolean
val isUpgradeSeparate: Boolean
val uniqueGiftNumber: Int?
@Serializable @Serializable
data class Common( data class Common(
@@ -68,6 +71,10 @@ sealed interface GiftSentOrReceived : CommonEvent {
private val entities: RawMessageEntities? = null, private val entities: RawMessageEntities? = null,
@SerialName(isPrivateField) @SerialName(isPrivateField)
override val isPrivate: Boolean = false, override val isPrivate: Boolean = false,
@SerialName(isUpgradeSeparateField)
override val isUpgradeSeparate: Boolean = false,
@SerialName(uniqueGiftNumberField)
override val uniqueGiftNumber: Int? = null,
@SerialName(nextTransferDateField) @SerialName(nextTransferDateField)
override val nextTransferDate: TelegramDate? = null override val nextTransferDate: TelegramDate? = null
) : Regular { ) : Regular {
@@ -96,6 +103,10 @@ sealed interface GiftSentOrReceived : CommonEvent {
private val entities: RawMessageEntities? = null, private val entities: RawMessageEntities? = null,
@SerialName(isPrivateField) @SerialName(isPrivateField)
override val isPrivate: Boolean = false, override val isPrivate: Boolean = false,
@SerialName(isUpgradeSeparateField)
override val isUpgradeSeparate: Boolean = false,
@SerialName(uniqueGiftNumberField)
override val uniqueGiftNumber: Int? = null,
@SerialName(nextTransferDateField) @SerialName(nextTransferDateField)
override val nextTransferDate: TelegramDate? = null override val nextTransferDate: TelegramDate? = null
) : Regular, GiftSentOrReceived.ReceivedInBusinessAccount { ) : Regular, GiftSentOrReceived.ReceivedInBusinessAccount {
@@ -123,6 +134,10 @@ sealed interface GiftSentOrReceived : CommonEvent {
val entities: RawMessageEntities? = null, val entities: RawMessageEntities? = null,
@SerialName(isPrivateField) @SerialName(isPrivateField)
val isPrivate: Boolean = false, val isPrivate: Boolean = false,
@SerialName(isUpgradeSeparateField)
val isUpgradeSeparate: Boolean = false,
@SerialName(uniqueGiftNumberField)
val uniqueGiftNumber: Int? = null,
@SerialName(nextTransferDateField) @SerialName(nextTransferDateField)
val nextTransferDate: TelegramDate? = null val nextTransferDate: TelegramDate? = null
) )
@@ -150,6 +165,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
text = surrogate.text, text = surrogate.text,
entities = surrogate.entities, entities = surrogate.entities,
isPrivate = surrogate.isPrivate, isPrivate = surrogate.isPrivate,
isUpgradeSeparate = surrogate.isUpgradeSeparate,
uniqueGiftNumber = surrogate.uniqueGiftNumber,
nextTransferDate = surrogate.nextTransferDate nextTransferDate = surrogate.nextTransferDate
) )
} }
@@ -163,6 +180,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
text = surrogate.text, text = surrogate.text,
entities = surrogate.entities, entities = surrogate.entities,
isPrivate = surrogate.isPrivate, isPrivate = surrogate.isPrivate,
isUpgradeSeparate = surrogate.isUpgradeSeparate,
uniqueGiftNumber = surrogate.uniqueGiftNumber,
nextTransferDate = surrogate.nextTransferDate nextTransferDate = surrogate.nextTransferDate
) )
} }
@@ -178,7 +197,9 @@ sealed interface GiftSentOrReceived : CommonEvent {
text: String? = null, text: String? = null,
textSources: TextSourcesList = emptyList(), textSources: TextSourcesList = emptyList(),
position: Int, position: Int,
isPrivate: Boolean = false isPrivate: Boolean = false,
isUpgradeSeparate: Boolean = false,
uniqueGiftNumber: Int? = null
) = ownedGiftId ?.let { ) = ownedGiftId ?.let {
ReceivedInBusinessAccount( ReceivedInBusinessAccount(
gift, gift,
@@ -188,7 +209,9 @@ sealed interface GiftSentOrReceived : CommonEvent {
canBeUpgraded, canBeUpgraded,
text, text,
textSources.toRawMessageEntities(position), textSources.toRawMessageEntities(position),
isPrivate isPrivate,
isUpgradeSeparate,
uniqueGiftNumber
) )
} ?: Common( } ?: Common(
gift, gift,
@@ -197,7 +220,9 @@ sealed interface GiftSentOrReceived : CommonEvent {
canBeUpgraded, canBeUpgraded,
text, text,
textSources.toRawMessageEntities(position), textSources.toRawMessageEntities(position),
isPrivate isPrivate,
isUpgradeSeparate,
uniqueGiftNumber
) )
} }
} }
@@ -207,7 +232,10 @@ sealed interface GiftSentOrReceived : CommonEvent {
override val gift: Gift.Unique override val gift: Gift.Unique
val origin: String? val origin: String?
val originTyped: Origin? val originTyped: Origin?
@Deprecated("Use lastResaleCurrency and lastResaleAmount instead")
val lastResaleStarCount: Int? val lastResaleStarCount: Int?
val lastResaleCurrency: String?
val lastResaleAmount: Long?
val transferStarCount: Int? val transferStarCount: Int?
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@@ -215,11 +243,15 @@ sealed interface GiftSentOrReceived : CommonEvent {
sealed interface Origin { sealed interface Origin {
val string: String val string: String
@Serializable(Origin.Companion::class) @Serializable(Origin.Companion::class)
object Upgrade : Origin { override val string: String = "upgrade" } data object Upgrade : Origin { override val string: String = "upgrade" }
@Serializable(Origin.Companion::class) @Serializable(Origin.Companion::class)
object Transfer : Origin { override val string: String = "transfer" } data object Transfer : Origin { override val string: String = "transfer" }
@Serializable(Origin.Companion::class) @Serializable(Origin.Companion::class)
object Resale : Origin { override val string: String = "resale" } data object Resale : Origin { override val string: String = "resale" }
@Serializable(Origin.Companion::class)
data object GiftedUpgrade : Origin { override val string: String = "gifted_upgrade" }
@Serializable(Origin.Companion::class)
data object Offer : Origin { override val string: String = "offer" }
@Serializable(Origin.Companion::class) @Serializable(Origin.Companion::class)
@JvmInline @JvmInline
value class Unknown(override val string: String) : Origin value class Unknown(override val string: String) : Origin
@@ -231,6 +263,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
Upgrade.string -> Upgrade Upgrade.string -> Upgrade
Transfer.string -> Transfer Transfer.string -> Transfer
Resale.string -> Resale Resale.string -> Resale
GiftedUpgrade.string -> GiftedUpgrade
Offer.string -> Offer
else -> Unknown(value) else -> Unknown(value)
} }
@@ -254,8 +288,13 @@ sealed interface GiftSentOrReceived : CommonEvent {
override val gift: Gift.Unique, override val gift: Gift.Unique,
@SerialName(originField) @SerialName(originField)
override val originTyped: Origin? = null, override val originTyped: Origin? = null,
@Deprecated("Use lastResaleCurrency and lastResaleAmount instead")
@SerialName(lastResaleStarCountField) @SerialName(lastResaleStarCountField)
override val lastResaleStarCount: Int? = null, override val lastResaleStarCount: Int? = null,
@SerialName(lastResaleCurrencyField)
override val lastResaleCurrency: Currency? = null,
@SerialName(lastResaleAmountField)
override val lastResaleAmount: Long? = null,
@SerialName(transferStarCountField) @SerialName(transferStarCountField)
override val transferStarCount: Int? = null, override val transferStarCount: Int? = null,
@SerialName(nextTransferDateField) @SerialName(nextTransferDateField)
@@ -271,12 +310,16 @@ sealed interface GiftSentOrReceived : CommonEvent {
gift: Gift.Unique, gift: Gift.Unique,
origin: String?, origin: String?,
lastResaleStarCount: Int? = null, lastResaleStarCount: Int? = null,
lastResaleCurrency: Currency? = null,
lastResaleAmount: Long? = null,
transferStarCount: Int? = null, transferStarCount: Int? = null,
nextTransferDate: TelegramDate? = null nextTransferDate: TelegramDate? = null
) : this( ) : this(
gift, gift,
origin ?.let { Origin.fromString(it) }, origin ?.let { Origin.fromString(it) },
lastResaleStarCount, lastResaleStarCount,
lastResaleCurrency,
lastResaleAmount,
transferStarCount, transferStarCount,
nextTransferDate nextTransferDate
) )
@@ -290,8 +333,13 @@ sealed interface GiftSentOrReceived : CommonEvent {
override val ownedGiftId: GiftId, override val ownedGiftId: GiftId,
@SerialName(originField) @SerialName(originField)
override val originTyped: Origin? = null, override val originTyped: Origin? = null,
@Deprecated("Use lastResaleCurrency and lastResaleAmount instead")
@SerialName(lastResaleStarCountField) @SerialName(lastResaleStarCountField)
override val lastResaleStarCount: Int? = null, override val lastResaleStarCount: Int? = null,
@SerialName(lastResaleCurrencyField)
override val lastResaleCurrency: Currency? = null,
@SerialName(lastResaleAmountField)
override val lastResaleAmount: Long? = null,
@SerialName(transferStarCountField) @SerialName(transferStarCountField)
override val transferStarCount: Int? = null, override val transferStarCount: Int? = null,
@SerialName(nextTransferDateField) @SerialName(nextTransferDateField)
@@ -305,6 +353,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
ownedGiftId: GiftId, ownedGiftId: GiftId,
origin: String? = null, origin: String? = null,
lastResaleStarCount: Int? = null, lastResaleStarCount: Int? = null,
lastResaleCurrency: Currency? = null,
lastResaleAmount: Long? = null,
transferStarCount: Int? = null, transferStarCount: Int? = null,
nextTransferDate: TelegramDate? = null nextTransferDate: TelegramDate? = null
) : this( ) : this(
@@ -312,6 +362,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
ownedGiftId = ownedGiftId, ownedGiftId = ownedGiftId,
originTyped = origin ?.let { Origin.fromString(it) }, originTyped = origin ?.let { Origin.fromString(it) },
lastResaleStarCount = lastResaleStarCount, lastResaleStarCount = lastResaleStarCount,
lastResaleCurrency = lastResaleCurrency,
lastResaleAmount = lastResaleAmount,
transferStarCount = transferStarCount, transferStarCount = transferStarCount,
nextTransferDate = nextTransferDate nextTransferDate = nextTransferDate
) )
@@ -328,6 +380,10 @@ sealed interface GiftSentOrReceived : CommonEvent {
val origin: Origin? = null, val origin: Origin? = null,
@SerialName(lastResaleStarCountField) @SerialName(lastResaleStarCountField)
val lastResaleStarCount: Int? = null, val lastResaleStarCount: Int? = null,
@SerialName(lastResaleCurrencyField)
val lastResaleCurrency: Currency? = null,
@SerialName(lastResaleAmountField)
val lastResaleAmount: Long? = null,
@SerialName(transferStarCountField) @SerialName(transferStarCountField)
val transferStarCount: Int? = null, val transferStarCount: Int? = null,
@SerialName(nextTransferDateField) @SerialName(nextTransferDateField)
@@ -353,6 +409,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
gift = surrogate.gift, gift = surrogate.gift,
originTyped = surrogate.origin, originTyped = surrogate.origin,
lastResaleStarCount = surrogate.lastResaleStarCount, lastResaleStarCount = surrogate.lastResaleStarCount,
lastResaleCurrency = surrogate.lastResaleCurrency,
lastResaleAmount = surrogate.lastResaleAmount,
transferStarCount = surrogate.transferStarCount, transferStarCount = surrogate.transferStarCount,
nextTransferDate = surrogate.nextTransferDate nextTransferDate = surrogate.nextTransferDate
) )
@@ -363,6 +421,8 @@ sealed interface GiftSentOrReceived : CommonEvent {
ownedGiftId = surrogate.ownedGiftId, ownedGiftId = surrogate.ownedGiftId,
originTyped = surrogate.origin, originTyped = surrogate.origin,
lastResaleStarCount = surrogate.lastResaleStarCount, lastResaleStarCount = surrogate.lastResaleStarCount,
lastResaleCurrency = surrogate.lastResaleCurrency,
lastResaleAmount = surrogate.lastResaleAmount,
transferStarCount = surrogate.transferStarCount, transferStarCount = surrogate.transferStarCount,
nextTransferDate = surrogate.nextTransferDate nextTransferDate = surrogate.nextTransferDate
) )

View File

@@ -0,0 +1,19 @@
package dev.inmo.tgbotapi.types.gifts.unique
import dev.inmo.tgbotapi.types.baseColorField
import dev.inmo.tgbotapi.types.linkColorField
import dev.inmo.tgbotapi.types.nameColorField
import dev.inmo.tgbotapi.utils.RGBColor
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class UniqueGiftColors(
@SerialName(nameColorField)
val nameColor: RGBColor,
@SerialName(baseColorField)
val baseColor: RGBColor,
@SerialName(linkColorField)
val linkColor: RGBColor
)

View File

@@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.types.message.ChatEvents.forum
import dev.inmo.tgbotapi.types.CustomEmojiId import dev.inmo.tgbotapi.types.CustomEmojiId
import dev.inmo.tgbotapi.types.iconColorField import dev.inmo.tgbotapi.types.iconColorField
import dev.inmo.tgbotapi.types.iconCustomEmojiIdField import dev.inmo.tgbotapi.types.iconCustomEmojiIdField
import dev.inmo.tgbotapi.types.isNameImplicitField
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ForumEvent import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ForumEvent
import dev.inmo.tgbotapi.types.nameField import dev.inmo.tgbotapi.types.nameField
import dev.inmo.tgbotapi.utils.RGBColor import dev.inmo.tgbotapi.utils.RGBColor
@@ -16,5 +17,7 @@ data class ForumTopicCreated(
@SerialName(iconColorField) @SerialName(iconColorField)
val iconColor: RGBColor, val iconColor: RGBColor,
@SerialName(iconCustomEmojiIdField) @SerialName(iconCustomEmojiIdField)
val iconEmojiId: CustomEmojiId? = null val iconEmojiId: CustomEmojiId? = null,
@SerialName(isNameImplicitField)
val isNameImplicit: Boolean = false
) : ForumEvent ) : ForumEvent

View File

@@ -201,6 +201,7 @@ internal data class RawMessage(
// Gifts // Gifts
private val gift: GiftSentOrReceived.Regular? = null, private val gift: GiftSentOrReceived.Regular? = null,
private val unique_gift: GiftSentOrReceived.Unique? = null, private val unique_gift: GiftSentOrReceived.Unique? = null,
private val gift_upgrade_sent: GiftSentOrReceived? = null,
) { ) {
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
private val checkedFrom = from ?.takeIf { !it.isFakeTelegramUser() } private val checkedFrom = from ?.takeIf { !it.isFakeTelegramUser() }
@@ -328,6 +329,7 @@ internal data class RawMessage(
paid_message_price_changed != null -> paid_message_price_changed paid_message_price_changed != null -> paid_message_price_changed
gift != null -> gift gift != null -> gift
unique_gift != null -> unique_gift unique_gift != null -> unique_gift
gift_upgrade_sent != null -> gift_upgrade_sent
checklist_tasks_done != null -> checklist_tasks_done checklist_tasks_done != null -> checklist_tasks_done
checklist_tasks_added != null -> checklist_tasks_added checklist_tasks_added != null -> checklist_tasks_added
direct_message_price_changed != null -> direct_message_price_changed direct_message_price_changed != null -> direct_message_price_changed

View File

@@ -13,9 +13,11 @@ import dev.inmo.tgbotapi.types.chat.*
* language) * language)
*/ */
fun PrivateChat.toUser(): User = when (this) { fun PrivateChat.toUser(): User = when (this) {
is ExtendedPrivateChatImpl -> CommonUser(id, firstName, lastName, username)
is CommonUser -> this is CommonUser -> this
is CommonBot -> this is CommonBot -> this
is PrivateChatImpl -> CommonUser(id, firstName, lastName, username)
is ExtendedBot -> this is ExtendedBot -> this
is ExtendedPrivateChatImpl -> CommonUser(id, firstName, lastName, username)
is PrivateChatImpl -> CommonUser(id, firstName, lastName, username)
is ExtendedPrivateForumChatImpl -> CommonUser(id, firstName, lastName, username)
is PrivateForumChatImpl -> CommonUser(id, firstName, lastName, username)
} }

View File

@@ -8,6 +8,7 @@ import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.asClassName import com.squareup.kotlinpoet.asClassName
import com.squareup.kotlinpoet.ksp.writeTo import com.squareup.kotlinpoet.ksp.writeTo
import dev.inmo.micro_ksp.generator.resolveSubclasses import dev.inmo.micro_ksp.generator.resolveSubclasses
import dev.inmo.micro_ksp.generator.withNoSuchElementWorkaround
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent
import dev.inmo.tgbotapi.utils.RiskFeature import dev.inmo.tgbotapi.utils.RiskFeature
import dev.inmo.tgbotapi.utils.internal.ClassCastsExcluded import dev.inmo.tgbotapi.utils.internal.ClassCastsExcluded
@@ -30,7 +31,9 @@ class TelegramBotAPISymbolProcessor(
val classes = resolver.getSymbolsWithAnnotation(classCastsIncludedClassName.canonicalName).filterIsInstance<KSClassDeclaration>() val classes = resolver.getSymbolsWithAnnotation(classCastsIncludedClassName.canonicalName).filterIsInstance<KSClassDeclaration>()
val classesRegexes: Map<KSClassDeclaration, Pair<Regex?, Regex?>> = classes.mapNotNull { val classesRegexes: Map<KSClassDeclaration, Pair<Regex?, Regex?>> = classes.mapNotNull {
it to (it.getAnnotationsByType(ClassCastsIncluded::class).firstNotNullOfOrNull { it to (it.getAnnotationsByType(ClassCastsIncluded::class).firstNotNullOfOrNull {
it.typesRegex.takeIf { it.isNotEmpty() } ?.let(::Regex) to it.excludeRegex.takeIf { it.isNotEmpty() } ?.let(::Regex) val typesRegex = withNoSuchElementWorkaround("") { it.typesRegex }
val excludeRegex = withNoSuchElementWorkaround("") { it.excludeRegex }
typesRegex.takeIf { it.isNotEmpty() } ?.let(::Regex) to excludeRegex.takeIf { it.isNotEmpty() } ?.let(::Regex)
} ?: return@mapNotNull null) } ?: return@mapNotNull null)
}.toMap() }.toMap()
val classesSubtypes = mutableMapOf<KSClassDeclaration, MutableSet<KSClassDeclaration>>() val classesSubtypes = mutableMapOf<KSClassDeclaration, MutableSet<KSClassDeclaration>>()

View File

@@ -1425,6 +1425,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun extendedNonBotChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedNonBotChat; public static final fun extendedNonBotChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedNonBotChat;
public static final fun extendedPrivateChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateChat; public static final fun extendedPrivateChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateChat;
public static final fun extendedPrivateChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateChat; public static final fun extendedPrivateChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateChat;
public static final fun extendedPrivateForumChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat;
public static final fun extendedPrivateForumChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPrivateForumChat;
public static final fun extendedPublicChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPublicChat; public static final fun extendedPublicChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPublicChat;
public static final fun extendedPublicChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPublicChat; public static final fun extendedPublicChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedPublicChat;
public static final fun extendedSupergroupChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedSupergroupChat; public static final fun extendedSupergroupChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/ExtendedSupergroupChat;
@@ -1745,6 +1747,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun ifExtendedGroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifExtendedGroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifExtendedNonBotChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifExtendedNonBotChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifExtendedPrivateChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifExtendedPrivateChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifExtendedPrivateForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifExtendedPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifExtendedPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifExtendedSupergroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifExtendedSupergroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifExternal (Ldev/inmo/tgbotapi/types/ReplyInfo;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifExternal (Ldev/inmo/tgbotapi/types/ReplyInfo;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
@@ -1975,6 +1978,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun ifPreviewForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPreviewForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPreviewGroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPreviewGroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPreviewPrivateChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPreviewPrivateChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPreviewPrivateForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPreviewPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPreviewPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPreviewSuperPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPreviewSuperPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPreviewSupergroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPreviewSupergroupChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
@@ -1986,6 +1990,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun ifPrivateContentMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPrivateContentMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPrivateEvent (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPrivateEvent (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPrivateEventMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPrivateEventMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPrivateForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPrivateUserChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifProximityAlertTriggered (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifProximityAlertTriggered (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPublicChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifPublicChatEvent (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifPublicChatEvent (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
@@ -2053,6 +2059,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun ifSupergroupEvent (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSupergroupEvent (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifSupergroupEventMessage (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSupergroupEventMessage (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifSupergroupEventMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSupergroupEventMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifSupergroupForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifSwitchInlineQueryChosenChatInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSwitchInlineQueryChosenChatInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifSwitchInlineQueryCurrentChatInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSwitchInlineQueryCurrentChatInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun ifSwitchInlineQueryInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSwitchInlineQueryInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
@@ -2480,6 +2487,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun previewGroupChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewGroupChat; public static final fun previewGroupChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewGroupChat;
public static final fun previewPrivateChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat; public static final fun previewPrivateChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat;
public static final fun previewPrivateChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat; public static final fun previewPrivateChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPrivateChat;
public static final fun previewPrivateForumChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat;
public static final fun previewPrivateForumChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPrivateForumChat;
public static final fun previewPublicChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPublicChat; public static final fun previewPublicChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPublicChat;
public static final fun previewPublicChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPublicChat; public static final fun previewPublicChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewPublicChat;
public static final fun previewSuperPublicChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewSuperPublicChat; public static final fun previewSuperPublicChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PreviewSuperPublicChat;
@@ -2502,6 +2511,10 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun privateEventMessageOrThrow (Ldev/inmo/tgbotapi/types/message/abstracts/Message;)Ldev/inmo/tgbotapi/types/message/PrivateEventMessage; public static final fun privateEventMessageOrThrow (Ldev/inmo/tgbotapi/types/message/abstracts/Message;)Ldev/inmo/tgbotapi/types/message/PrivateEventMessage;
public static final fun privateEventOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/PrivateEvent; public static final fun privateEventOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/PrivateEvent;
public static final fun privateEventOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/PrivateEvent; public static final fun privateEventOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/PrivateEvent;
public static final fun privateForumChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PrivateForumChat;
public static final fun privateForumChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PrivateForumChat;
public static final fun privateUserChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PrivateUserChat;
public static final fun privateUserChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/PrivateUserChat;
public static final fun proximityAlertTriggeredOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/ProximityAlertTriggered; public static final fun proximityAlertTriggeredOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/ProximityAlertTriggered;
public static final fun proximityAlertTriggeredOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/ProximityAlertTriggered; public static final fun proximityAlertTriggeredOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/ProximityAlertTriggered;
public static final fun publicChatEventOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/PublicChatEvent; public static final fun publicChatEventOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/PublicChatEvent;
@@ -2636,6 +2649,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
public static final fun supergroupEventMessageOrThrow (Ldev/inmo/tgbotapi/types/message/abstracts/Message;)Ldev/inmo/tgbotapi/types/message/abstracts/SupergroupEventMessage; public static final fun supergroupEventMessageOrThrow (Ldev/inmo/tgbotapi/types/message/abstracts/Message;)Ldev/inmo/tgbotapi/types/message/abstracts/SupergroupEventMessage;
public static final fun supergroupEventOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/SupergroupEvent; public static final fun supergroupEventOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/SupergroupEvent;
public static final fun supergroupEventOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/SupergroupEvent; public static final fun supergroupEventOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/SupergroupEvent;
public static final fun supergroupForumChatOrNull (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/SupergroupForumChat;
public static final fun supergroupForumChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/SupergroupForumChat;
public static final fun switchInlineQueryChosenChatInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChatInlineKeyboardButton; public static final fun switchInlineQueryChosenChatInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChatInlineKeyboardButton;
public static final fun switchInlineQueryChosenChatInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChatInlineKeyboardButton; public static final fun switchInlineQueryChosenChatInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChatInlineKeyboardButton;
public static final fun switchInlineQueryCurrentChatInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryCurrentChatInlineKeyboardButton; public static final fun switchInlineQueryCurrentChatInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryCurrentChatInlineKeyboardButton;
@@ -3705,7 +3720,9 @@ public final class dev/inmo/tgbotapi/extensions/utils/updates/retrieving/LongPol
public static synthetic fun longPolling$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ILkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;IZZLjava/lang/Long;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/Job; public static synthetic fun longPolling$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ILkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;IZZLjava/lang/Long;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/Job;
public static synthetic fun longPolling$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/updateshandlers/UpdatesFilter;ILkotlinx/coroutines/CoroutineScope;ZZLjava/lang/Long;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; public static synthetic fun longPolling$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/updateshandlers/UpdatesFilter;ILkotlinx/coroutines/CoroutineScope;ZZLjava/lang/Long;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;
public static final fun longPollingFlow (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ILkotlin/jvm/functions/Function2;Ljava/util/List;ZZLjava/lang/Long;)Lkotlinx/coroutines/flow/Flow; public static final fun longPollingFlow (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ILkotlin/jvm/functions/Function2;Ljava/util/List;ZZLjava/lang/Long;)Lkotlinx/coroutines/flow/Flow;
public static final fun longPollingFlow (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Lkotlin/jvm/functions/Function2;ZZLjava/lang/Long;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow;
public static synthetic fun longPollingFlow$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ILkotlin/jvm/functions/Function2;Ljava/util/List;ZZLjava/lang/Long;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; public static synthetic fun longPollingFlow$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ILkotlin/jvm/functions/Function2;Ljava/util/List;ZZLjava/lang/Long;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
public static synthetic fun longPollingFlow$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Lkotlin/jvm/functions/Function2;ZZLjava/lang/Long;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
public static final fun retrieveAccumulatedUpdates (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/updateshandlers/FlowsUpdatesFilter;ZZLkotlinx/coroutines/CoroutineScope;ZLjava/lang/Long;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; public static final fun retrieveAccumulatedUpdates (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/updateshandlers/FlowsUpdatesFilter;ZZLkotlinx/coroutines/CoroutineScope;ZLjava/lang/Long;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;
public static final fun retrieveAccumulatedUpdates (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ZZLkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;Ljava/util/List;ZLjava/lang/Long;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; public static final fun retrieveAccumulatedUpdates (Ldev/inmo/tgbotapi/bot/RequestsExecutor;ZZLkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;Ljava/util/List;ZLjava/lang/Long;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;
public static synthetic fun retrieveAccumulatedUpdates$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/updateshandlers/FlowsUpdatesFilter;ZZLkotlinx/coroutines/CoroutineScope;ZLjava/lang/Long;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; public static synthetic fun retrieveAccumulatedUpdates$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/updateshandlers/FlowsUpdatesFilter;ZZLkotlinx/coroutines/CoroutineScope;ZLjava/lang/Long;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;

View File

@@ -1,6 +1,5 @@
package dev.inmo.tgbotapi.extensions.utils.updates.retrieving package dev.inmo.tgbotapi.extensions.utils.updates.retrieving
import dev.inmo.kslog.common.logger
import dev.inmo.micro_utils.coroutines.* import dev.inmo.micro_utils.coroutines.*
import dev.inmo.tgbotapi.bot.RequestsExecutor import dev.inmo.tgbotapi.bot.RequestsExecutor
import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.bot.TelegramBot
@@ -15,30 +14,36 @@ import dev.inmo.tgbotapi.types.update.*
import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate
import dev.inmo.tgbotapi.types.update.abstracts.Update import dev.inmo.tgbotapi.types.update.abstracts.Update
import dev.inmo.tgbotapi.updateshandlers.* import dev.inmo.tgbotapi.updateshandlers.*
import dev.inmo.tgbotapi.utils.DefaultKTgBotAPIKSLog
import dev.inmo.tgbotapi.utils.causedCancellationException
import dev.inmo.tgbotapi.utils.isCausedByCancellation
import dev.inmo.tgbotapi.utils.isCausedUnresolvedAddressException import dev.inmo.tgbotapi.utils.isCausedUnresolvedAddressException
import dev.inmo.tgbotapi.utils.subscribeWithBotLogger import dev.inmo.tgbotapi.utils.subscribeWithBotLogger
import io.ktor.client.network.sockets.ConnectTimeoutException import io.ktor.client.network.sockets.ConnectTimeoutException
import io.ktor.client.plugins.HttpRequestTimeoutException import io.ktor.client.plugins.HttpRequestTimeoutException
import io.ktor.util.network.UnresolvedAddressException
import io.ktor.utils.io.CancellationException import io.ktor.utils.io.CancellationException
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
/** /**
* @param mediaGroupsDebounceTimeMillis Will be used for calling of [updateHandlerWithMediaGroupsAdaptation]. Pass null * Starts a long polling flow to receive updates continuously from the Telegram Bot API.
* in case you wish to enable classic way of updates handling, but in that mode some media group messages can be *
* retrieved in different updates * This method retrieves updates from the bot, processes them, and emits them as a flow of `Update` objects.
* It allows handling of updates with features like automatic webhook disabling, timeout exception skipping,
* and media group handling with debounce time.
*
* @param exceptionsHandler Optional exception handler to manage exceptions that occur during the polling process.
* @param autoDisableWebhooks Specifies whether to automatically disable existing webhooks before starting the long polling flow (default: `true`).
* @param autoSkipTimeoutExceptions Defines if timeout-related exceptions should automatically be skipped during the polling (default: `true`).
* @param mediaGroupsDebounceTimeMillis The debounce time in milliseconds for processing media group updates.
* If set to `null`, media group handling is disabled (default: `1000L`).
* @param getUpdatesRequestCreator A function that creates a `GetUpdates` request for retrieving updates.
* This function accepts the identifier of the most recent update as an input and returns the new request.
* @return A [Flow] of [Update] objects that represents the continuous stream of updates received.
*/ */
fun TelegramBot.longPollingFlow( fun TelegramBot.longPollingFlow(
timeoutSeconds: Seconds = 30,
exceptionsHandler: (ExceptionHandler<Unit>)? = null, exceptionsHandler: (ExceptionHandler<Unit>)? = null,
allowedUpdates: List<String>? = ALL_UPDATES_LIST,
autoDisableWebhooks: Boolean = true, autoDisableWebhooks: Boolean = true,
autoSkipTimeoutExceptions: Boolean = true, autoSkipTimeoutExceptions: Boolean = true,
mediaGroupsDebounceTimeMillis: Long? = 1000L, mediaGroupsDebounceTimeMillis: Long? = 1000L,
getUpdatesRequestCreator: (sinceUpdate: UpdateId?) -> GetUpdates
): Flow<Update> = channelFlow { ): Flow<Update> = channelFlow {
if (autoDisableWebhooks) { if (autoDisableWebhooks) {
runCatchingLogging(logger = Log) { runCatchingLogging(logger = Log) {
@@ -119,11 +124,7 @@ fun TelegramBot.longPollingFlow(
while (isActive) { while (isActive) {
runCatchingLogging(logger = Log) { runCatchingLogging(logger = Log) {
execute( execute(
GetUpdates( getUpdatesRequestCreator(lastUpdateIdentifier ?.plus(1))
offset = lastUpdateIdentifier?.plus(1),
timeout = timeoutSeconds,
allowed_updates = allowedUpdates
)
).let { originalUpdates -> ).let { originalUpdates ->
updatesHandler(originalUpdates) updatesHandler(originalUpdates)
} }
@@ -148,6 +149,45 @@ fun TelegramBot.longPollingFlow(
} }
} }
/**
* Initiates a long polling flow for receiving updates continuously from the Telegram Bot API.
* This method provides a customized way to handle the retrieval of updates with options
* to configure timeouts, update types, exception handling, and media group processing.
*
* @param timeoutSeconds The maximum time in seconds for the server to wait for available updates
* before responding (default: `30`).
* @param exceptionsHandler An optional exception handler for managing exceptions that occur during the
* long polling process. If not provided, exceptions will pass through unhandled.
* @param allowedUpdates A list of the update types to retrieve. By default, retrieves all possible
* update types as defined in `ALL_UPDATES_LIST`.
* @param autoDisableWebhooks Whether the current webhook should be disabled automatically before starting the
* long polling flow (default: `true`).
* @param autoSkipTimeoutExceptions Determines if timeout-related exceptions should be automatically skipped
* during the polling process (default: `true`).
* @param mediaGroupsDebounceTimeMillis The debounce time in milliseconds for processing updates containing
* media groups. If set to `null`, media group handling is disabled (default: `1000L`).
* @return A Flow that emits Update objects representing the updates fetched from the Telegram Bot API.
*/
fun TelegramBot.longPollingFlow(
timeoutSeconds: Seconds = 30,
exceptionsHandler: (ExceptionHandler<Unit>)? = null,
allowedUpdates: List<String>? = ALL_UPDATES_LIST,
autoDisableWebhooks: Boolean = true,
autoSkipTimeoutExceptions: Boolean = true,
mediaGroupsDebounceTimeMillis: Long? = 1000L,
): Flow<Update> = longPollingFlow(
exceptionsHandler = exceptionsHandler,
autoDisableWebhooks = autoDisableWebhooks,
autoSkipTimeoutExceptions = autoSkipTimeoutExceptions,
mediaGroupsDebounceTimeMillis = mediaGroupsDebounceTimeMillis,
) {
GetUpdates(
offset = it,
timeout = timeoutSeconds,
allowed_updates = allowedUpdates
)
}
/** /**
* @param mediaGroupsDebounceTimeMillis Will be used for calling of [updateHandlerWithMediaGroupsAdaptation]. Pass null * @param mediaGroupsDebounceTimeMillis Will be used for calling of [updateHandlerWithMediaGroupsAdaptation]. Pass null
* in case you wish to enable classic way of updates handling, but in that mode some media group messages can be * in case you wish to enable classic way of updates handling, but in that mode some media group messages can be