1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2026-04-22 01:42:26 +00:00

add support of PollOptionAdded and PolloptionDeleted

This commit is contained in:
2026-04-08 18:10:39 +06:00
parent 277c329ab9
commit 243a3ca626
11 changed files with 2634 additions and 2334 deletions

View File

@@ -323,6 +323,10 @@ const val activeUsernamesField = "active_usernames"
const val customTitleField = "custom_title"
const val optionIdsField = "option_ids"
const val optionPersistentIdsField = "option_persistent_ids"
const val optionPersistentIdField = "option_persistent_id"
const val optionTextField = "option_text"
const val optionTextEntitiesField = "option_text_entities"
const val pollMessageField = "poll_message"
const val parentChatField = "parent_chat"
const val voterChatField = "voter_chat"
const val ipAddressField = "ip_address"

View File

@@ -20,6 +20,8 @@ import dev.inmo.tgbotapi.types.message.content.GiveawayContent
import dev.inmo.tgbotapi.types.location.Location
import dev.inmo.tgbotapi.types.managed_bots.ManagedBotCreated
import dev.inmo.tgbotapi.types.managed_bots.ManagedBotUpdated
import dev.inmo.tgbotapi.types.polls.PollOptionAdded
import dev.inmo.tgbotapi.types.polls.PollOptionDeleted
import dev.inmo.tgbotapi.types.message.ChatEvents.*
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.*
import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicClosed
@@ -207,7 +209,9 @@ internal data class RawMessage(
private val gift_upgrade_sent: GiftSentOrReceivedEvent.RegularGift? = null,
private val chat_owner_left: ChatOwnerLeft? = null,
private val chat_owner_changed: ChatOwnerChanged? = null,
private val managed_bot_created: ManagedBotCreated? = null
private val managed_bot_created: ManagedBotCreated? = null,
private val poll_option_added: PollOptionAdded? = null,
private val poll_option_deleted: PollOptionDeleted? = null,
) {
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
private val checkedFrom = from ?.takeIf { !it.isFakeTelegramUser() }
@@ -347,6 +351,8 @@ internal data class RawMessage(
suggested_post_paid != null -> suggested_post_paid
suggested_post_refunded != null -> suggested_post_refunded
managed_bot_created != null -> managed_bot_created
poll_option_added != null -> poll_option_added
poll_option_deleted != null -> poll_option_deleted
else -> null
}
}

View File

