1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2026-04-07 02:22:27 +00:00

reimplementation of PollOption and SendPoll

This commit is contained in:
2026-04-07 00:16:04 +06:00
parent cfd74eb58c
commit ac51189694
7 changed files with 642 additions and 97 deletions

View File

@@ -24,6 +24,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -47,6 +51,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -71,6 +79,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -93,6 +105,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -113,10 +129,13 @@ public suspend fun TelegramBot.sendQuizPoll(
question: String, question: String,
options: List<InputPollOption>, options: List<InputPollOption>,
correctOptionIds: List<Int>, correctOptionIds: List<Int>,
explanationTextSources: List<TextSource>? = null,
questionParseMode: ParseMode? = null, questionParseMode: ParseMode? = null,
explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -139,6 +158,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources = explanationTextSources, explanationTextSources = explanationTextSources,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
descriptionTextSources = descriptionTextSources,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -154,7 +176,6 @@ public suspend fun TelegramBot.sendQuizPoll(
) )
) )
public suspend fun TelegramBot.sendQuizPoll( public suspend fun TelegramBot.sendQuizPoll(
chatId: ChatIdentifier, chatId: ChatIdentifier,
questionEntities: List<TextSource>, questionEntities: List<TextSource>,
@@ -163,6 +184,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -184,6 +208,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources = explanationTextSources, explanationTextSources = explanationTextSources,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
descriptionTextSources = descriptionTextSources,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -205,11 +232,15 @@ public suspend fun TelegramBot.sendQuizPoll(
options: List<InputPollOption>, options: List<InputPollOption>,
correctOptionIds: List<Int>, correctOptionIds: List<Int>,
closeInfo: ScheduledCloseInfo?, closeInfo: ScheduledCloseInfo?,
questionParseMode: ParseMode? = null,
explanation: String?, explanation: String?,
questionParseMode: ParseMode? = null,
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -232,6 +263,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -255,6 +290,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -276,6 +315,10 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -299,6 +342,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -320,6 +366,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources = explanationTextSources, explanationTextSources = explanationTextSources,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
descriptionTextSources = descriptionTextSources,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -342,6 +391,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -362,6 +414,9 @@ public suspend fun TelegramBot.sendQuizPoll(
explanationTextSources = explanationTextSources, explanationTextSources = explanationTextSources,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
descriptionTextSources = descriptionTextSources,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,

View File

@@ -22,6 +22,12 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -43,6 +49,12 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -51,10 +63,10 @@ public suspend fun TelegramBot.sendRegularPoll(
disableNotification = disableNotification, disableNotification = disableNotification,
protectContent = protectContent, protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast, allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId, effectId = effectId,
suggestedPostParameters = suggestedPostParameters, suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
) )
) )
@@ -65,6 +77,12 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -85,6 +103,12 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -93,10 +117,10 @@ public suspend fun TelegramBot.sendRegularPoll(
disableNotification = disableNotification, disableNotification = disableNotification,
protectContent = protectContent, protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast, allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId, effectId = effectId,
suggestedPostParameters = suggestedPostParameters, suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
) )
) )
@@ -109,6 +133,12 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -129,16 +159,22 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
disableNotification = disableNotification, disableNotification = disableNotification,
protectContent = protectContent, protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast, allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId, effectId = effectId,
suggestedPostParameters = suggestedPostParameters, suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
) )
) )
@@ -150,6 +186,12 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -169,15 +211,21 @@ public suspend fun TelegramBot.sendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
disableNotification = disableNotification, disableNotification = disableNotification,
protectContent = protectContent, protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast, allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId, effectId = effectId,
suggestedPostParameters = suggestedPostParameters, suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
) )
) )

View File

