From 9cd1862300dd519ca7eed3c1f8a48909a28d4c98 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 6 Feb 2023 11:25:31 +0600 Subject: [PATCH] add opportunity to copy chat permissions --- .../buttons/KeyboardButtonRequestUser.kt | 2 + .../tgbotapi/types/chat/ChatPermissions.kt | 66 ++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardButtonRequestUser.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardButtonRequestUser.kt index ff7483b011..99169842ad 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardButtonRequestUser.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardButtonRequestUser.kt @@ -4,6 +4,7 @@ import dev.inmo.tgbotapi.types.request.RequestId import dev.inmo.tgbotapi.types.requestIdField import dev.inmo.tgbotapi.types.userIsBotField import dev.inmo.tgbotapi.types.userIsPremiumField +import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded import kotlinx.serialization.EncodeDefault import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName @@ -14,6 +15,7 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder @Serializable(KeyboardButtonRequestUser.Companion::class) +@ClassCastsIncluded sealed interface KeyboardButtonRequestUser { val requestId: RequestId val isBot: Boolean? diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/ChatPermissions.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/ChatPermissions.kt index 6efe4c4f41..54042f10c6 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/ChatPermissions.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/ChatPermissions.kt @@ -2,7 +2,6 @@ package dev.inmo.tgbotapi.types.chat import dev.inmo.tgbotapi.types.* import kotlinx.serialization.KSerializer -import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.Transient import kotlinx.serialization.descriptors.SerialDescriptor @@ -124,6 +123,37 @@ interface ChatPermissions { canPinMessages = canPinMessages ) + fun from( + chatPermissions: ChatPermissions, + canSendMessages: Boolean? = chatPermissions.canSendMessages, + canSendAudios: Boolean? = chatPermissions.canSendAudios, + canSendDocuments: Boolean? = chatPermissions.canSendDocuments, + canSendPhotos: Boolean? = chatPermissions.canSendPhotos, + canSendVideos: Boolean? = chatPermissions.canSendVideos, + canSendVideoNotes: Boolean? = chatPermissions.canSendVideoNotes, + canSendVoiceNotes: Boolean? = chatPermissions.canSendVoiceNotes, + canSendPolls: Boolean? = chatPermissions.canSendPolls, + canSendOtherMessages: Boolean? = chatPermissions.canSendOtherMessages, + canAddWebPagePreviews: Boolean? = chatPermissions.canAddWebPagePreviews, + canChangeInfo: Boolean? = chatPermissions.canChangeInfo, + canInviteUsers: Boolean? = chatPermissions.canInviteUsers, + canPinMessages: Boolean? = chatPermissions.canPinMessages + ) = ChatPermissions( + canSendMessages = canSendMessages, + canSendAudios = canSendAudios, + canSendDocuments = canSendDocuments, + canSendPhotos = canSendPhotos, + canSendVideos = canSendVideos, + canSendVideoNotes = canSendVideoNotes, + canSendVoiceNotes = canSendVoiceNotes, + canSendPolls = canSendPolls, + canSendOtherMessages = canSendOtherMessages, + canAddWebPagePreviews = canAddWebPagePreviews, + canChangeInfo = canChangeInfo, + canInviteUsers = canInviteUsers, + canPinMessages = canPinMessages + ) + private val realSerializer = ChatPermissionsImpl.serializer() override val descriptor: SerialDescriptor get() = realSerializer.descriptor @@ -155,6 +185,40 @@ interface ChatPermissions { ) } } + + /** + * Copying current instance as [ChatPermissions], but realizations of this interface may differently override this + * method + */ + fun defaultCopy( + canSendMessages: Boolean? = this.canSendMessages, + canSendAudios: Boolean? = this.canSendAudios, + canSendDocuments: Boolean? = this.canSendDocuments, + canSendPhotos: Boolean? = this.canSendPhotos, + canSendVideos: Boolean? = this.canSendVideos, + canSendVideoNotes: Boolean? = this.canSendVideoNotes, + canSendVoiceNotes: Boolean? = this.canSendVoiceNotes, + canSendPolls: Boolean? = this.canSendPolls, + canSendOtherMessages: Boolean? = this.canSendOtherMessages, + canAddWebPagePreviews: Boolean? = this.canAddWebPagePreviews, + canChangeInfo: Boolean? = this.canChangeInfo, + canInviteUsers: Boolean? = this.canInviteUsers, + canPinMessages: Boolean? = this.canPinMessages + ): ChatPermissions = ChatPermissions( + canSendMessages = canSendPolls, + canSendAudios = null, + canSendDocuments = null, + canSendPhotos = null, + canSendVideos = null, + canSendVideoNotes = null, + canSendVoiceNotes = null, + canSendPolls = canSendPolls, + canSendOtherMessages = canSendOtherMessages, + canAddWebPagePreviews = canAddWebPagePreviews, + canChangeInfo = canChangeInfo, + canInviteUsers = canInviteUsers, + canPinMessages = canPinMessages + ) } val LeftRestrictionsChatPermissions = ChatPermissions(