@@ -60,7 +60,7 @@ sealed interface PollOption : TextedInput {
@Serializable(PollOption.LatelyAdded.Companion::class)
sealed interface LatelyAdded : PollOption {
val additionDate: TelegramDate?
val additionDate: TelegramDate
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PollOption.LatelyAdded.Companion::class)
@@ -77,7 +77,7 @@ sealed interface PollOption : TextedInput {
val addedByUser: User,
@Serializable(TelegramDateSerializer::class)
@SerialName(additionDateField)
override val additionDate: TelegramDate? = null
override val additionDate: TelegramDate
) : LatelyAdded {
override fun asInput(): InputPollOption = InputPollOption(text, null, textSources)
}
@@ -97,7 +97,7 @@ sealed interface PollOption : TextedInput {
val addedByChat: Chat,
@Serializable(TelegramDateSerializer::class)
@SerialName(additionDateField)
override val additionDate: TelegramDate? = null
override val additionDate: TelegramDate
) : LatelyAdded {
override fun asInput(): InputPollOption = InputPollOption(text, null, textSources)
}
@@ -110,13 +110,21 @@ sealed interface PollOption : TextedInput {
val surrogate = PollOptionSurrogate.serializer().deserialize(decoder)
val textSources = surrogate.textEntities.asTextSources(surrogate.text)
return when {
surrogate.addedByUser != null -> AddedByUser(
surrogate.id, surrogate.text, textSources, surrogate.votes,
surrogate.addedByUser, surrogate.additionDate
surrogate.addedByUser != null && surrogate.additionDate != null -> AddedByUser(
id = surrogate.id,
text = surrogate.text,
textSources = textSources,
votes = surrogate.votes,
addedByUser = surrogate.addedByUser,
additionDate = surrogate.additionDate
)
surrogate.addedByChat != null -> AddedByChat(
surrogate.id, surrogate.text, textSources, surrogate.votes,
surrogate.addedByChat, surrogate.additionDate
surrogate.addedByChat != null && surrogate.additionDate != null -> AddedByChat(
id = surrogate.id,
text = surrogate.text,
textSources = textSources,
votes = surrogate.votes,
addedByChat = surrogate.addedByChat,
additionDate = surrogate.additionDate
)
else -> error("LatelyAdded poll option must have either added_by_user or added_by_chat")
}
@@ -177,7 +185,7 @@ sealed interface PollOption : TextedInput {
val surrogate = PollOptionSurrogate.serializer().deserialize(decoder)
val textSources = surrogate.textEntities.asTextSources(surrogate.text)
return when {
surrogate.addedByUser != null -> LatelyAdded.AddedByUser(
surrogate.addedByUser != null && surrogate.additionDate != null -> LatelyAdded.AddedByUser(
id = surrogate.id,
text = surrogate.text,
textSources = textSources,
@@ -185,7 +193,7 @@ sealed interface PollOption : TextedInput {
addedByUser = surrogate.addedByUser,
additionDate = surrogate.additionDate
)
surrogate.addedByChat != null -> LatelyAdded.AddedByChat(
surrogate.addedByChat != null && surrogate.additionDate != null -> LatelyAdded.AddedByChat(
id = surrogate.id,
text = surrogate.text,
textSources = textSources,

View File

@@ -0,0 +1,69 @@
package dev.inmo.tgbotapi.types.polls
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
import dev.inmo.tgbotapi.types.message.RawMessageEntity
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializerClass
import dev.inmo.tgbotapi.types.message.asTextSources
import dev.inmo.tgbotapi.types.message.textsources.TextSource
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable(PollOptionAdded.Companion::class)
data class PollOptionAdded(
@SerialName(pollMessageField)
val pollMessage: Message? = null,
@SerialName(optionPersistentIdField)
val optionPersistentId: PollOptionPersistentId,
@SerialName(optionTextField)
val optionText: String,
@SerialName(optionTextEntitiesField)
val optionTextSources: List<TextSource> = emptyList(),
) : CommonEvent {
companion object : KSerializer<PollOptionAdded> {
@Serializable
private data class Surrogate(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(pollMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializerClass::class)
val pollMessage: Message? = null,
@SerialName(optionPersistentIdField)
val optionPersistentId: PollOptionPersistentId,
@SerialName(optionTextField)
val optionText: String,
@SerialName(optionTextEntitiesField)
val optionTextEntities: List<RawMessageEntity> = emptyList(),
)
override val descriptor: SerialDescriptor
get() = Surrogate.serializer().descriptor
override fun deserialize(decoder: Decoder): PollOptionAdded {
val surrogate = Surrogate.serializer().deserialize(decoder)
return PollOptionAdded(
pollMessage = surrogate.pollMessage,
optionPersistentId = surrogate.optionPersistentId,
optionText = surrogate.optionText,
optionTextSources = surrogate.optionTextEntities.asTextSources(surrogate.optionText),
)
}
override fun serialize(encoder: Encoder, value: PollOptionAdded) {
Surrogate.serializer().serialize(
encoder,
Surrogate(
pollMessage = value.pollMessage,
optionPersistentId = value.optionPersistentId,
optionText = value.optionText,
optionTextEntities = value.optionTextSources.toRawMessageEntities(),
)
)
}
}
}

View File

@@ -0,0 +1,69 @@
package dev.inmo.tgbotapi.types.polls
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
import dev.inmo.tgbotapi.types.message.RawMessageEntity
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializerClass
import dev.inmo.tgbotapi.types.message.asTextSources
import dev.inmo.tgbotapi.types.message.textsources.TextSource
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable(PollOptionDeleted.Companion::class)
data class PollOptionDeleted(
@SerialName(pollMessageField)
val pollMessage: Message? = null,
@SerialName(optionPersistentIdField)
val optionPersistentId: PollOptionPersistentId,
@SerialName(optionTextField)
val optionText: String,
@SerialName(optionTextEntitiesField)
val optionTextSources: List<TextSource> = emptyList(),
) : CommonEvent {
companion object : KSerializer<PollOptionDeleted> {
@Serializable
private data class Surrogate(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(pollMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializerClass::class)
val pollMessage: Message? = null,
@SerialName(optionPersistentIdField)
val optionPersistentId: PollOptionPersistentId,
@SerialName(optionTextField)
val optionText: String,
@SerialName(optionTextEntitiesField)
val optionTextEntities: List<RawMessageEntity> = emptyList(),
)
override val descriptor: SerialDescriptor
get() = Surrogate.serializer().descriptor
override fun deserialize(decoder: Decoder): PollOptionDeleted {
val surrogate = Surrogate.serializer().deserialize(decoder)
return PollOptionDeleted(
pollMessage = surrogate.pollMessage,
optionPersistentId = surrogate.optionPersistentId,
optionText = surrogate.optionText,
optionTextSources = surrogate.optionTextEntities.asTextSources(surrogate.optionText),
)
}
override fun serialize(encoder: Encoder, value: PollOptionDeleted) {
Surrogate.serializer().serialize(
encoder,
Surrogate(
pollMessage = value.pollMessage,
optionPersistentId = value.optionPersistentId,
optionText = value.optionText,
optionTextEntities = value.optionTextSources.toRawMessageEntities(),
)
)
}
}
}