diff --git a/CHANGELOG.md b/CHANGELOG.md index abff925ce9..54fec73005 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,17 @@ * `UpdatesFilter` and other objects now work with `UpdateReceiver` as common supertype for receivers. +### 0.12.3 Cleaning + +* Refactor, optimizing and cleaning of code +* Removed deprecated method `T#toJsonWithoutNulls()` +* Renamed instances of `MediaGroupMessage`s and refactored their interfaces. `ChannelMediaGroupMessage` +will not contain `user` field (but `CommonMediaGroupMessage` will have) +* Now `MediaCollectionContent` is `MediaContent` (classes of this interface must choose best +media for present out) + * `PhotoContent` now choose biggest photo size from its collection as `media` +* Fix in order of media group messages which was received by webhooks + ## 0.11.0 * Kotlin `1.3.11` -> `1.3.21` diff --git a/build.gradle b/build.gradle index ce0d1adb5c..d5c823b65a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -project.version = "0.12.2" +project.version = "0.12.3" project.group = "com.github.insanusmokrassar" buildscript { diff --git a/gradle.properties b/gradle.properties index 30d76e621e..20f62f9d7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,4 +7,7 @@ ktor_version=1.1.2 gradle_bintray_plugin_version=1.8.4 +project_public_name=Telegram Bot API +project_public_description=It is one more project which wish to be useful and full Telegram Bots API bridge for Kotlin + disableImplicitReflectionSerializerAnnotation=-Xexperimental=kotlinx.serialization.ImplicitReflectionSerializer diff --git a/maven.publish.gradle b/maven.publish.gradle index 1c3ce7ee3b..f0237c2947 100644 --- a/maven.publish.gradle +++ b/maven.publish.gradle @@ -1,26 +1,6 @@ apply plugin: 'maven-publish' apply plugin: 'signing' -def pomConfig = { - licenses { - license { - name "The Apache Software License, Version 2.0" - url "http://www.apache.org/licenses/LICENSE-2.0.txt" - distribution "repo" - } - } - developers { - developer { - name "Ovsiannikov Aleksei" - email "ovsyannikov.alexey95@gmail.com" - } - } - - scm { - url "https://github.com/InsanusMokrassar/${project.name}" - } -} - task sourcesJar(type: Jar) { from sourceSets.main.allSource classifier = 'sources' @@ -45,8 +25,8 @@ publishing { pom.withXml { asNode().children().last() + { resolveStrategy = Closure.DELEGATE_FIRST - name 'Telegram Bot API' - description 'It is one more project which wish to be useful and full Telegram Bots API bridge for Kotlin' + name "${project_public_name}" + description "${project_public_description}" url "https://insanusmokrassar.github.io/${project.name}" scm { diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/MultipartRequestCallFactory.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/MultipartRequestCallFactory.kt index b4b992ab7f..e7c16717e7 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/MultipartRequestCallFactory.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/MultipartRequestCallFactory.kt @@ -11,10 +11,8 @@ import io.ktor.client.request.forms.MultiPartFormDataContent import io.ktor.client.request.forms.formData import io.ktor.client.request.url import io.ktor.http.* -import kotlinx.serialization.ImplicitReflectionSerializer class MultipartRequestCallFactory : KtorCallFactory { - @ImplicitReflectionSerializer override suspend fun prepareCall( client: HttpClient, baseUrl: String, diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/SimpleRequestCallFactory.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/SimpleRequestCallFactory.kt index 48b4d7e21a..3e91948a34 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/SimpleRequestCallFactory.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/SimpleRequestCallFactory.kt @@ -11,10 +11,8 @@ import io.ktor.client.request.url import io.ktor.http.ContentType import io.ktor.http.HttpMethod import io.ktor.http.content.TextContent -import kotlinx.serialization.ImplicitReflectionSerializer class SimpleRequestCallFactory : KtorCallFactory { - @ImplicitReflectionSerializer override suspend fun prepareCall( client: HttpClient, baseUrl: String, diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/common/CommonMultipartFileRequest.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/common/CommonMultipartFileRequest.kt index efa5240cbd..be59fe4131 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/common/CommonMultipartFileRequest.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/common/CommonMultipartFileRequest.kt @@ -1,13 +1,11 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.common import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.* -import kotlinx.serialization.ImplicitReflectionSerializer import kotlinx.serialization.json.JsonObject data class CommonMultipartFileRequest( val data: Request, override val mediaMap: Map ) : MultipartRequest, Request by data { - @ImplicitReflectionSerializer override val paramsJson: JsonObject = data.json() } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/media/base/MultipartRequestImpl.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/media/base/MultipartRequestImpl.kt index bc5488a504..c00917c99a 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/media/base/MultipartRequestImpl.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/send/media/base/MultipartRequestImpl.kt @@ -2,7 +2,6 @@ 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 @@ -15,7 +14,6 @@ class MultipartRequestImpl, F: Files, R: Any>( ) : MultipartRequest { override fun method(): String = data.method() override fun resultSerializer(): KSerializer = data.resultSerializer() - @ImplicitReflectionSerializer override val paramsJson: JsonObject = data.json() override val mediaMap: Map = files } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/MediaGroupMessage.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/ChannelMediaGroupMessage.kt similarity index 93% rename from src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/MediaGroupMessage.kt rename to src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/ChannelMediaGroupMessage.kt index 904cda00d6..1a10980a8c 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/MediaGroupMessage.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/ChannelMediaGroupMessage.kt @@ -8,7 +8,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.Messag import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MediaGroupContent import org.joda.time.DateTime -data class MediaGroupMessage( +data class ChannelMediaGroupMessage( override val messageId: MessageIdentifier, override val chat: Chat, override val date: DateTime, @@ -17,4 +17,4 @@ data class MediaGroupMessage( override val editDate: DateTime?, override val forwarded: ForwardedMessage?, override val replyTo: Message? -) : Message, MediaGroupMessage +) : MediaGroupMessage diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/CommonMediaGroupMessage.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/CommonMediaGroupMessage.kt index 878dc837c4..736eba1fc9 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/CommonMediaGroupMessage.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/CommonMediaGroupMessage.kt @@ -3,7 +3,6 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.message import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.chat.Chat import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.* -import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MediaGroupContent import org.joda.time.DateTime @@ -17,4 +16,4 @@ data class CommonMediaGroupMessage( override val editDate: DateTime?, override val forwarded: ForwardedMessage?, override val replyTo: Message? -) : Message, MediaGroupMessage, FromUserMessage +) : MediaGroupMessage, FromUserMessage diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/RawMessage.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/RawMessage.kt index d42a935102..19b54b86d2 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/RawMessage.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/RawMessage.kt @@ -210,7 +210,7 @@ data class RawMessage( content -> media_group_id ?.let { when (from) { - null -> MediaGroupMessage( + null -> ChannelMediaGroupMessage( messageId, chat, date.asDate, diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaCollectionContent.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaCollectionContent.kt index a815289302..7e673c624b 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaCollectionContent.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaCollectionContent.kt @@ -2,6 +2,6 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstrac import com.github.insanusmokrassar.TelegramBotAPI.types.files.abstracts.TelegramMediaFile -interface MediaCollectionContent: MessageContent { - val media: List +interface MediaCollectionContent: MessageContent, MediaContent { + val mediaCollection: List } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt index 3a15314fb5..de31836ac8 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt @@ -16,10 +16,12 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstract import com.github.insanusmokrassar.TelegramBotAPI.utils.toMarkdownCaptions data class PhotoContent( - override val media: List, + override val mediaCollection: List, override val caption: String? = null, override val captionEntities: List = emptyList() ) : MediaCollectionContent, CaptionedMediaContent, MediaGroupContent { + override val media: PhotoSize = mediaCollection.biggest() ?: throw IllegalStateException("Can't locate any photo size for this content") + override fun createResend( chatId: ChatIdentifier, disableNotification: Boolean, @@ -27,7 +29,7 @@ data class PhotoContent( replyMarkup: KeyboardMarkup? ): Request = SendPhoto( chatId, - media.biggest() ?.fileId ?: throw IllegalStateException("Empty list of media"), + media.fileId, toMarkdownCaptions().firstOrNull(), MarkdownParseMode, disableNotification, @@ -36,7 +38,7 @@ data class PhotoContent( ) override fun toMediaGroupMemberInputMedia(): MediaGroupMemberInputMedia = InputMediaPhoto( - media.biggest() ?.fileId ?: throw IllegalStateException("Can't locate any photo size for this content"), + media.fileId, toMarkdownCaptions().firstOrNull(), MarkdownParseMode ) diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt index e94d4af561..bf9ffd359e 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt @@ -5,11 +5,12 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate fun List.toMediaGroupUpdate(): MediaGroupUpdate? = (this as? MediaGroupUpdate) ?: let { + val resultList = sortedBy { it.updateId } when (first()) { - is MessageUpdate -> MessageMediaGroupUpdate(this) - is EditMessageUpdate -> EditMessageMediaGroupUpdate(this) - is ChannelPostUpdate -> ChannelPostMediaGroupUpdate(this) - is EditChannelPostUpdate -> EditChannelPostMediaGroupUpdate(this) + is MessageUpdate -> MessageMediaGroupUpdate(resultList) + is EditMessageUpdate -> EditMessageMediaGroupUpdate(resultList) + is ChannelPostUpdate -> ChannelPostMediaGroupUpdate(resultList) + is EditChannelPostUpdate -> EditChannelPostMediaGroupUpdate(resultList) else -> null } } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/JSON.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/JSON.kt index e8c0583fac..9273319a5c 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/JSON.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/JSON.kt @@ -1,15 +1,8 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils -import kotlinx.serialization.ImplicitReflectionSerializer import kotlinx.serialization.KSerializer import kotlinx.serialization.json.* -@Deprecated("This method can throw exceptions") -@ImplicitReflectionSerializer -inline fun T.toJsonWithoutNulls(): JsonObject = Json.nonstrict.toJson( - this -).jsonObject.withoutNulls() - inline fun T.toJsonWithoutNulls(serializer: KSerializer): JsonObject = toJson(serializer).withoutNulls() inline fun T.toJson(serializer: KSerializer): JsonObject = Json.nonstrict.toJson(