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:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user