@@ -49,6 +49,12 @@ fun SendPoll(
questionParseMode: ParseMode? = null, questionParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -59,14 +65,20 @@ fun SendPoll(
replyParameters: ReplyParameters? = null, replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null replyMarkup: KeyboardMarkup? = null
) = SendRegularPoll( ) = SendRegularPoll(
chatId, chatId = chatId,
question, question = question,
options, options = options,
null, closeInfo = null,
questionParseMode, questionParseMode = questionParseMode,
isAnonymous, isAnonymous = isAnonymous,
isClosed, isClosed = isClosed,
false, allowMultipleAnswers = false,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -84,6 +96,12 @@ fun SendPoll(
options: List<InputPollOption>, options: List<InputPollOption>,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -101,6 +119,12 @@ fun SendPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = false, allowMultipleAnswers = false,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -149,7 +173,7 @@ fun Poll.createRequest(
replyParameters = replyParameters, replyParameters = replyParameters,
replyMarkup = replyMarkup replyMarkup = replyMarkup
) )
is QuizPoll -> correctOptionIds ?.let { correctOptionIds -> is QuizPoll -> correctOptionIds?.let { correctOptionIds ->
SendQuizPoll( SendQuizPoll(
chatId = chatId, chatId = chatId,
questionEntities = textSources, questionEntities = textSources,

View File

@@ -39,12 +39,22 @@ class SendQuizPoll internal constructor(
override val isAnonymous: Boolean = true, override val isAnonymous: Boolean = true,
@SerialName(isClosedField) @SerialName(isClosedField)
override val isClosed: Boolean = false, override val isClosed: Boolean = false,
@SerialName(shuffleOptionsField)
val shuffleOptions: Boolean = false,
@SerialName(hideResultsUntilClosesField)
val hideResultsUntilCloses: Boolean = false,
@SerialName(explanationField) @SerialName(explanationField)
val explanation: String? = null, val explanation: String? = null,
@SerialName(explanationParseModeField) @SerialName(explanationParseModeField)
val explanationParseMode: ParseMode? = null, val explanationParseMode: ParseMode? = null,
@SerialName(explanationEntitiesField) @SerialName(explanationEntitiesField)
private val rawExplanationEntities: List<RawMessageEntity>? = null, private val rawExplanationEntities: List<RawMessageEntity>? = null,
@SerialName(descriptionField)
val description: String? = null,
@SerialName(descriptionParseModeField)
val descriptionParseMode: ParseMode? = null,
@SerialName(descriptionEntitiesField)
private val rawDescriptionEntities: List<RawMessageEntity>? = null,
@SerialName(openPeriodField) @SerialName(openPeriodField)
override val openPeriod: LongSeconds? = null, override val openPeriod: LongSeconds? = null,
@SerialName(closeDateField) @SerialName(closeDateField)
@@ -80,7 +90,10 @@ class SendQuizPoll internal constructor(
override val textSources: List<TextSource> override val textSources: List<TextSource>
get() = rawQuestionEntities.asTextSources(question) get() = rawQuestionEntities.asTextSources(question)
val explanationTextEntities: List<TextSource>? by lazy { val explanationTextEntities: List<TextSource>? by lazy {
rawExplanationEntities ?.asTextSources(text ?: return@lazy null) rawExplanationEntities?.asTextSources(text ?: return@lazy null)
}
val descriptionTextSources: List<TextSource>? by lazy {
rawDescriptionEntities?.asTextSources(description ?: return@lazy null)
} }
constructor( constructor(
@@ -93,6 +106,10 @@ class SendQuizPoll internal constructor(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -114,9 +131,14 @@ class SendQuizPoll internal constructor(
rawQuestionEntities = emptyList(), rawQuestionEntities = emptyList(),
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
explanation = explanation, explanation = explanation,
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
rawExplanationEntities = emptyList(), rawExplanationEntities = emptyList(),
description = description,
descriptionParseMode = descriptionParseMode,
rawDescriptionEntities = null,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -140,6 +162,10 @@ class SendQuizPoll internal constructor(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -161,9 +187,14 @@ class SendQuizPoll internal constructor(
rawQuestionEntities = questionEntities.toRawMessageEntities(), rawQuestionEntities = questionEntities.toRawMessageEntities(),
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
explanation = explanation, explanation = explanation,
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
rawExplanationEntities = emptyList(), rawExplanationEntities = emptyList(),
description = description,
descriptionParseMode = descriptionParseMode,
rawDescriptionEntities = null,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -187,6 +218,9 @@ class SendQuizPoll internal constructor(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -208,9 +242,14 @@ class SendQuizPoll internal constructor(
rawQuestionEntities = emptyList(), rawQuestionEntities = emptyList(),
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
explanation = explanationTextSources ?.makeSourceString(), shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
explanation = explanationTextSources?.makeSourceString(),
explanationParseMode = null, explanationParseMode = null,
rawExplanationEntities = explanationTextSources ?.toRawMessageEntities(), rawExplanationEntities = explanationTextSources?.toRawMessageEntities(),
description = descriptionTextSources?.makeSourceString(),
descriptionParseMode = null,
rawDescriptionEntities = descriptionTextSources?.toRawMessageEntities(),
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -233,6 +272,9 @@ class SendQuizPoll internal constructor(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
openPeriod: LongSeconds? = null, openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
@@ -254,9 +296,14 @@ class SendQuizPoll internal constructor(
rawQuestionEntities = questionEntities.toRawMessageEntities(), rawQuestionEntities = questionEntities.toRawMessageEntities(),
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
explanation = explanationTextSources ?.makeSourceString(), shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
explanation = explanationTextSources?.makeSourceString(),
explanationParseMode = null, explanationParseMode = null,
rawExplanationEntities = explanationTextSources ?.toRawMessageEntities(), rawExplanationEntities = explanationTextSources?.toRawMessageEntities(),
description = descriptionTextSources?.makeSourceString(),
descriptionParseMode = null,
rawDescriptionEntities = descriptionTextSources?.toRawMessageEntities(),
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -273,7 +320,7 @@ class SendQuizPoll internal constructor(
init { init {
checkPollInfo(question, options) checkPollInfo(question, options)
closeInfo ?.checkSendData() closeInfo?.checkSendData()
val correctOptionIdsRange = 0 until options.size val correctOptionIdsRange = 0 until options.size
correctOptionIds?.forEach { id -> correctOptionIds?.forEach { id ->
if (id !in correctOptionIdsRange) { if (id !in correctOptionIdsRange) {
@@ -299,6 +346,10 @@ fun SendQuizPoll(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -319,6 +370,10 @@ fun SendQuizPoll(
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod, openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod,
closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate, closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate,
threadId = threadId, threadId = threadId,
@@ -343,6 +398,10 @@ fun SendQuizPoll(
explanationParseMode: ParseMode? = null, explanationParseMode: ParseMode? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -362,6 +421,10 @@ fun SendQuizPoll(
explanationParseMode = explanationParseMode, explanationParseMode = explanationParseMode,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod, openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod,
closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate, closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate,
threadId = threadId, threadId = threadId,
@@ -386,6 +449,9 @@ fun SendQuizPoll(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -405,6 +471,9 @@ fun SendQuizPoll(
explanationTextSources = explanationTextSources, explanationTextSources = explanationTextSources,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
descriptionTextSources = descriptionTextSources,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod, openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod,
closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate, closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate,
threadId = threadId, threadId = threadId,
@@ -428,6 +497,9 @@ fun SendQuizPoll(
explanationTextSources: List<TextSource>? = null, explanationTextSources: List<TextSource>? = null,
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
shuffleOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -446,6 +518,9 @@ fun SendQuizPoll(
explanationTextSources = explanationTextSources, explanationTextSources = explanationTextSources,
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
shuffleOptions = shuffleOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
descriptionTextSources = descriptionTextSources,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod, openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod,
closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate, closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate,
threadId = threadId, threadId = threadId,

View File

@@ -40,8 +40,22 @@ class SendRegularPoll constructor(
override val isClosed: Boolean = false, override val isClosed: Boolean = false,
@SerialName(allowsMultipleAnswersField) @SerialName(allowsMultipleAnswersField)
val allowMultipleAnswers: Boolean = false, val allowMultipleAnswers: Boolean = false,
@SerialName(allowsRevotingField)
val allowsRevoting: Boolean = true,
@SerialName(shuffleOptionsField)
val shuffleOptions: Boolean = false,
@SerialName(allowAddingOptionsField)
val allowAddingOptions: Boolean = false,
@SerialName(hideResultsUntilClosesField)
val hideResultsUntilCloses: Boolean = false,
@SerialName(descriptionField)
val description: String? = null,
@SerialName(descriptionParseModeField)
val descriptionParseMode: ParseMode? = null,
@SerialName(descriptionEntitiesField)
private val rawDescriptionEntities: List<RawMessageEntity>? = null,
@SerialName(openPeriodField) @SerialName(openPeriodField)
override val openPeriod: LongSeconds?= null, override val openPeriod: LongSeconds? = null,
@SerialName(closeDateField) @SerialName(closeDateField)
override val closeDate: LongSeconds? = null, override val closeDate: LongSeconds? = null,
@OptIn(ExperimentalSerializationApi::class) @OptIn(ExperimentalSerializationApi::class)
@@ -71,6 +85,9 @@ class SendRegularPoll constructor(
) : SendPoll() { ) : SendPoll() {
override val textSources: List<TextSource> override val textSources: List<TextSource>
get() = rawQuestionEntities.asTextSources(text) get() = rawQuestionEntities.asTextSources(text)
val descriptionTextSources: List<TextSource>? by lazy {
rawDescriptionEntities?.asTextSources(description ?: return@lazy null)
}
constructor( constructor(
chatId: ChatIdentifier, chatId: ChatIdentifier,
@@ -79,7 +96,13 @@ class SendRegularPoll constructor(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
openPeriod: LongSeconds?= null, allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
@@ -100,6 +123,13 @@ class SendRegularPoll constructor(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
rawDescriptionEntities = null,
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -122,7 +152,13 @@ class SendRegularPoll constructor(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
openPeriod: LongSeconds?= null, allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null, closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
@@ -143,6 +179,122 @@ class SendRegularPoll constructor(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
rawDescriptionEntities = null,
openPeriod = openPeriod,
closeDate = closeDate,
threadId = threadId,
directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId,
disableNotification = disableNotification,
protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId,
suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters,
replyMarkup = replyMarkup
)
constructor(
chatId: ChatIdentifier,
question: String,
options: List<InputPollOption>,
questionParseMode: ParseMode? = null,
isAnonymous: Boolean = true,
isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
allowPaidBroadcast: Boolean = false,
effectId: EffectId? = null,
suggestedPostParameters: SuggestedPostParameters? = null,
replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null
) : this(
chatId = chatId,
question = question,
options = options,
questionParseMode = questionParseMode,
rawQuestionEntities = emptyList(),
isAnonymous = isAnonymous,
isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = descriptionTextSources?.makeSourceString(),
descriptionParseMode = null,
rawDescriptionEntities = descriptionTextSources?.toRawMessageEntities(),
openPeriod = openPeriod,
closeDate = closeDate,
threadId = threadId,
directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId,
disableNotification = disableNotification,
protectContent = protectContent,
allowPaidBroadcast = allowPaidBroadcast,
effectId = effectId,
suggestedPostParameters = suggestedPostParameters,
replyParameters = replyParameters,
replyMarkup = replyMarkup
)
constructor(
chatId: ChatIdentifier,
questionEntities: List<TextSource>,
options: List<InputPollOption>,
isAnonymous: Boolean = true,
isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
descriptionTextSources: List<TextSource>? = null,
openPeriod: LongSeconds? = null,
closeDate: LongSeconds? = null,
threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
allowPaidBroadcast: Boolean = false,
effectId: EffectId? = null,
suggestedPostParameters: SuggestedPostParameters? = null,
replyParameters: ReplyParameters? = null,
replyMarkup: KeyboardMarkup? = null
) : this(
chatId = chatId,
question = questionEntities.makeSourceString(),
options = options,
questionParseMode = null,
rawQuestionEntities = questionEntities.toRawMessageEntities(),
isAnonymous = isAnonymous,
isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = descriptionTextSources?.makeSourceString(),
descriptionParseMode = null,
rawDescriptionEntities = descriptionTextSources?.toRawMessageEntities(),
openPeriod = openPeriod, openPeriod = openPeriod,
closeDate = closeDate, closeDate = closeDate,
threadId = threadId, threadId = threadId,
@@ -163,7 +315,7 @@ class SendRegularPoll constructor(
init { init {
checkPollInfo(question, options) checkPollInfo(question, options)
closeInfo ?.checkSendData() closeInfo?.checkSendData()
} }
} }
@@ -176,6 +328,12 @@ fun SendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -194,8 +352,14 @@ fun SendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo) ?.openPeriod, allowsRevoting = allowsRevoting,
closeDate = (closeInfo as? ExactScheduledCloseInfo) ?.closeDate, shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod,
closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -216,6 +380,12 @@ fun SendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -233,8 +403,14 @@ fun SendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo) ?.openPeriod, allowsRevoting = allowsRevoting,
closeDate = (closeInfo as? ExactScheduledCloseInfo) ?.closeDate, shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
openPeriod = (closeInfo as? ApproximateScheduledCloseInfo)?.openPeriod,
closeDate = (closeInfo as? ExactScheduledCloseInfo)?.closeDate,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,
@@ -254,6 +430,12 @@ fun SendRegularPoll(
isAnonymous: Boolean = true, isAnonymous: Boolean = true,
isClosed: Boolean = false, isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false, allowMultipleAnswers: Boolean = false,
allowsRevoting: Boolean = true,
shuffleOptions: Boolean = false,
allowAddingOptions: Boolean = false,
hideResultsUntilCloses: Boolean = false,
description: String? = null,
descriptionParseMode: ParseMode? = null,
threadId: MessageThreadId? = chatId.threadId, threadId: MessageThreadId? = chatId.threadId,
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId, directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
@@ -273,6 +455,12 @@ fun SendRegularPoll(
isAnonymous = isAnonymous, isAnonymous = isAnonymous,
isClosed = isClosed, isClosed = isClosed,
allowMultipleAnswers = allowMultipleAnswers, allowMultipleAnswers = allowMultipleAnswers,
allowsRevoting = allowsRevoting,
shuffleOptions = shuffleOptions,
allowAddingOptions = allowAddingOptions,
hideResultsUntilCloses = hideResultsUntilCloses,
description = description,
descriptionParseMode = descriptionParseMode,
threadId = threadId, threadId = threadId,
directMessageThreadId = directMessageThreadId, directMessageThreadId = directMessageThreadId,
businessConnectionId = businessConnectionId, businessConnectionId = businessConnectionId,

View File

@@ -100,7 +100,7 @@ val mediaCountInMediaGroup: IntRange = 2 .. 10
val explanationLimit = 0 .. 200 val explanationLimit = 0 .. 200
val openPeriodPollSecondsLimit = 5 .. 600 val openPeriodPollSecondsLimit = 5 .. 2628000
val membersLimit = 1 .. 99999 val membersLimit = 1 .. 99999
@@ -278,11 +278,19 @@ const val lastErrorDateField = "last_error_date"
const val lastSynchronizationErrorDateField = "last_synchronization_error_date" const val lastSynchronizationErrorDateField = "last_synchronization_error_date"
const val lastErrorMessageField = "last_error_message" const val lastErrorMessageField = "last_error_message"
const val votesCountField = "voter_count" const val votesCountField = "voter_count"
const val addedByUserField = "added_by_user"
const val addedByChatField = "added_by_chat"
const val additionDateField = "addition_date"
const val persistentIdField = "persistent_id"
const val isClosedField = "is_closed" const val isClosedField = "is_closed"
const val totalVoterCountField = "total_voter_count" const val totalVoterCountField = "total_voter_count"
const val correctOptionIdField = "correct_option_id" const val correctOptionIdField = "correct_option_id"
const val correctOptionIdsField = "correct_option_ids" const val correctOptionIdsField = "correct_option_ids"
const val allowsMultipleAnswersField = "allows_multiple_answers" const val allowsMultipleAnswersField = "allows_multiple_answers"
const val allowsRevotingField = "allows_revoting"
const val shuffleOptionsField = "shuffle_options"
const val allowAddingOptionsField = "allow_adding_options"
const val hideResultsUntilClosesField = "hide_results_until_closes"
const val isAnonymousField = "is_anonymous" const val isAnonymousField = "is_anonymous"
const val canManageTopicsField = "can_manage_topics" const val canManageTopicsField = "can_manage_topics"
const val canEditTagField = "can_edit_tag" const val canEditTagField = "can_edit_tag"
@@ -598,6 +606,8 @@ const val chatTypeField = "chat_type"
const val explanationEntitiesField = "explanation_entities" const val explanationEntitiesField = "explanation_entities"
const val explanationParseModeField = "explanation_parse_mode" const val explanationParseModeField = "explanation_parse_mode"
const val descriptionParseModeField = "description_parse_mode"
const val descriptionEntitiesField = "description_entities"
const val openPeriodField = "open_period" const val openPeriodField = "open_period"
const val closeDateField = "close_date" const val closeDateField = "close_date"
const val openingMinuteField = "opening_minute" const val openingMinuteField = "opening_minute"

View File

@@ -1,13 +1,13 @@
package dev.inmo.tgbotapi.types.polls package dev.inmo.tgbotapi.types.polls
import dev.inmo.tgbotapi.abstracts.TextedInput import dev.inmo.tgbotapi.abstracts.TextedInput
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.chat.Chat
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.types.message.RawMessageEntity import dev.inmo.tgbotapi.types.message.RawMessageEntity
import dev.inmo.tgbotapi.types.message.asTextSources import dev.inmo.tgbotapi.types.message.asTextSources
import dev.inmo.tgbotapi.types.message.textsources.TextSource import dev.inmo.tgbotapi.types.message.textsources.TextSource
import dev.inmo.tgbotapi.types.message.toRawMessageEntities import dev.inmo.tgbotapi.types.message.toRawMessageEntities
import dev.inmo.tgbotapi.types.textEntitiesField
import dev.inmo.tgbotapi.types.textField
import dev.inmo.tgbotapi.types.votesCountField
import dev.inmo.tgbotapi.utils.EntitiesBuilder import dev.inmo.tgbotapi.utils.EntitiesBuilder
import dev.inmo.tgbotapi.utils.EntitiesBuilderBody import dev.inmo.tgbotapi.utils.EntitiesBuilderBody
import dev.inmo.tgbotapi.utils.RiskFeature import dev.inmo.tgbotapi.utils.RiskFeature
@@ -17,75 +17,220 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
@Serializable(PollOptionSerializer::class) @Serializable
sealed class PollOption : TextedInput { private data class PollOptionSurrogate(
abstract val votes: Int @SerialName(persistentIdField)
val id: PollOptionPersistentId,
@SerialName(textField)
val text: String,
@SerialName(textEntitiesField)
val textEntities: List<RawMessageEntity> = emptyList(),
@SerialName(votesCountField)
val votes: Int = 0,
@SerialName(addedByUserField)
val addedByUser: User? = null,
@SerialName(addedByChatField)
val addedByChat: Chat? = null,
@Serializable(TelegramDateSerializer::class)
@SerialName(additionDateField)
val additionDate: TelegramDate? = null
)
abstract fun asInput(): InputPollOption @Serializable(PollOption.Companion::class)
sealed interface PollOption : TextedInput {
val id: PollOptionPersistentId
val votes: Int
fun asInput(): InputPollOption
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PollOption.Companion::class)
data class Simple(
@SerialName(persistentIdField)
override val id: PollOptionPersistentId,
@SerialName(textField)
override val text: String,
@SerialName(textEntitiesField)
override val textSources: List<TextSource> = emptyList(),
@SerialName(votesCountField)
override val votes: Int = 0
) : PollOption {
override fun asInput(): InputPollOption = InputPollOption(text, null, textSources)
}
@Serializable(PollOption.LatelyAdded.Companion::class)
sealed interface LatelyAdded : PollOption {
val additionDate: TelegramDate?
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PollOption.LatelyAdded.Companion::class)
data class AddedByUser(
@SerialName(persistentIdField)
override val id: PollOptionPersistentId,
@SerialName(textField)
override val text: String,
@SerialName(textEntitiesField)
override val textSources: List<TextSource> = emptyList(),
@SerialName(votesCountField)
override val votes: Int = 0,
@SerialName(addedByUserField)
val addedByUser: User,
@Serializable(TelegramDateSerializer::class)
@SerialName(additionDateField)
override val additionDate: TelegramDate? = null
) : LatelyAdded {
override fun asInput(): InputPollOption = InputPollOption(text, null, textSources)
}
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(PollOption.LatelyAdded.Companion::class)
data class AddedByChat(
@SerialName(persistentIdField)
override val id: PollOptionPersistentId,
@SerialName(textField)
override val text: String,
@SerialName(textEntitiesField)
override val textSources: List<TextSource> = emptyList(),
@SerialName(votesCountField)
override val votes: Int = 0,
@SerialName(addedByChatField)
val addedByChat: Chat,
@Serializable(TelegramDateSerializer::class)
@SerialName(additionDateField)
override val additionDate: TelegramDate? = null
) : LatelyAdded {
override fun asInput(): InputPollOption = InputPollOption(text, null, textSources)
}
@RiskFeature
companion object : KSerializer<LatelyAdded> {
override val descriptor: SerialDescriptor = PollOptionSurrogate.serializer().descriptor
override fun deserialize(decoder: Decoder): LatelyAdded {
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.addedByChat != null -> AddedByChat(
surrogate.id, surrogate.text, textSources, surrogate.votes,
surrogate.addedByChat, surrogate.additionDate
)
else -> error("LatelyAdded poll option must have either added_by_user or added_by_chat")
}
}
override fun serialize(encoder: Encoder, value: LatelyAdded) {
PollOptionSurrogate.serializer().serialize(
encoder,
when (value) {
is AddedByUser -> PollOptionSurrogate(
id = value.id,
text = value.text,
textEntities = value.textSources.toRawMessageEntities(),
votes = value.votes,
addedByUser = value.addedByUser,
additionDate = value.additionDate
)
is AddedByChat -> PollOptionSurrogate(
id = value.id,
text = value.text,
textEntities = value.textSources.toRawMessageEntities(),
votes = value.votes,
addedByChat = value.addedByChat,
additionDate = value.additionDate
)
}
)
}
}
}
@RiskFeature
companion object : KSerializer<PollOption> {
override val descriptor: SerialDescriptor = PollOptionSurrogate.serializer().descriptor
companion object {
fun simple( fun simple(
id: PollOptionPersistentId,
text: String, text: String,
textSources: List<TextSource>, textSources: List<TextSource>,
votes: Int = 0 votes: Int = 0
) = SimplePollOption(text, textSources, votes) ) = Simple(id, text, textSources, votes)
fun simple( fun simple(
id: PollOptionPersistentId,
textSources: List<TextSource>, textSources: List<TextSource>,
votes: Int = 0 votes: Int = 0
) = SimplePollOption(textSources.makeSourceString(), textSources, votes) ) = Simple(id, textSources.makeSourceString(), textSources, votes)
fun simple( fun simple(
id: PollOptionPersistentId,
votes: Int = 0, votes: Int = 0,
builder: EntitiesBuilderBody builder: EntitiesBuilderBody
) = simple( ) = simple(
id,
EntitiesBuilder().apply(builder).build(), EntitiesBuilder().apply(builder).build(),
votes votes
) )
}
}
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") override fun deserialize(decoder: Decoder): PollOption {
@Serializable(PollOptionSerializer::class) val surrogate = PollOptionSurrogate.serializer().deserialize(decoder)
data class SimplePollOption ( val textSources = surrogate.textEntities.asTextSources(surrogate.text)
@SerialName(textField) return when {
override val text: String, surrogate.addedByUser != null -> LatelyAdded.AddedByUser(
@SerialName(textEntitiesField) id = surrogate.id,
override val textSources: List<TextSource> = emptyList(), text = surrogate.text,
@SerialName(votesCountField) textSources = textSources,
override val votes: Int = 0 votes = surrogate.votes,
) : PollOption() { addedByUser = surrogate.addedByUser,
override fun asInput(): InputPollOption = InputPollOption(text, null, textSources) additionDate = surrogate.additionDate
}
@RiskFeature
object PollOptionSerializer : KSerializer<PollOption> {
@Serializable
private data class RawPollOption(
@SerialName(textField)
val text: String,
@SerialName(textEntitiesField)
val textSources: List<RawMessageEntity> = emptyList(),
@SerialName(votesCountField)
val votes: Int = 0
)
override val descriptor: SerialDescriptor = RawPollOption.serializer().descriptor
override fun deserialize(decoder: Decoder): PollOption {
val raw = RawPollOption.serializer().deserialize(
decoder
)
return SimplePollOption(raw.text, raw.textSources.asTextSources(raw.text), raw.votes)
}
override fun serialize(encoder: Encoder, value: PollOption) {
when (value) {
is SimplePollOption -> RawPollOption.serializer().serialize(
encoder,
RawPollOption(
value.text,
value.textSources.toRawMessageEntities(),
value.votes
) )
surrogate.addedByChat != null -> LatelyAdded.AddedByChat(
id = surrogate.id,
text = surrogate.text,
textSources = textSources,
votes = surrogate.votes,
addedByChat = surrogate.addedByChat,
additionDate = surrogate.additionDate
)
else -> Simple(
id = surrogate.id,
text = surrogate.text,
textSources = textSources,
votes = surrogate.votes
)
}
}
override fun serialize(encoder: Encoder, value: PollOption) {
PollOptionSurrogate.serializer().serialize(
encoder,
when (value) {
is Simple -> PollOptionSurrogate(
id = value.id,
text = value.text,
textEntities = value.textSources.toRawMessageEntities(),
votes = value.votes
)
is LatelyAdded -> when (value) {
is LatelyAdded.AddedByUser -> PollOptionSurrogate(
id = value.id,
text = value.text,
textEntities = value.textSources.toRawMessageEntities(),
votes = value.votes,
addedByUser = value.addedByUser,
additionDate = value.additionDate
)
is LatelyAdded.AddedByChat -> PollOptionSurrogate(
id = value.id,
text = value.text,
textEntities = value.textSources.toRawMessageEntities(),
votes = value.votes,
addedByChat = value.addedByChat,
additionDate = value.additionDate
)
}
}
) )
} }
} }