mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-08 09:42:59 +00:00
init
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.actions.BotAction
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.SendChatMessageRequest
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.internal.BooleanSerializer
|
||||
|
||||
/**
|
||||
* Send notification to user which will be shown for 5 seconds or while user have no messages from bot
|
||||
*/
|
||||
@Serializable
|
||||
data class SendAction(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(actionField)
|
||||
val action: BotAction
|
||||
): SendChatMessageRequest<Boolean> {
|
||||
override fun method(): String = "sendChatAction"
|
||||
override fun resultSerializer(): KSerializer<Boolean> = BooleanSerializer
|
||||
}
|
@@ -0,0 +1,63 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
data class SendContact(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(phoneNumberField)
|
||||
val phoneNumber: String,
|
||||
@SerialName(firstNameField)
|
||||
val firstName: String,
|
||||
@SerialName(lastNameField)
|
||||
@Optional
|
||||
val lastName: String? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>
|
||||
{
|
||||
constructor(
|
||||
chatId: ChatIdentifier,
|
||||
contact: Contact,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): this(
|
||||
chatId,
|
||||
contact.phoneNumber,
|
||||
contact.firstName,
|
||||
contact.lastName,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
override fun method(): String = "sendVenue"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
fun Contact.toRequest(
|
||||
chatId: ChatIdentifier,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): SendContact = SendContact(
|
||||
chatId,
|
||||
this,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
@@ -0,0 +1,37 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import kotlinx.serialization.*
|
||||
|
||||
// TODO:: Add location tracker for tracking location
|
||||
@Serializable
|
||||
data class SendLocation(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(latitudeField)
|
||||
override val latitude: Double,
|
||||
@SerialName(longitudeField)
|
||||
override val longitude: Double,
|
||||
@SerialName(livePeriodField)
|
||||
@Optional
|
||||
val livePeriod: Long? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
PositionedSendMessageRequest<RawMessage>
|
||||
{
|
||||
|
||||
override fun method(): String = "sendLocation"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.DisableWebPagePreview
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
data class SendMessage(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(textField)
|
||||
override val text: String,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(disableWebPagePreviewField)
|
||||
@Optional
|
||||
override val disableWebPagePreview: Boolean? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
DisableWebPagePreview
|
||||
{
|
||||
|
||||
override fun method(): String = "sendMessage"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
@@ -0,0 +1,71 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
data class SendVenue(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(latitudeField)
|
||||
override val latitude: Double,
|
||||
@SerialName(longitudeField)
|
||||
override val longitude: Double,
|
||||
@SerialName(titleField)
|
||||
override val title: String,
|
||||
@SerialName(addressField)
|
||||
val address: String,
|
||||
@SerialName(foursquareIdField)
|
||||
@Optional
|
||||
val foursquareId: String? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : SendMessageRequest<RawMessage>,
|
||||
PositionedSendMessageRequest<RawMessage>,
|
||||
TitledSendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>
|
||||
{
|
||||
constructor(
|
||||
chatId: ChatIdentifier,
|
||||
venue: Venue,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): this(
|
||||
chatId,
|
||||
venue.location.latitude,
|
||||
venue.location.longitude,
|
||||
venue.title,
|
||||
venue.address,
|
||||
venue.foursquareId,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
override fun method(): String = "sendVenue"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
fun Venue.toRequest(
|
||||
chatId: ChatIdentifier,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): SendVenue = SendVenue(
|
||||
chatId,
|
||||
this,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
@@ -0,0 +1,8 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
interface DuratedSendMessageRequest<T: Any>: SendMessageRequest<T> {
|
||||
/**
|
||||
* Duration of media, usually in seconds
|
||||
*/
|
||||
val duration: Int?
|
||||
}
|
@@ -0,0 +1,6 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
interface PositionedSendMessageRequest<T: Any>: SendMessageRequest<T> {
|
||||
val latitude: Double
|
||||
val longitude: Double
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.ReplyMarkup
|
||||
|
||||
interface ReplyingMarkupSendMessageRequest<T: Any>: SendMessageRequest<T>, ReplyMarkup
|
@@ -0,0 +1,6 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.ChatRequest
|
||||
|
||||
interface SendChatMessageRequest<T: Any> : SimpleRequest<T>, ChatRequest
|
@@ -0,0 +1,6 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.DisableNotification
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.ReplyMessageId
|
||||
|
||||
interface SendMessageRequest<T: Any> : SendChatMessageRequest<T>, ReplyMessageId, DisableNotification
|
@@ -0,0 +1,6 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
interface SizedSendMessageRequest<T: Any> : SendMessageRequest<T> {
|
||||
val width: Int?
|
||||
val height: Int?
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
|
||||
interface TextableSendMessageRequest<T: Any>: SendMessageRequest<T> {
|
||||
val text: String?
|
||||
val parseMode: ParseMode?
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
interface ThumbedSendMessageRequest<T: Any>: SendMessageRequest<T> {
|
||||
val thumb: String?
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts
|
||||
|
||||
interface TitledSendMessageRequest<T: Any>: SendMessageRequest<T> {
|
||||
val title: String?
|
||||
}
|
@@ -0,0 +1,33 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.games
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.ReplyMarkup
|
||||
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.Optional
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SendGame (
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(gameShortNameField)
|
||||
val gameShortName: String,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : SendMessageRequest<RawMessage>,
|
||||
ReplyMarkup {
|
||||
override fun method(): String = "sendGame"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
@@ -0,0 +1,109 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendAnimation(
|
||||
chatId: ChatIdentifier,
|
||||
animation: InputFile,
|
||||
thumb: InputFile?,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
duration: Int? = null,
|
||||
width: Int? = null,
|
||||
height: Int? = null,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val animationAsFileId = (animation as? FileId) ?.fileId
|
||||
val animationAsFile = animation as? MultipartFile
|
||||
val thumbAsFileId = (thumb as? FileId) ?.fileId
|
||||
val thumbAsFile = thumb as? MultipartFile
|
||||
|
||||
val data = SendAnimationData(
|
||||
chatId,
|
||||
animationAsFileId,
|
||||
thumbAsFileId,
|
||||
caption,
|
||||
parseMode,
|
||||
duration,
|
||||
width,
|
||||
height,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
return if (animationAsFile == null && thumbAsFile == null) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendAnimationFiles(animationAsFile, thumbAsFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendAnimationData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(animationField)
|
||||
@Optional
|
||||
val animation: String? = null,
|
||||
@SerialName(thumbField)
|
||||
@Optional
|
||||
override val thumb: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(durationField)
|
||||
@Optional
|
||||
override val duration: Int? = null,
|
||||
@SerialName(widthField)
|
||||
@Optional
|
||||
override val width: Int? = null,
|
||||
@SerialName(heightField)
|
||||
@Optional
|
||||
override val height: Int? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
ThumbedSendMessageRequest<RawMessage>,
|
||||
DuratedSendMessageRequest<RawMessage>,
|
||||
SizedSendMessageRequest<RawMessage>
|
||||
{
|
||||
|
||||
override fun method(): String = "sendAnimation"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendAnimationFiles internal constructor(
|
||||
val animation: MultipartFile? = null,
|
||||
val thumb: MultipartFile? = null
|
||||
) : Files by mapOfNotNull(
|
||||
animationField to animation,
|
||||
thumbField to thumb
|
||||
)
|
@@ -0,0 +1,109 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendAudio(
|
||||
chatId: ChatIdentifier,
|
||||
audio: InputFile,
|
||||
thumb: InputFile?,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
duration: Int? = null,
|
||||
performer: String? = null,
|
||||
title: String? = null,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val audioAsFileId = (audio as? FileId) ?.fileId
|
||||
val audioAsFile = audio as? MultipartFile
|
||||
val thumbAsFileId = (thumb as? FileId) ?.fileId
|
||||
val thumbAsFile = thumb as? MultipartFile
|
||||
|
||||
val data = SendAudioData(
|
||||
chatId,
|
||||
audioAsFileId,
|
||||
thumbAsFileId,
|
||||
caption,
|
||||
parseMode,
|
||||
duration,
|
||||
performer,
|
||||
title,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
return if (audioAsFile == null && thumbAsFile == null) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendAudioFiles(audioAsFile, thumbAsFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendAudioData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(audioField)
|
||||
@Optional
|
||||
val audio: String? = null,
|
||||
@SerialName(thumbField)
|
||||
@Optional
|
||||
override val thumb: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(durationField)
|
||||
@Optional
|
||||
override val duration: Int? = null,
|
||||
@SerialName(performerField)
|
||||
@Optional
|
||||
val performer: String? = null,
|
||||
@SerialName(titleField)
|
||||
@Optional
|
||||
override val title: String? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
ThumbedSendMessageRequest<RawMessage>,
|
||||
TitledSendMessageRequest<RawMessage>,
|
||||
DuratedSendMessageRequest<RawMessage>
|
||||
{
|
||||
|
||||
override fun method(): String = "sendAudio"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendAudioFiles internal constructor(
|
||||
val audio: MultipartFile? = null,
|
||||
val thumb: MultipartFile? = null
|
||||
) : Files by mapOfNotNull(
|
||||
audioField to audio,
|
||||
thumbField to thumb
|
||||
)
|
@@ -0,0 +1,92 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendDocument(
|
||||
chatId: ChatIdentifier,
|
||||
document: InputFile,
|
||||
thumb: InputFile?,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val documentAsFileId = (document as? FileId) ?.fileId
|
||||
val documentAsFile = document as? MultipartFile
|
||||
val thumbAsFileId = (thumb as? FileId) ?.fileId
|
||||
val thumbAsFile = thumb as? MultipartFile
|
||||
|
||||
val data = SendDocumentData(
|
||||
chatId,
|
||||
documentAsFileId,
|
||||
thumbAsFileId,
|
||||
caption,
|
||||
parseMode,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
return if (documentAsFile == null && thumbAsFile == null) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendDocumentFiles(documentAsFile, thumbAsFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendDocumentData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(documentField)
|
||||
@Optional
|
||||
val document: String? = null,
|
||||
@SerialName(thumbField)
|
||||
@Optional
|
||||
override val thumb: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
ThumbedSendMessageRequest<RawMessage>
|
||||
{
|
||||
|
||||
override fun method(): String = "sendDocument"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendDocumentFiles internal constructor(
|
||||
val document: MultipartFile? = null,
|
||||
val thumb: MultipartFile? = null
|
||||
) : Files by mapOfNotNull(
|
||||
documentField to document,
|
||||
thumbField to thumb
|
||||
)
|
@@ -0,0 +1,90 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartFile
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.MediaGroupMemberInputMedia
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.ThumbedInputMedia
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.SendMessageRequest
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.toJsonWithoutNulls
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.internal.ArrayListSerializer
|
||||
import kotlinx.serialization.json.jsonArray
|
||||
|
||||
val membersCountInMediaGroup: IntRange = 2 .. 10
|
||||
|
||||
fun SendMediaGroup(
|
||||
chatId: ChatIdentifier,
|
||||
media: List<MediaGroupMemberInputMedia>,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null
|
||||
): Request<List<RawMessage>> {
|
||||
if (media.size !in membersCountInMediaGroup) {
|
||||
throw IllegalArgumentException("Count of members for media group must be in $membersCountInMediaGroup range")
|
||||
}
|
||||
|
||||
val files: List<MultipartFile> = media.flatMap {
|
||||
listOfNotNull(
|
||||
it.file as? MultipartFile,
|
||||
if (it is ThumbedInputMedia) {
|
||||
it.thumb as? MultipartFile
|
||||
} else {
|
||||
null
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
val data = SendMediaGroupData(
|
||||
chatId,
|
||||
media,
|
||||
disableNotification,
|
||||
replyToMessageId
|
||||
)
|
||||
|
||||
return if (files.isEmpty()) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendMediaGroupFiles(files)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private val serializer = ArrayListSerializer(RawMessage.serializer())
|
||||
|
||||
@Serializable
|
||||
data class SendMediaGroupData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@Transient
|
||||
val media: List<MediaGroupMemberInputMedia> = emptyList(),
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null
|
||||
) : Data<List<RawMessage>>,
|
||||
SendMessageRequest<List<RawMessage>>
|
||||
{
|
||||
// TODO:: fix this nail when kotlin serialisation will support
|
||||
@ImplicitReflectionSerializer
|
||||
@SerialName(mediaField)
|
||||
private val convertedMedia: String
|
||||
get() = jsonArray {
|
||||
media.forEach {
|
||||
+it.toJsonWithoutNulls()
|
||||
}
|
||||
}.toString()
|
||||
|
||||
|
||||
override fun method(): String = "sendMediaGroup"
|
||||
override fun resultSerializer(): KSerializer<List<RawMessage>> = serializer
|
||||
}
|
||||
|
||||
data class SendMediaGroupFiles internal constructor(
|
||||
val files: List<MultipartFile>
|
||||
) : Files by (files.map { it.fileId to it }.toMap())
|
@@ -0,0 +1,74 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendPhoto(
|
||||
chatId: ChatIdentifier,
|
||||
photo: InputFile,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val data = SendPhotoData(
|
||||
chatId,
|
||||
(photo as? FileId) ?.fileId,
|
||||
caption,
|
||||
parseMode,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
return data.photo ?.let {
|
||||
data
|
||||
} ?: MultipartRequestImpl(
|
||||
data,
|
||||
SendPhotoFiles(photo as MultipartFile)
|
||||
)
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendPhotoData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(photoField)
|
||||
@Optional
|
||||
val photo: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>
|
||||
{
|
||||
override fun method(): String = "sendPhoto"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendPhotoFiles internal constructor(
|
||||
val photo: MultipartFile
|
||||
) : Files by mapOf(
|
||||
photoField to photo
|
||||
)
|
@@ -0,0 +1,62 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
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 com.github.insanusmokrassar.TelegramBotAPI.utils.toJsonWithoutNulls
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
|
||||
fun SendSticker(
|
||||
chatId: ChatIdentifier,
|
||||
sticker: InputFile,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> = SendStickerByFileId(
|
||||
chatId,
|
||||
sticker as? FileId,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
).let {
|
||||
when (sticker) {
|
||||
is MultipartFile -> SendStickerByFile(it, sticker)
|
||||
is FileId -> it
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendStickerByFileId internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(stickerField)
|
||||
@Optional
|
||||
val sticker: FileId? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : SendMessageRequest<RawMessage>, ReplyingMarkupSendMessageRequest<RawMessage> {
|
||||
override fun method(): String = "sendSticker"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendStickerByFile internal constructor(
|
||||
@Transient
|
||||
private val sendStickerByFileId: SendStickerByFileId,
|
||||
val sticker: MultipartFile
|
||||
) : MultipartRequest<RawMessage>, Request<RawMessage> by sendStickerByFileId {
|
||||
override val mediaMap: Map<String, MultipartFile> = mapOf(stickerField to sticker)
|
||||
override val paramsJson: JsonObject = sendStickerByFileId.toJsonWithoutNulls(SendStickerByFileId.serializer())
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,114 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendVideo(
|
||||
chatId: ChatIdentifier,
|
||||
video: InputFile,
|
||||
thumb: InputFile?,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
duration: Int? = null,
|
||||
width: Int? = null,
|
||||
height: Int? = null,
|
||||
supportStreaming: Boolean? = null,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val videoAsFileId = (video as? FileId) ?.fileId
|
||||
val videoAsFile = video as? MultipartFile
|
||||
val thumbAsFileId = (thumb as? FileId) ?.fileId
|
||||
val thumbAsFile = thumb as? MultipartFile
|
||||
|
||||
val data = SendVideoData(
|
||||
chatId,
|
||||
videoAsFileId,
|
||||
thumbAsFileId,
|
||||
caption,
|
||||
parseMode,
|
||||
duration,
|
||||
width,
|
||||
height,
|
||||
supportStreaming,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
return if (videoAsFile == null && thumbAsFile == null) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendVideoFiles(videoAsFile, thumbAsFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendVideoData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(videoField)
|
||||
@Optional
|
||||
val video: String? = null,
|
||||
@SerialName(thumbField)
|
||||
@Optional
|
||||
override val thumb: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(durationField)
|
||||
@Optional
|
||||
override val duration: Int? = null,
|
||||
@SerialName(widthField)
|
||||
@Optional
|
||||
override val width: Int? = null,
|
||||
@SerialName(heightField)
|
||||
@Optional
|
||||
override val height: Int? = null,
|
||||
@SerialName(supportStreamingField)
|
||||
@Optional
|
||||
val supportStreaming: Boolean? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
ThumbedSendMessageRequest<RawMessage>,
|
||||
DuratedSendMessageRequest<RawMessage>,
|
||||
SizedSendMessageRequest<RawMessage>
|
||||
{
|
||||
|
||||
override fun method(): String = "sendVideo"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendVideoFiles internal constructor(
|
||||
val video: MultipartFile? = null,
|
||||
val thumb: MultipartFile? = null
|
||||
) : Files by mapOfNotNull(
|
||||
videoField to video,
|
||||
thumbField to thumb
|
||||
)
|
@@ -0,0 +1,108 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendVideoNote(
|
||||
chatId: ChatIdentifier,
|
||||
videoNote: InputFile,
|
||||
thumb: InputFile?,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
duration: Int? = null,
|
||||
size: Int? = null, // in documentation - length (size of video side)
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val videoNoteAsFileId = (videoNote as? FileId) ?.fileId
|
||||
val videoNoteAsFile = videoNote as? MultipartFile
|
||||
val thumbAsFileId = (thumb as? FileId) ?.fileId
|
||||
val thumbAsFile = thumb as? MultipartFile
|
||||
|
||||
val data = SendVideoNoteData(
|
||||
chatId,
|
||||
videoNoteAsFileId,
|
||||
thumbAsFileId,
|
||||
caption,
|
||||
parseMode,
|
||||
duration,
|
||||
size,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
return if (videoNoteAsFile == null && thumbAsFile == null) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendVideoNoteFiles(videoNoteAsFile, thumbAsFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendVideoNoteData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(videoNoteField)
|
||||
@Optional
|
||||
val videoNote: String? = null,
|
||||
@SerialName(thumbField)
|
||||
@Optional
|
||||
override val thumb: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(durationField)
|
||||
@Optional
|
||||
override val duration: Int? = null,
|
||||
@SerialName(lengthField)
|
||||
@Optional
|
||||
override val width: Int? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
ThumbedSendMessageRequest<RawMessage>,
|
||||
DuratedSendMessageRequest<RawMessage>,
|
||||
SizedSendMessageRequest<RawMessage>
|
||||
{
|
||||
@Transient
|
||||
override val height: Int?
|
||||
get() = width
|
||||
|
||||
|
||||
override fun method(): String = "sendVideoNote"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendVideoNoteFiles internal constructor(
|
||||
val videoNote: MultipartFile? = null,
|
||||
val thumb: MultipartFile? = null
|
||||
) : Files by mapOfNotNull(
|
||||
videoNoteField to videoNote,
|
||||
thumbField to thumb
|
||||
)
|
@@ -0,0 +1,98 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull
|
||||
import kotlinx.serialization.*
|
||||
|
||||
fun SendVoice(
|
||||
chatId: ChatIdentifier,
|
||||
voice: InputFile,
|
||||
thumb: InputFile?,
|
||||
caption: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
duration: Int? = null,
|
||||
disableNotification: Boolean = false,
|
||||
replyToMessageId: MessageIdentifier? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<RawMessage> {
|
||||
val voiceAsFileId = (voice as? FileId) ?.fileId
|
||||
val voiceAsFile = voice as? MultipartFile
|
||||
val thumbAsFileId = (thumb as? FileId) ?.fileId
|
||||
val thumbAsFile = thumb as? MultipartFile
|
||||
|
||||
val data = SendVoiceData(
|
||||
chatId,
|
||||
voiceAsFileId,
|
||||
thumbAsFileId,
|
||||
caption,
|
||||
parseMode,
|
||||
duration,
|
||||
disableNotification,
|
||||
replyToMessageId,
|
||||
replyMarkup
|
||||
)
|
||||
|
||||
return if (voiceAsFile == null && thumbAsFile == null) {
|
||||
data
|
||||
} else {
|
||||
MultipartRequestImpl(
|
||||
data,
|
||||
SendVoiceFiles(voiceAsFile, thumbAsFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendVoiceData internal constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(voiceField)
|
||||
@Optional
|
||||
val voice: String? = null,
|
||||
@SerialName(thumbField)
|
||||
@Optional
|
||||
override val thumb: String? = null,
|
||||
@SerialName(captionField)
|
||||
@Optional
|
||||
override val text: String? = null,
|
||||
@SerialName(parseModeField)
|
||||
@Optional
|
||||
override val parseMode: ParseMode? = null,
|
||||
@SerialName(durationField)
|
||||
@Optional
|
||||
override val duration: Int? = null,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: KeyboardMarkup? = null
|
||||
) : Data<RawMessage>,
|
||||
SendMessageRequest<RawMessage>,
|
||||
ReplyingMarkupSendMessageRequest<RawMessage>,
|
||||
TextableSendMessageRequest<RawMessage>,
|
||||
ThumbedSendMessageRequest<RawMessage>,
|
||||
DuratedSendMessageRequest<RawMessage>
|
||||
{
|
||||
|
||||
override fun method(): String = "sendVoice"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
}
|
||||
|
||||
data class SendVoiceFiles internal constructor(
|
||||
val voice: MultipartFile? = null,
|
||||
val thumb: MultipartFile? = null
|
||||
) : Files by mapOfNotNull(
|
||||
voiceField to voice,
|
||||
thumbField to thumb
|
||||
)
|
@@ -0,0 +1,5 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
|
||||
|
||||
interface Data<T: Any> : SimpleRequest<T>
|
@@ -0,0 +1,5 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartFile
|
||||
|
||||
typealias Files = Map<String, MultipartFile>
|
@@ -0,0 +1,21 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartFile
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartRequest
|
||||
import kotlinx.serialization.ImplicitReflectionSerializer
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
|
||||
/**
|
||||
* Will be used as SimpleRequest if
|
||||
*/
|
||||
class MultipartRequestImpl<D: Data<R>, F: Files, R: Any>(
|
||||
val data: D,
|
||||
val files: F
|
||||
) : MultipartRequest<R> {
|
||||
override fun method(): String = data.method()
|
||||
override fun resultSerializer(): KSerializer<R> = data.resultSerializer()
|
||||
@ImplicitReflectionSerializer
|
||||
override val paramsJson: JsonObject = data.json()
|
||||
override val mediaMap: Map<String, MultipartFile> = files
|
||||
}
|
@@ -0,0 +1,113 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.payments
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.SendMessageRequest
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.payments.LabeledPrice
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.payments.LabeledPricesSerializer
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.payments.abstracts.*
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.Optional
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* @param providerData - JSON-ENCODED FIELD
|
||||
*/
|
||||
@Serializable
|
||||
data class SendInvoice(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatId,
|
||||
@SerialName(titleField)
|
||||
val title: String,
|
||||
@SerialName(descriptionField)
|
||||
val description: String,
|
||||
@SerialName(payloadField)
|
||||
val payload: String,
|
||||
@SerialName(providerTokenField)
|
||||
val providerToken: String,
|
||||
@SerialName(startParameterField)
|
||||
val startParameter: StartParameter,
|
||||
@Serializable(CurrencySerializer::class)
|
||||
@SerialName(currencyField)
|
||||
override val currency: Currency,
|
||||
@Serializable(LabeledPricesSerializer::class)
|
||||
@SerialName(pricesField)
|
||||
override val prices: List<LabeledPrice>,
|
||||
@SerialName(providerDataField)
|
||||
@Optional
|
||||
val providerData: String? = null,
|
||||
@SerialName(requireNameField)
|
||||
@Optional
|
||||
val requireName: Boolean = false,
|
||||
@SerialName(requirePhoneNumberField)
|
||||
@Optional
|
||||
val requirePhoneNumber: Boolean = false,
|
||||
@SerialName(requireEmailField)
|
||||
@Optional
|
||||
val requireEmail: Boolean = false,
|
||||
@SerialName(requireShippingAddressField)
|
||||
@Optional
|
||||
val requireShippingAddress: Boolean = false,
|
||||
@SerialName(shouldSendPhoneNumberToProviderField)
|
||||
@Optional
|
||||
val shouldSendPhoneNumberToProvider: Boolean = false,
|
||||
@SerialName(shouldSendEmailToProviderField)
|
||||
@Optional
|
||||
val shouldSendEmailToProvider: Boolean = false,
|
||||
@SerialName(priceDependOnShipAddressField)
|
||||
@Optional
|
||||
val priceDependOnShipAddress: Boolean = false,
|
||||
@SerialName(disableNotificationField)
|
||||
@Optional
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(replyToMessageIdField)
|
||||
@Optional
|
||||
override val replyToMessageId: MessageIdentifier? = null,
|
||||
@SerialName(replyMarkupField)
|
||||
@Optional
|
||||
override val replyMarkup: InlineKeyboardMarkup? = null
|
||||
) : Currencied,
|
||||
Priced,
|
||||
ChatRequest,
|
||||
DisableNotification,
|
||||
ReplyMessageId,
|
||||
ReplyMarkup,
|
||||
SendMessageRequest<RawMessage> {
|
||||
override fun method(): String = "sendInvoice"
|
||||
override fun resultSerializer(): KSerializer<RawMessage> = RawMessage.serializer()
|
||||
|
||||
@SerialName(photoUrlField)
|
||||
var photoUrl: String? = null
|
||||
private set
|
||||
@SerialName(photoSizeField)
|
||||
var photoSize: Long? = null
|
||||
private set
|
||||
|
||||
@SerialName(photoWidthField)
|
||||
var photoWidth: Int? = null
|
||||
private set
|
||||
@SerialName(photoHeightField)
|
||||
var photoHeight: Int? = null
|
||||
private set
|
||||
|
||||
fun setPhoto(
|
||||
photoUrl: String,
|
||||
photoSize: Long? = null,
|
||||
photoWidth: Int? = null,
|
||||
photoHeight: Int? = null
|
||||
) {
|
||||
this.photoUrl = photoUrl
|
||||
this.photoSize = photoSize
|
||||
this.photoWidth = photoWidth
|
||||
this.photoHeight = photoHeight
|
||||
}
|
||||
|
||||
fun unsetPhoto() {
|
||||
photoUrl = null
|
||||
photoSize = null
|
||||
photoWidth = null
|
||||
photoHeight = null
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user