diff --git a/tgbotapi.api/api/tgbotapi.api.api b/tgbotapi.api/api/tgbotapi.api.api index 3afe9cbea2..bff95df9ad 100644 --- a/tgbotapi.api/api/tgbotapi.api.api +++ b/tgbotapi.api/api/tgbotapi.api.api @@ -2403,6 +2403,24 @@ public final class dev/inmo/tgbotapi/extensions/api/stories/DeleteStoryKt { public static final fun deleteStory-wC12z2M (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/Story;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } +public final class dev/inmo/tgbotapi/extensions/api/stories/EditStoryKt { + public static final fun editStory--jptdio (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun editStory--jptdio$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun editStory-51PWt9w (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun editStory-51PWt9w$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun editStory-RIEWIQk (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun editStory-RIEWIQk$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class dev/inmo/tgbotapi/extensions/api/stories/PostStoryKt { + public static final fun postStory-5wJhEVU (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun postStory-5wJhEVU$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;ZZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun postStory-TVoEmL0 (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;Ljava/util/List;ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun postStory-TVoEmL0$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;Ljava/util/List;ZZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun postStory-rseRIdU (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun postStory-rseRIdU$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;ZZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + public final class dev/inmo/tgbotapi/extensions/api/thumbs/SetCustomEmojiStickerSetThumbKt { public static final fun setCustomEmojiStickerSetThumbnail-FMh0B1w (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/stickers/StickerSet;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun setCustomEmojiStickerSetThumbnail-KofBPHw (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/stories/EditStory.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/stories/EditStory.kt new file mode 100644 index 0000000000..f1812a1d4d --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/stories/EditStory.kt @@ -0,0 +1,60 @@ +package dev.inmo.tgbotapi.extensions.api.stories + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.stories.EditStory +import dev.inmo.tgbotapi.types.Seconds +import dev.inmo.tgbotapi.types.StoryId +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.textsources.TextSource +import dev.inmo.tgbotapi.types.stories.InputStoryContent +import dev.inmo.tgbotapi.types.stories.Story +import dev.inmo.tgbotapi.types.stories.StoryArea + +public suspend fun TelegramBot.editStory( + businessConnectionId: BusinessConnectionId, + storyId: StoryId, + content: InputStoryContent, + textSources: List, + areas: List = emptyList(), +): Story = execute( + EditStory( + businessConnectionId = businessConnectionId, + storyId = storyId, + content = content, + textSources = textSources, + areas = areas, + ) +) + +public suspend fun TelegramBot.editStory( + businessConnectionId: BusinessConnectionId, + storyId: StoryId, + content: InputStoryContent, + text: String, + parseMode: ParseMode? = null, + areas: List = emptyList(), +): Story = execute( + EditStory( + businessConnectionId = businessConnectionId, + storyId = storyId, + content = content, + text = text, + parseMode = parseMode, + areas = areas, + ) +) + +public suspend fun TelegramBot.editStory( + businessConnectionId: BusinessConnectionId, + storyId: StoryId, + content: InputStoryContent, + areas: List = emptyList(), +): Story = execute( + EditStory( + businessConnectionId = businessConnectionId, + storyId = storyId, + content = content, + areas = areas, + ) +) diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/stories/PostStory.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/stories/PostStory.kt new file mode 100644 index 0000000000..7658de8a8d --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/stories/PostStory.kt @@ -0,0 +1,71 @@ +package dev.inmo.tgbotapi.extensions.api.stories + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.stories.PostStory +import dev.inmo.tgbotapi.types.Seconds +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.textsources.TextSource +import dev.inmo.tgbotapi.types.stories.InputStoryContent +import dev.inmo.tgbotapi.types.stories.Story +import dev.inmo.tgbotapi.types.stories.StoryArea + +public suspend fun TelegramBot.postStory( + businessConnectionId: BusinessConnectionId, + content: InputStoryContent, + activePeriod: Seconds, + textSources: List, + areas: List = emptyList(), + postToChatPage: Boolean = false, + protectContent: Boolean = false, +): Story = execute( + PostStory( + businessConnectionId = businessConnectionId, + content = content, + activePeriod = activePeriod, + textSources = textSources, + areas = areas, + postToChatPage = postToChatPage, + protectContent = protectContent + ) +) + +public suspend fun TelegramBot.postStory( + businessConnectionId: BusinessConnectionId, + content: InputStoryContent, + activePeriod: Seconds, + text: String, + parseMode: ParseMode? = null, + areas: List = emptyList(), + postToChatPage: Boolean = false, + protectContent: Boolean = false, +): Story = execute( + PostStory( + businessConnectionId = businessConnectionId, + content = content, + activePeriod = activePeriod, + text = text, + parseMode = parseMode, + areas = areas, + postToChatPage = postToChatPage, + protectContent = protectContent + ) +) + +public suspend fun TelegramBot.postStory( + businessConnectionId: BusinessConnectionId, + content: InputStoryContent, + activePeriod: Seconds, + areas: List = emptyList(), + postToChatPage: Boolean = false, + protectContent: Boolean = false, +): Story = execute( + PostStory( + businessConnectionId = businessConnectionId, + content = content, + activePeriod = activePeriod, + areas = areas, + postToChatPage = postToChatPage, + protectContent = protectContent + ) +) diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 633a6ea3c4..07a9584840 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -8340,6 +8340,114 @@ public final class dev/inmo/tgbotapi/requests/stories/DeleteStory$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/inmo/tgbotapi/requests/stories/EditStory : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/requests/abstracts/BusinessRequest$Multipart { + public static final field Companion Ldev/inmo/tgbotapi/requests/stories/EditStory$Companion; + public synthetic fun (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-T-_HSQI ()Ljava/lang/String; + public final fun component2-zjviAWM ()J + public final fun component3 ()Ldev/inmo/tgbotapi/types/stories/InputStoryContent; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ldev/inmo/tgbotapi/types/message/ParseMode; + public final fun component7 ()Ljava/util/List; + public final fun copy-isQzPXY (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Ljava/util/List;)Ldev/inmo/tgbotapi/requests/stories/EditStory; + public static synthetic fun copy-isQzPXY$default (Ldev/inmo/tgbotapi/requests/stories/EditStory;Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/stories/EditStory; + public fun equals (Ljava/lang/Object;)Z + public final fun getAreas ()Ljava/util/List; + public fun getBusinessConnectionId-T-_HSQI ()Ljava/lang/String; + public synthetic fun getBusinessConnectionId-nXr5wdE ()Ljava/lang/String; + public final fun getContent ()Ldev/inmo/tgbotapi/types/stories/InputStoryContent; + public fun getData ()Ldev/inmo/tgbotapi/requests/abstracts/SimpleRequest; + public fun getEntities ()Ljava/util/List; + public fun getMediaMap ()Ljava/util/Map; + public fun getParamsJson ()Lkotlinx/serialization/json/JsonObject; + public fun getParseMode ()Ldev/inmo/tgbotapi/types/message/ParseMode; + public fun getRequestSerializer ()Lkotlinx/serialization/SerializationStrategy; + public fun getResultDeserializer ()Lkotlinx/serialization/DeserializationStrategy; + public final fun getStoryId-zjviAWM ()J + public fun getText ()Ljava/lang/String; + public fun getTextSources ()Ljava/util/List; + public fun hashCode ()I + public fun method ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public synthetic class dev/inmo/tgbotapi/requests/stories/EditStory$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/requests/stories/EditStory$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/requests/stories/EditStory; + 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/requests/stories/EditStory;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/requests/stories/EditStory$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/requests/stories/PostStory : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/requests/abstracts/BusinessRequest$Multipart { + public static final field ACTIVE_PERIOD_12_HOURS I + public static final field ACTIVE_PERIOD_24_HOURS I + public static final field ACTIVE_PERIOD_48_HOURS I + public static final field ACTIVE_PERIOD_6_HOURS I + public static final field Companion Ldev/inmo/tgbotapi/requests/stories/PostStory$Companion; + public synthetic fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;Ljava/util/List;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;Ljava/util/List;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-T-_HSQI ()Ljava/lang/String; + public final fun component2 ()Ldev/inmo/tgbotapi/types/stories/InputStoryContent; + public final fun component3 ()I + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ldev/inmo/tgbotapi/types/message/ParseMode; + public final fun component7 ()Ljava/util/List; + public final fun component8 ()Z + public final fun component9 ()Z + public final fun copy-beo5bKg (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Ljava/util/List;ZZ)Ldev/inmo/tgbotapi/requests/stories/PostStory; + public static synthetic fun copy-beo5bKg$default (Ldev/inmo/tgbotapi/requests/stories/PostStory;Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Ljava/util/List;ZZILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/stories/PostStory; + public fun equals (Ljava/lang/Object;)Z + public final fun getActivePeriod ()I + public final fun getAreas ()Ljava/util/List; + public fun getBusinessConnectionId-T-_HSQI ()Ljava/lang/String; + public synthetic fun getBusinessConnectionId-nXr5wdE ()Ljava/lang/String; + public final fun getContent ()Ldev/inmo/tgbotapi/types/stories/InputStoryContent; + public fun getData ()Ldev/inmo/tgbotapi/requests/abstracts/SimpleRequest; + public fun getEntities ()Ljava/util/List; + public fun getMediaMap ()Ljava/util/Map; + public fun getParamsJson ()Lkotlinx/serialization/json/JsonObject; + public fun getParseMode ()Ldev/inmo/tgbotapi/types/message/ParseMode; + public final fun getPostToChatPage ()Z + public final fun getProtectContent ()Z + public fun getRequestSerializer ()Lkotlinx/serialization/SerializationStrategy; + public fun getResultDeserializer ()Lkotlinx/serialization/DeserializationStrategy; + public fun getText ()Ljava/lang/String; + public fun getTextSources ()Ljava/util/List; + public fun hashCode ()I + public fun method ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public synthetic class dev/inmo/tgbotapi/requests/stories/PostStory$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/requests/stories/PostStory$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/requests/stories/PostStory; + 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/requests/stories/PostStory;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/requests/stories/PostStory$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/requests/verifications/RemoveChatVerification : dev/inmo/tgbotapi/abstracts/types/ChatRequest, dev/inmo/tgbotapi/requests/abstracts/SimpleRequest { public static final field Companion Ldev/inmo/tgbotapi/requests/verifications/RemoveChatVerification$Companion; public fun (Ldev/inmo/tgbotapi/types/ChatIdentifier;)V @@ -9459,6 +9567,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field accentColorIdField Ljava/lang/String; public static final field acceptedGiftTypesField Ljava/lang/String; public static final field actionField Ljava/lang/String; + public static final field activePeriodField Ljava/lang/String; public static final field activeUsernamesField Ljava/lang/String; public static final field actorChatField Ljava/lang/String; public static final field addDateField Ljava/lang/String; @@ -9479,6 +9588,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field allowsWriteToPMField Ljava/lang/String; public static final field amountField Ljava/lang/String; public static final field animationField Ljava/lang/String; + public static final field areasField Ljava/lang/String; public static final field audioDurationField Ljava/lang/String; public static final field audioField Ljava/lang/String; public static final field audioFileIdField Ljava/lang/String; @@ -9581,6 +9691,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field colorsField Ljava/lang/String; public static final field commissionPerMilleField Ljava/lang/String; public static final field containsMasksField Ljava/lang/String; + public static final field contentField Ljava/lang/String; public static final field convertStarCountField Ljava/lang/String; public static final field copyTextField Ljava/lang/String; public static final field cornerRadiusPercentageField Ljava/lang/String; @@ -9829,6 +9940,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field pollIdField Ljava/lang/String; public static final field positionField Ljava/lang/String; public static final field postCodeField Ljava/lang/String; + public static final field postToChatPageField Ljava/lang/String; public static final field preCheckoutQueryIdField Ljava/lang/String; public static final field preferLargeMediaField Ljava/lang/String; public static final field preferSmallMediaField Ljava/lang/String; @@ -28389,9 +28501,14 @@ public final class dev/inmo/tgbotapi/types/stories/StoryAreaType$SuggestedReacti } public abstract interface class dev/inmo/tgbotapi/types/stories/StoryAreaType$Type { + public static final field Companion Ldev/inmo/tgbotapi/types/stories/StoryAreaType$Type$Companion; public abstract fun getName ()Ljava/lang/String; } +public final class dev/inmo/tgbotapi/types/stories/StoryAreaType$Type$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/types/stories/StoryAreaType$UniqueGift : dev/inmo/tgbotapi/types/stories/StoryAreaType { public static final field Companion Ldev/inmo/tgbotapi/types/stories/StoryAreaType$UniqueGift$Companion; public fun (Ljava/lang/String;)V diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/stories/EditStory.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/stories/EditStory.kt new file mode 100644 index 0000000000..ba6a68553d --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/stories/EditStory.kt @@ -0,0 +1,108 @@ +package dev.inmo.tgbotapi.requests.stories + +import dev.inmo.tgbotapi.abstracts.TextedOutput +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.requests.stories.PostStory +import dev.inmo.tgbotapi.types.Seconds +import dev.inmo.tgbotapi.types.StoryId +import dev.inmo.tgbotapi.types.activePeriodField +import dev.inmo.tgbotapi.types.areasField +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.captionEntitiesField +import dev.inmo.tgbotapi.types.captionField +import dev.inmo.tgbotapi.types.contentField +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.RawMessageEntity +import dev.inmo.tgbotapi.types.message.asTextSources +import dev.inmo.tgbotapi.types.message.parseModeField +import dev.inmo.tgbotapi.types.message.textsources.TextSource +import dev.inmo.tgbotapi.types.message.toRawMessageEntities +import dev.inmo.tgbotapi.types.postToChatPageField +import dev.inmo.tgbotapi.types.protectContentField +import dev.inmo.tgbotapi.types.stories.InputStoryContent +import dev.inmo.tgbotapi.types.stories.Story +import dev.inmo.tgbotapi.types.stories.StoryArea +import dev.inmo.tgbotapi.types.storyIdField +import dev.inmo.tgbotapi.utils.extensions.makeString +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy + +@Serializable +data class EditStory private constructor( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(storyIdField) + val storyId: StoryId, + @SerialName(contentField) + val content: InputStoryContent, + @SerialName(captionField) + override val text: String? = null, + @SerialName(parseModeField) + override val parseMode: ParseMode? = null, + @SerialName(captionEntitiesField) + private val textEntities: List? = null, + @SerialName(areasField) + val areas: List = emptyList(), +) : BusinessRequest.Multipart, TextedOutput { + override val textSources: List? by lazy { + textEntities ?.asTextSources(text ?: return@lazy null) + } + + override val resultDeserializer: DeserializationStrategy + get() = Story.serializer() + override val mediaMap: Map + get() = mapOf(content.media) + override val requestSerializer: SerializationStrategy<*> + get() = serializer() + + constructor( + businessConnectionId: BusinessConnectionId, + storyId: StoryId, + content: InputStoryContent, + textSources: List, + areas: List = emptyList(), + ) : this( + businessConnectionId = businessConnectionId, + storyId = storyId, + content = content, + text = textSources.makeString(), + parseMode = null, + textEntities = textSources.toRawMessageEntities(), + areas = areas, + ) + constructor( + businessConnectionId: BusinessConnectionId, + storyId: StoryId, + content: InputStoryContent, + text: String, + parseMode: ParseMode? = null, + areas: List = emptyList(), + ) : this( + businessConnectionId = businessConnectionId, + storyId = storyId, + content = content, + text = text, + parseMode = parseMode, + textEntities = null, + areas = areas, + ) + constructor( + businessConnectionId: BusinessConnectionId, + storyId: StoryId, + content: InputStoryContent, + areas: List = emptyList(), + ) : this( + businessConnectionId = businessConnectionId, + storyId = storyId, + content = content, + text = null, + parseMode = null, + textEntities = null, + areas = areas, + ) + override fun method(): String = "editStory" +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/stories/PostStory.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/stories/PostStory.kt new file mode 100644 index 0000000000..417c8d4436 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/stories/PostStory.kt @@ -0,0 +1,129 @@ +package dev.inmo.tgbotapi.requests.stories + +import dev.inmo.tgbotapi.abstracts.TextedOutput +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.types.Seconds +import dev.inmo.tgbotapi.types.activePeriodField +import dev.inmo.tgbotapi.types.areasField +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.captionEntitiesField +import dev.inmo.tgbotapi.types.captionField +import dev.inmo.tgbotapi.types.contentField +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.RawMessageEntity +import dev.inmo.tgbotapi.types.message.asTextSources +import dev.inmo.tgbotapi.types.message.parseModeField +import dev.inmo.tgbotapi.types.message.textsources.TextSource +import dev.inmo.tgbotapi.types.message.toRawMessageEntities +import dev.inmo.tgbotapi.types.postToChatPageField +import dev.inmo.tgbotapi.types.protectContentField +import dev.inmo.tgbotapi.types.stories.InputStoryContent +import dev.inmo.tgbotapi.types.stories.Story +import dev.inmo.tgbotapi.types.stories.StoryArea +import dev.inmo.tgbotapi.utils.extensions.makeString +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy + +@Serializable +data class PostStory private constructor( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(contentField) + val content: InputStoryContent, + @SerialName(activePeriodField) + val activePeriod: Seconds, + @SerialName(captionField) + override val text: String? = null, + @SerialName(parseModeField) + override val parseMode: ParseMode? = null, + @SerialName(captionEntitiesField) + private val textEntities: List? = null, + @SerialName(areasField) + val areas: List = emptyList(), + @SerialName(postToChatPageField) + val postToChatPage: Boolean = false, + @SerialName(protectContentField) + val protectContent: Boolean = false, +) : BusinessRequest.Multipart, TextedOutput { + override val textSources: List? by lazy { + textEntities ?.asTextSources(text ?: return@lazy null) + } + + override val resultDeserializer: DeserializationStrategy + get() = Story.serializer() + override val mediaMap: Map + get() = mapOf(content.media) + override val requestSerializer: SerializationStrategy<*> + get() = serializer() + + constructor( + businessConnectionId: BusinessConnectionId, + content: InputStoryContent, + activePeriod: Seconds, + textSources: List, + areas: List = emptyList(), + postToChatPage: Boolean = false, + protectContent: Boolean = false, + ) : this( + businessConnectionId = businessConnectionId, + content = content, + activePeriod = activePeriod, + text = textSources.makeString(), + parseMode = null, + textEntities = textSources.toRawMessageEntities(), + areas = areas, + postToChatPage = postToChatPage, + protectContent = protectContent + ) + constructor( + businessConnectionId: BusinessConnectionId, + content: InputStoryContent, + activePeriod: Seconds, + text: String, + parseMode: ParseMode? = null, + areas: List = emptyList(), + postToChatPage: Boolean = false, + protectContent: Boolean = false, + ) : this( + businessConnectionId = businessConnectionId, + content = content, + activePeriod = activePeriod, + text = text, + parseMode = parseMode, + textEntities = null, + areas = areas, + postToChatPage = postToChatPage, + protectContent = protectContent + ) + constructor( + businessConnectionId: BusinessConnectionId, + content: InputStoryContent, + activePeriod: Seconds, + areas: List = emptyList(), + postToChatPage: Boolean = false, + protectContent: Boolean = false, + ) : this( + businessConnectionId = businessConnectionId, + content = content, + activePeriod = activePeriod, + text = null, + parseMode = null, + textEntities = null, + areas = areas, + postToChatPage = postToChatPage, + protectContent = protectContent + ) + + override fun method(): String = "postStory" + + companion object { + const val ACTIVE_PERIOD_6_HOURS: Seconds = 6 * 3600 + const val ACTIVE_PERIOD_12_HOURS: Seconds = 12 * 3600 + const val ACTIVE_PERIOD_24_HOURS: Seconds = 24 * 3600 // 86400 + const val ACTIVE_PERIOD_48_HOURS: Seconds = 48 * 3600 // 2 * 86400 + } +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt index 889df9d354..9357318d56 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt @@ -744,6 +744,10 @@ const val colorsField = "colors" const val topColorField = "top_color" const val bottomColorField = "bottom_color" const val rotationAngleField = "rotation_angle" +const val contentField = "content" +const val activePeriodField = "active_period" +const val areasField = "areas" +const val postToChatPageField = "post_to_chat_page" const val fillField = "fill" const val darkThemeDimmingField = "dark_theme_dimming" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryArea.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryArea.kt index c45b6f0b86..cf5ec9ea0f 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryArea.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryArea.kt @@ -6,6 +6,8 @@ import kotlinx.serialization.Serializable @Serializable data class StoryArea( + @SerialName(positionField) val position: StoryAreaPosition, + @SerialName(typeField) val type: StoryAreaType ) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryAreaType.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryAreaType.kt index 180f91cde9..4cda1cc99c 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryAreaType.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/stories/StoryAreaType.kt @@ -8,6 +8,7 @@ import dev.inmo.tgbotapi.utils.IntRGB24HEXAColorSerializer import dev.inmo.tgbotapi.utils.LongRGBAFromHEXAColorSerializer import dev.inmo.tgbotapi.utils.decodeDataAndJson import kotlinx.serialization.* +import kotlinx.serialization.builtins.serializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder @@ -18,6 +19,7 @@ import kotlin.jvm.JvmInline sealed interface StoryAreaType { val type: Type + @Serializable(TypeSerializer::class) sealed interface Type { val name: String } @@ -113,6 +115,26 @@ sealed interface StoryAreaType { } companion object : KSerializer { + private object TypeSerializer : KSerializer { + override val descriptor: SerialDescriptor + get() = String.serializer().descriptor + + override fun deserialize(decoder: Decoder): Type { + val raw = decoder.decodeString() + return when (raw) { + Location.name -> Location + SuggestedReaction.name -> SuggestedReaction + Link.name -> Link + Weather.name -> Weather + UniqueGift.name -> UniqueGift + else -> Unknown.Custom(raw) + } + } + + override fun serialize(encoder: Encoder, value: Type) { + encoder.encodeString(value.name) + } + } @Serializable data class Surrogate( @SerialName(typeField)