1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-03 15:19:30 +00:00

add support of PostStory and EditStory

This commit is contained in:
2025-05-10 22:32:38 +06:00
parent effd12711f
commit e7367da3cb
9 changed files with 531 additions and 0 deletions

View File

@@ -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;

View File

@@ -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<TextSource>,
areas: List<StoryArea> = 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<StoryArea> = 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<StoryArea> = emptyList(),
): Story = execute(
EditStory(
businessConnectionId = businessConnectionId,
storyId = storyId,
content = content,
areas = areas,
)
)

View File

@@ -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<TextSource>,
areas: List<StoryArea> = 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<StoryArea> = 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<StoryArea> = emptyList(),
postToChatPage: Boolean = false,
protectContent: Boolean = false,
): Story = execute(
PostStory(
businessConnectionId = businessConnectionId,
content = content,
activePeriod = activePeriod,
areas = areas,
postToChatPage = postToChatPage,
protectContent = protectContent
)
)

View File

@@ -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 <init> (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 <init> (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 <init> (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;JLdev/inmo/tgbotapi/types/stories/InputStoryContent;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (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 <init> (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 <init> (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 <init> (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;Ljava/util/List;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;Ljava/util/List;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Ldev/inmo/tgbotapi/types/stories/InputStoryContent;ILjava/util/List;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (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 <init> (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 <init> (Ljava/lang/String;)V

View File

@@ -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<RawMessageEntity>? = null,
@SerialName(areasField)
val areas: List<StoryArea> = emptyList(),
) : BusinessRequest.Multipart<Story>, TextedOutput {
override val textSources: List<TextSource>? by lazy {
textEntities ?.asTextSources(text ?: return@lazy null)
}
override val resultDeserializer: DeserializationStrategy<Story>
get() = Story.serializer()
override val mediaMap: Map<String, MultipartFile>
get() = mapOf(content.media)
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
constructor(
businessConnectionId: BusinessConnectionId,
storyId: StoryId,
content: InputStoryContent,
textSources: List<TextSource>,
areas: List<StoryArea> = 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<StoryArea> = 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<StoryArea> = emptyList(),
) : this(
businessConnectionId = businessConnectionId,
storyId = storyId,
content = content,
text = null,
parseMode = null,
textEntities = null,
areas = areas,
)
override fun method(): String = "editStory"
}

View File

@@ -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<RawMessageEntity>? = null,
@SerialName(areasField)
val areas: List<StoryArea> = emptyList(),
@SerialName(postToChatPageField)
val postToChatPage: Boolean = false,
@SerialName(protectContentField)
val protectContent: Boolean = false,
) : BusinessRequest.Multipart<Story>, TextedOutput {
override val textSources: List<TextSource>? by lazy {
textEntities ?.asTextSources(text ?: return@lazy null)
}
override val resultDeserializer: DeserializationStrategy<Story>
get() = Story.serializer()
override val mediaMap: Map<String, MultipartFile>
get() = mapOf(content.media)
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
constructor(
businessConnectionId: BusinessConnectionId,
content: InputStoryContent,
activePeriod: Seconds,
textSources: List<TextSource>,
areas: List<StoryArea> = 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<StoryArea> = 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<StoryArea> = 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
}
}

View File

@@ -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"

View File

@@ -6,6 +6,8 @@ import kotlinx.serialization.Serializable
@Serializable
data class StoryArea(
@SerialName(positionField)
val position: StoryAreaPosition,
@SerialName(typeField)
val type: StoryAreaType
)

View File

@@ -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<StoryAreaType> {
private object TypeSerializer : KSerializer<Type> {
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)