From d7bbb6dd85556fa3bf6fd7003f9d7d94dadbd40e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 16 Apr 2019 16:16:13 +0800 Subject: [PATCH] add SendPoll --- CHANGELOG.md | 3 +- .../TelegramBotAPI/requests/send/SendPoll.kt | 43 +++++++++++++++++++ .../TelegramBotAPI/types/Common.kt | 1 + .../types/message/content/PollContent.kt | 10 ++++- 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/SendPoll.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c75627cac..ada3fda1ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,8 @@ * Type `PollOption` and `AnonymousPollOption` added * Type `Poll` added * Type `PollUpdate` added and implemented in `RawUpdate`. Now `PollUpdate` can be retrieved from `RawUpdate` -* type `PollContent` added - now it can be a value of `ContentMessage#content` +* Type `PollContent` added - now it can be a value of `ContentMessage#content` +* Request `SendPoll` added and `PollContent#createResend` now use it ## 0.12.0 Webhooks diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/SendPoll.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/SendPoll.kt new file mode 100644 index 0000000000..8b03cfbb50 --- /dev/null +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/SendPoll.kt @@ -0,0 +1,43 @@ +package com.github.insanusmokrassar.TelegramBotAPI.requests.send + +import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.ReplyingMarkupSendMessageRequest +import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.SendMessageRequest +import com.github.insanusmokrassar.TelegramBotAPI.types.* +import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup +import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName + +data class SendPoll( + @SerialName(chatIdField) + override val chatId: ChatIdentifier, + @SerialName(questionField) + val question: String, + @SerialName(optionsField) + val options: List, + @SerialName(disableNotificationField) + override val disableNotification: Boolean = false, + @SerialName(replyToMessageIdField) + override val replyToMessageId: MessageIdentifier? = null, + @SerialName(replyMarkupField) + override val replyMarkup: KeyboardMarkup? = null +) : SendMessageRequest, + ReplyingMarkupSendMessageRequest { + + init { + if (question.length !in pollQuectionTextLength) { + throw IllegalArgumentException("The length of questions for polls must be in $pollQuectionTextLength range, but was ${question.length}") + } + options.forEach { + if (it.length !in pollOptionTextLength) { + throw IllegalArgumentException("The length of question option text for polls must be in $pollOptionTextLength range, but was ${it.length}") + } + } + if (options.size !in pollOptionsLimit) { + throw IllegalArgumentException("The amount of question options for polls must be in $pollOptionsLimit range, but was ${options.size}") + } + } + + override fun method(): String = "sendPoll" + override fun resultSerializer(): KSerializer = RawMessage.serializer() +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/Common.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/Common.kt index dc44fd8778..2067e9bb3a 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/Common.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/Common.kt @@ -32,6 +32,7 @@ val invoicePayloadBytesLimit = 1 until 128 val pollOptionTextLength = 1 .. 100 val pollQuectionTextLength = 1 until 256 +val pollOptionsLimit = 2 .. 10 val livePeriodLimit = 60 .. 86400 diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/PollContent.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/PollContent.kt index 3000ead6de..ee88d4b3a2 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/PollContent.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/PollContent.kt @@ -2,6 +2,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.message.content import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import com.github.insanusmokrassar.TelegramBotAPI.requests.send.SendMessage +import com.github.insanusmokrassar.TelegramBotAPI.requests.send.SendPoll import com.github.insanusmokrassar.TelegramBotAPI.types.ChatIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.MessageEntity import com.github.insanusmokrassar.TelegramBotAPI.types.MessageIdentifier @@ -21,5 +22,12 @@ data class PollContent( disableNotification: Boolean, replyToMessageId: MessageIdentifier?, replyMarkup: KeyboardMarkup? - ): Request = TODO() + ): Request = SendPoll( + chatId, + poll.question, + poll.options.map { it.text }, + disableNotification, + replyToMessageId, + replyMarkup + ) }