mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-04-17 23:42:26 +00:00
continue fixing missing parts
This commit is contained in:
@@ -12,6 +12,7 @@ import dev.inmo.tgbotapi.types.message.RawMessageEntity
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
|
||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||
import dev.inmo.tgbotapi.utils.extensions.makeSourceString
|
||||
import dev.inmo.tgbotapi.utils.decodeDataAndJson
|
||||
import korlibs.time.seconds
|
||||
import kotlinx.serialization.*
|
||||
@@ -62,12 +63,10 @@ sealed interface Poll : ReplyInfo.External.ContentVariant, TextedInput {
|
||||
val votesCount: Int
|
||||
val isClosed: Boolean
|
||||
val isAnonymous: Boolean
|
||||
val scheduledCloseInfo: ScheduledCloseInfo?
|
||||
}
|
||||
|
||||
@Serializable(PollSerializer::class)
|
||||
sealed interface MultipleAnswersPoll : Poll {
|
||||
val allowMultipleAnswers: Boolean
|
||||
val allowsRevoting: Boolean
|
||||
val scheduledCloseInfo: ScheduledCloseInfo?
|
||||
val descriptionTextSources: List<TextSource>
|
||||
}
|
||||
|
||||
@Serializable
|
||||
@@ -90,12 +89,18 @@ private class RawPoll(
|
||||
val type: String,
|
||||
@SerialName(allowsMultipleAnswersField)
|
||||
val allowMultipleAnswers: Boolean = false,
|
||||
@SerialName(correctOptionIdField)
|
||||
@SerialName(correctOptionIdsField)
|
||||
val correctOptionIds: List<Int>? = null,
|
||||
@SerialName(explanationField)
|
||||
val explanation: String? = null,
|
||||
@SerialName(explanationEntitiesField)
|
||||
val explanationEntities: List<RawMessageEntity> = emptyList(),
|
||||
@SerialName(allowsRevotingField)
|
||||
val allowsRevoting: Boolean = true,
|
||||
@SerialName(descriptionField)
|
||||
val description: String? = null,
|
||||
@SerialName(descriptionEntitiesField)
|
||||
val descriptionEntities: List<RawMessageEntity> = emptyList(),
|
||||
@SerialName(openPeriodField)
|
||||
val openPeriod: LongSeconds? = null,
|
||||
@SerialName(closeDateField)
|
||||
@@ -123,6 +128,9 @@ data class UnknownPollType internal constructor(
|
||||
override val isClosed: Boolean = false,
|
||||
@SerialName(isAnonymousField)
|
||||
override val isAnonymous: Boolean = false,
|
||||
override val allowMultipleAnswers: Boolean = false,
|
||||
override val allowsRevoting: Boolean = true,
|
||||
override val descriptionTextSources: List<TextSource> = emptyList(),
|
||||
@Serializable
|
||||
val raw: JsonElement? = null
|
||||
) : Poll {
|
||||
@@ -145,8 +153,10 @@ data class RegularPoll(
|
||||
override val isClosed: Boolean = false,
|
||||
override val isAnonymous: Boolean = false,
|
||||
override val allowMultipleAnswers: Boolean = false,
|
||||
override val scheduledCloseInfo: ScheduledCloseInfo? = null
|
||||
) : MultipleAnswersPoll
|
||||
override val allowsRevoting: Boolean = true,
|
||||
override val scheduledCloseInfo: ScheduledCloseInfo? = null,
|
||||
override val descriptionTextSources: List<TextSource> = emptyList()
|
||||
) : Poll
|
||||
|
||||
@Serializable(PollSerializer::class)
|
||||
data class QuizPoll(
|
||||
@@ -160,7 +170,10 @@ data class QuizPoll(
|
||||
val explanationTextSources: List<TextSource> = emptyList(),
|
||||
override val isClosed: Boolean = false,
|
||||
override val isAnonymous: Boolean = false,
|
||||
override val scheduledCloseInfo: ScheduledCloseInfo? = null
|
||||
override val allowMultipleAnswers: Boolean = false,
|
||||
override val allowsRevoting: Boolean = true,
|
||||
override val scheduledCloseInfo: ScheduledCloseInfo? = null,
|
||||
override val descriptionTextSources: List<TextSource> = emptyList()
|
||||
) : Poll
|
||||
|
||||
@RiskFeature
|
||||
@@ -173,38 +186,43 @@ object PollSerializer : KSerializer<Poll> {
|
||||
|
||||
return when (rawPoll.type) {
|
||||
quizPollType -> QuizPoll(
|
||||
rawPoll.id,
|
||||
rawPoll.question,
|
||||
rawPoll.questionEntities.asTextSources(rawPoll.question),
|
||||
rawPoll.options,
|
||||
rawPoll.votesCount,
|
||||
rawPoll.correctOptionIds,
|
||||
rawPoll.explanation,
|
||||
rawPoll.explanation?.let { rawPoll.explanationEntities.asTextSources(it) } ?: emptyList(),
|
||||
rawPoll.isClosed,
|
||||
rawPoll.isAnonymous,
|
||||
rawPoll.scheduledCloseInfo
|
||||
id = rawPoll.id,
|
||||
question = rawPoll.question,
|
||||
textSources = rawPoll.questionEntities.asTextSources(rawPoll.question),
|
||||
options = rawPoll.options,
|
||||
votesCount = rawPoll.votesCount,
|
||||
correctOptionIds = rawPoll.correctOptionIds,
|
||||
explanation = rawPoll.explanation,
|
||||
explanationTextSources = rawPoll.explanation?.let { rawPoll.explanationEntities.asTextSources(it) } ?: emptyList(),
|
||||
isClosed = rawPoll.isClosed,
|
||||
isAnonymous = rawPoll.isAnonymous,
|
||||
allowMultipleAnswers = rawPoll.allowMultipleAnswers,
|
||||
allowsRevoting = rawPoll.allowsRevoting,
|
||||
scheduledCloseInfo = rawPoll.scheduledCloseInfo,
|
||||
descriptionTextSources = rawPoll.description?.let { rawPoll.descriptionEntities.asTextSources(it) } ?: emptyList()
|
||||
)
|
||||
regularPollType -> RegularPoll(
|
||||
rawPoll.id,
|
||||
rawPoll.question,
|
||||
rawPoll.questionEntities.asTextSources(rawPoll.question),
|
||||
rawPoll.options,
|
||||
rawPoll.votesCount,
|
||||
rawPoll.isClosed,
|
||||
rawPoll.isAnonymous,
|
||||
rawPoll.allowMultipleAnswers,
|
||||
rawPoll.scheduledCloseInfo
|
||||
id = rawPoll.id,
|
||||
question = rawPoll.question,
|
||||
textSources = rawPoll.questionEntities.asTextSources(rawPoll.question),
|
||||
options = rawPoll.options,
|
||||
votesCount = rawPoll.votesCount,
|
||||
isClosed = rawPoll.isClosed,
|
||||
isAnonymous = rawPoll.isAnonymous,
|
||||
allowMultipleAnswers = rawPoll.allowMultipleAnswers,
|
||||
allowsRevoting = rawPoll.allowsRevoting,
|
||||
scheduledCloseInfo = rawPoll.scheduledCloseInfo,
|
||||
descriptionTextSources = rawPoll.description?.let { rawPoll.descriptionEntities.asTextSources(it) } ?: emptyList()
|
||||
)
|
||||
else -> UnknownPollType(
|
||||
rawPoll.id,
|
||||
rawPoll.question,
|
||||
rawPoll.options,
|
||||
rawPoll.votesCount,
|
||||
rawPoll.questionEntities.asTextSources(rawPoll.question),
|
||||
rawPoll.isClosed,
|
||||
rawPoll.isAnonymous,
|
||||
asJson
|
||||
id = rawPoll.id,
|
||||
question = rawPoll.question,
|
||||
options = rawPoll.options,
|
||||
votesCount = rawPoll.votesCount,
|
||||
textSources = rawPoll.questionEntities.asTextSources(rawPoll.question),
|
||||
isClosed = rawPoll.isClosed,
|
||||
isAnonymous = rawPoll.isAnonymous,
|
||||
raw = asJson
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -213,30 +231,37 @@ object PollSerializer : KSerializer<Poll> {
|
||||
val closeInfo = value.scheduledCloseInfo
|
||||
val rawPoll = when (value) {
|
||||
is RegularPoll -> RawPoll(
|
||||
value.id,
|
||||
value.question,
|
||||
value.options,
|
||||
value.votesCount,
|
||||
value.textSources.toRawMessageEntities(),
|
||||
value.isClosed,
|
||||
value.isAnonymous,
|
||||
regularPollType,
|
||||
value.allowMultipleAnswers,
|
||||
id = value.id,
|
||||
question = value.question,
|
||||
options = value.options,
|
||||
votesCount = value.votesCount,
|
||||
questionEntities = value.textSources.toRawMessageEntities(),
|
||||
isClosed = value.isClosed,
|
||||
isAnonymous = value.isAnonymous,
|
||||
type = regularPollType,
|
||||
allowMultipleAnswers = value.allowMultipleAnswers,
|
||||
allowsRevoting = value.allowsRevoting,
|
||||
description = value.descriptionTextSources.makeSourceString().takeIf { it.isNotEmpty() },
|
||||
descriptionEntities = value.descriptionTextSources.toRawMessageEntities(),
|
||||
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo) ?.openDuration ?.seconds ?.toLong(),
|
||||
closeDate = (closeInfo as? ExactScheduledCloseInfo) ?.closeDateTime ?.unixMillisLong ?.div(1000L)
|
||||
)
|
||||
is QuizPoll -> RawPoll(
|
||||
value.id,
|
||||
value.question,
|
||||
value.options,
|
||||
value.votesCount,
|
||||
value.textSources.toRawMessageEntities(),
|
||||
value.isClosed,
|
||||
value.isAnonymous,
|
||||
quizPollType,
|
||||
id = value.id,
|
||||
question = value.question,
|
||||
options = value.options,
|
||||
votesCount = value.votesCount,
|
||||
questionEntities = value.textSources.toRawMessageEntities(),
|
||||
isClosed = value.isClosed,
|
||||
isAnonymous = value.isAnonymous,
|
||||
type = quizPollType,
|
||||
allowMultipleAnswers = value.allowMultipleAnswers,
|
||||
correctOptionIds = value.correctOptionIds,
|
||||
allowsRevoting = value.allowsRevoting,
|
||||
explanation = value.explanation,
|
||||
explanationEntities = value.explanationTextSources.toRawMessageEntities(),
|
||||
description = value.descriptionTextSources.makeSourceString().takeIf { it.isNotEmpty() },
|
||||
descriptionEntities = value.descriptionTextSources.toRawMessageEntities(),
|
||||
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo) ?.openDuration ?.seconds ?.toLong(),
|
||||
closeDate = (closeInfo as? ExactScheduledCloseInfo) ?.closeDateTime ?.unixMillisLong ?.div(1000L)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user