mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-07-03 00:25:29 +00:00
Add Bot API 10.1 Polls support (Link, InputMediaLink)
Adds the Link type implementing PollMedia (the url attached to a poll option), parses the new `link` field in PollMedia, and adds TelegramMediaLink (InputMediaLink) usable as InputPollOptionMedia. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -556,6 +556,7 @@ const val stickerField = "sticker"
|
||||
const val oldStickerField = "old_sticker"
|
||||
const val keywordsField = "keywords"
|
||||
const val urlField = "url"
|
||||
const val linkField = "link"
|
||||
const val addressField = "address"
|
||||
const val actionField = "action"
|
||||
const val positionField = "position"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.inmo.tgbotapi.types
|
||||
|
||||
import dev.inmo.tgbotapi.types.media.PollMedia
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
/**
|
||||
* Represents an HTTP link.
|
||||
*
|
||||
* @see <a href="https://core.telegram.org/bots/api#link">Link</a>
|
||||
*/
|
||||
@Serializable
|
||||
data class Link(
|
||||
@SerialName(urlField)
|
||||
val url: String
|
||||
) : PollMedia
|
||||
@@ -27,6 +27,7 @@ object InputPollOptionMediaSerializer : KSerializer<InputPollOptionMedia> {
|
||||
override fun serialize(encoder: Encoder, value: InputPollOptionMedia) {
|
||||
when (value) {
|
||||
is TelegramMediaAnimation -> TelegramMediaAnimation.serializer().serialize(encoder, value)
|
||||
is TelegramMediaLink -> TelegramMediaLink.serializer().serialize(encoder, value)
|
||||
is TelegramMediaLivePhoto -> TelegramMediaLivePhoto.serializer().serialize(encoder, value)
|
||||
is TelegramMediaLocation -> TelegramMediaLocation.serializer().serialize(encoder, value)
|
||||
is TelegramMediaPhoto -> TelegramMediaPhoto.serializer().serialize(encoder, value)
|
||||
|
||||
@@ -10,6 +10,8 @@ import dev.inmo.tgbotapi.types.files.LivePhotoFile
|
||||
import dev.inmo.tgbotapi.types.files.PhotoFile
|
||||
import dev.inmo.tgbotapi.types.files.Sticker
|
||||
import dev.inmo.tgbotapi.types.files.VideoFile
|
||||
import dev.inmo.tgbotapi.types.Link
|
||||
import dev.inmo.tgbotapi.types.linkField
|
||||
import dev.inmo.tgbotapi.types.livePhotoField
|
||||
import dev.inmo.tgbotapi.types.location.StaticLocation
|
||||
import dev.inmo.tgbotapi.types.locationField
|
||||
@@ -36,6 +38,8 @@ interface PollMedia : BaseTelegramMediaFile {
|
||||
val audio: AudioFile? = null,
|
||||
@SerialName(documentField)
|
||||
val document: DocumentFile? = null,
|
||||
@SerialName(linkField)
|
||||
val link: Link? = null,
|
||||
@SerialName(livePhotoField)
|
||||
val livePhoto: LivePhotoFile? = null,
|
||||
@SerialName(photoField)
|
||||
@@ -61,6 +65,7 @@ interface PollMedia : BaseTelegramMediaFile {
|
||||
surrogate.animation != null -> surrogate.animation
|
||||
surrogate.audio != null -> surrogate.audio
|
||||
surrogate.document != null -> surrogate.document
|
||||
surrogate.link != null -> surrogate.link
|
||||
surrogate.livePhoto != null -> surrogate.livePhoto
|
||||
surrogate.photo != null -> surrogate.photo
|
||||
surrogate.sticker != null -> surrogate.sticker
|
||||
@@ -76,6 +81,7 @@ interface PollMedia : BaseTelegramMediaFile {
|
||||
animation = value as? AnimationFile,
|
||||
audio = value as? AudioFile,
|
||||
document = value as? DocumentFile,
|
||||
link = value as? Link,
|
||||
livePhoto = value as? LivePhotoFile,
|
||||
photo = value as? PhotoFile,
|
||||
sticker = value as? Sticker,
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package dev.inmo.tgbotapi.types.media
|
||||
|
||||
import dev.inmo.tgbotapi.types.typeField
|
||||
import dev.inmo.tgbotapi.types.urlField
|
||||
import kotlinx.serialization.EncodeDefault
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
/**
|
||||
* Represents an HTTP link to be sent. Can be used as [InputPollOptionMedia].
|
||||
*
|
||||
* @see <a href="https://core.telegram.org/bots/api#inputmedialink">InputMediaLink</a>
|
||||
*/
|
||||
@Serializable
|
||||
data class TelegramMediaLink(
|
||||
@SerialName(urlField)
|
||||
val url: String,
|
||||
) : InputPollOptionMedia {
|
||||
@EncodeDefault
|
||||
@SerialName(typeField)
|
||||
override val type: String = TYPE
|
||||
|
||||
companion object {
|
||||
const val TYPE = "link"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user