1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-06-01 07:25:23 +00:00
tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/Abstracts.kt

183 lines
7.3 KiB
Kotlin
Raw Normal View History

2022-05-01 05:52:02 +00:00
package dev.inmo.tgbotapi.types.message.content
2022-12-30 14:28:22 +00:00
import dev.inmo.tgbotapi.abstracts.SpoilerableData
2023-05-18 06:59:35 +00:00
import dev.inmo.tgbotapi.abstracts.TextedInput
2022-08-05 18:39:46 +00:00
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
2022-05-01 05:52:02 +00:00
import dev.inmo.tgbotapi.requests.abstracts.Request
2024-01-07 16:42:46 +00:00
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
2022-05-01 05:52:02 +00:00
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
import dev.inmo.tgbotapi.types.files.TelegramMediaFile
import dev.inmo.tgbotapi.types.media.TelegramMedia
import dev.inmo.tgbotapi.types.message.abstracts.*
import dev.inmo.tgbotapi.utils.RiskFeature
2023-08-31 20:41:16 +00:00
import kotlinx.serialization.Serializable
2022-05-01 05:52:02 +00:00
import kotlinx.serialization.modules.*
2023-08-31 20:41:16 +00:00
@Serializable
2022-05-01 05:52:02 +00:00
sealed interface MessageContent: ResendableContent {
companion object {
@RiskFeature("This serialization module can be changed in near releases")
fun serializationModule(
2022-11-06 08:07:31 +00:00
visualMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<VisualMediaGroupPartContent>.() -> Unit = {},
documentMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<DocumentMediaGroupPartContent>.() -> Unit = {},
audioMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<AudioMediaGroupPartContent>.() -> Unit = {},
mediaGroupPartContentAdditionalBuilder: PolymorphicModuleBuilder<MediaGroupPartContent>.() -> Unit = {},
2022-05-01 05:52:02 +00:00
textedMediaContentAdditionalBuilder: PolymorphicModuleBuilder<TextedMediaContent>.() -> Unit = {},
mediaContentAdditionalBuilder: PolymorphicModuleBuilder<MediaContent>.() -> Unit = {},
spoilerableMediaContentAdditionalBuilder: PolymorphicModuleBuilder<SpoilerableMediaContent>.() -> Unit = {},
2022-05-01 05:52:02 +00:00
mediaCollectionContentAdditionalBuilder: PolymorphicModuleBuilder<MediaCollectionContent<*>>.() -> Unit = {},
additionalBuilder: PolymorphicModuleBuilder<MessageContent>.() -> Unit = {}
) = SerializersModule {
polymorphic(MessageContent::class) {
subclass(ContactContent::class)
subclass(VenueContent::class)
subclass(PollContent::class)
subclass(DiceContent::class)
subclass(TextContent::class)
subclass(LocationContent::class, LocationContentSerializer)
subclass(PhotoContent::class)
subclass(VideoContent::class)
subclass(AudioContent::class)
subclass(DocumentContent::class)
subclass(VoiceContent::class)
subclass(VideoNoteContent::class)
subclass(AnimationContent::class)
subclass(StickerContent::class)
subclass(InvoiceContent::class)
2023-08-31 20:41:16 +00:00
subclass(StoryContent::class)
2024-01-07 13:04:23 +00:00
subclass(GiveawayPublicResultsContent::class)
2024-01-09 05:43:04 +00:00
subclass(GiveawayContent::class)
2022-05-01 05:52:02 +00:00
additionalBuilder()
}
2023-05-18 06:59:35 +00:00
polymorphic(TextedContent::class) {
subclass(TextContent::class)
subclass(VoiceContent::class)
subclass(MediaGroupContent::class)
subclass(AudioContent::class)
subclass(DocumentContent::class)
subclass(VideoContent::class)
subclass(PhotoContent::class)
subclass(AnimationContent::class)
}
2022-05-01 05:52:02 +00:00
polymorphic(MediaCollectionContent::class) {
subclass(PhotoContent::class)
mediaCollectionContentAdditionalBuilder()
}
polymorphic(MediaContent::class) {
subclass(VideoNoteContent::class)
subclass(VideoContent::class)
subclass(StickerContent::class)
subclass(PhotoContent::class)
subclass(VoiceContent::class)
subclass(AnimationContent::class)
subclass(AudioContent::class)
subclass(DocumentContent::class)
mediaContentAdditionalBuilder()
}
polymorphic(SpoilerableMediaContent::class) {
subclass(VideoContent::class)
subclass(PhotoContent::class)
subclass(AnimationContent::class)
spoilerableMediaContentAdditionalBuilder()
}
2022-05-01 05:52:02 +00:00
polymorphic(TextedMediaContent::class) {
subclass(PhotoContent::class)
subclass(VoiceContent::class)
subclass(AnimationContent::class)
subclass(AudioContent::class)
subclass(DocumentContent::class)
textedMediaContentAdditionalBuilder()
}
2022-11-06 08:07:31 +00:00
polymorphic(MediaGroupPartContent::class) {
2022-05-01 05:52:02 +00:00
subclass(PhotoContent::class)
subclass(AudioContent::class)
subclass(DocumentContent::class)
2022-11-06 08:07:31 +00:00
mediaGroupPartContentAdditionalBuilder()
2022-05-01 05:52:02 +00:00
}
2022-11-06 08:07:31 +00:00
polymorphic(AudioMediaGroupPartContent::class) {
2022-05-01 05:52:02 +00:00
subclass(AudioContent::class)
audioMediaGroupContentAdditionalBuilder()
}
2022-11-06 08:07:31 +00:00
polymorphic(DocumentMediaGroupPartContent::class) {
2022-05-01 05:52:02 +00:00
subclass(DocumentContent::class)
documentMediaGroupContentAdditionalBuilder()
}
2022-11-06 08:07:31 +00:00
polymorphic(VisualMediaGroupPartContent::class) {
2022-05-01 05:52:02 +00:00
subclass(PhotoContent::class)
subclass(VideoContent::class)
visualMediaGroupContentAdditionalBuilder()
}
}
}
}
sealed interface MediaCollectionContent<T: TelegramMediaFile>: MessageContent, MediaContent {
val mediaCollection: List<T>
}
2023-05-18 06:59:35 +00:00
/**
* All the subtypes of this content will have [text] and [textSources] fields
*/
sealed interface TextedContent : MessageContent, TextedInput
2022-05-01 05:52:02 +00:00
sealed interface MediaContent: MessageContent {
val media: TelegramMediaFile
fun asTelegramMedia(): TelegramMedia
}
2022-12-30 14:28:22 +00:00
sealed interface SpoilerableMediaContent : MediaContent, SpoilerableData
2022-08-05 10:31:39 +00:00
@ClassCastsIncluded
2022-05-01 05:52:02 +00:00
sealed interface ResendableContent {
fun createResend(
chatId: ChatIdentifier,
messageThreadId: MessageThreadId? = chatId.threadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
2022-05-01 05:52:02 +00:00
disableNotification: Boolean = false,
protectContent: Boolean = false,
2024-01-07 16:42:46 +00:00
replyParameters: ReplyParameters? = null,
2022-05-01 05:52:02 +00:00
replyMarkup: KeyboardMarkup? = null
2024-01-07 09:52:49 +00:00
): Request<out AccessibleMessage>
2024-01-07 16:42:46 +00:00
fun createResend(
chatId: ChatIdentifier,
messageThreadId: MessageThreadId? = chatId.threadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
2024-01-07 16:42:46 +00:00
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId?,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
): Request<out AccessibleMessage> = createResend(
chatId = chatId,
messageThreadId = messageThreadId,
businessConnectionId = businessConnectionId,
2024-01-07 16:42:46 +00:00
disableNotification = disableNotification,
protectContent = protectContent,
replyParameters = replyToMessageId ?.let {
ReplyParameters(
chatId,
replyToMessageId,
2024-01-08 04:05:41 +00:00
allowSendingWithoutReply = allowSendingWithoutReply
2024-01-07 16:42:46 +00:00
)
},
replyMarkup = replyMarkup
)
2022-05-01 05:52:02 +00:00
}