1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-11-24 16:26:01 +00:00

add different business entities

This commit is contained in:
2024-04-16 18:29:57 +06:00
parent be9c0cff61
commit a7b2bb820b
29 changed files with 679 additions and 30 deletions

View File

@@ -0,0 +1,7 @@
package dev.inmo.tgbotapi.abstracts.types
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
interface WithBusinessConnectionId : WithOptionalBusinessConnectionId {
override val businessConnectionId: BusinessConnectionId
}

View File

@@ -0,0 +1,7 @@
package dev.inmo.tgbotapi.abstracts.types
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
interface WithOptionalBusinessConnectionId {
val businessConnectionId: BusinessConnectionId?
}

View File

@@ -585,3 +585,5 @@ const val additionalChatCountField = "additional_chat_count"
const val unclaimedPrizeCountField = "unclaimed_prize_count"
const val wasRefundedField = "was_refunded"
const val isManualField = "is_manual"
const val businessConnectionIdField = "business_connection_id"

View File

@@ -1,5 +1,6 @@
package dev.inmo.tgbotapi.types.business_connection
import dev.inmo.tgbotapi.abstracts.types.WithBusinessConnectionId
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.chat.PreviewUser
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
@@ -13,7 +14,7 @@ import kotlinx.serialization.encoding.Encoder
@Serializable
@ClassCastsIncluded
sealed interface BusinessConnection {
sealed interface BusinessConnection : WithBusinessConnectionId {
val id: BusinessConnectionId
val user: PreviewUser
val userChatId: ChatId
@@ -21,6 +22,9 @@ sealed interface BusinessConnection {
val canReply: Boolean
val isEnabled: Boolean
override val businessConnectionId: BusinessConnectionId
get() = id
@Serializable
data class Enabled(
@SerialName(idField)

View File

@@ -0,0 +1,21 @@
package dev.inmo.tgbotapi.types.business_connection
import dev.inmo.tgbotapi.abstracts.types.WithBusinessConnectionId
import dev.inmo.tgbotapi.abstracts.types.WithOptionalBusinessConnectionId
import dev.inmo.tgbotapi.types.MessageId
import dev.inmo.tgbotapi.types.businessConnectionIdField
import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.chatField
import dev.inmo.tgbotapi.types.messageIdField
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class BusinessMessagesDeleted(
@SerialName(businessConnectionIdField)
override val businessConnectionId: BusinessConnectionId,
@SerialName(chatField)
val chat: PreviewChat,
@SerialName(messageIdField)
val messageId: MessageId
) : WithBusinessConnectionId

View File

@@ -1,10 +1,12 @@
package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.abstracts.types.WithBusinessConnectionId
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
import dev.inmo.tgbotapi.types.chat.PreviewPrivateChat
import dev.inmo.tgbotapi.types.message.content.MessageContent
interface BusinessContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T>, FromUserMessage {
interface BusinessContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T>, FromUserMessage,
WithBusinessConnectionId {
override val chat: PreviewPrivateChat
override val businessConnectionId: BusinessConnectionId
}
}

View File

@@ -17,7 +17,7 @@ import kotlinx.serialization.encoding.Encoder
import kotlin.jvm.JvmInline
@ClassCastsIncluded(excludeRegex = ".*Impl")
interface Message : WithPreviewChatAndMessageId {
interface Message : WithPreviewChatAndMessageId, PossiblyBusinessMessage {
val date: DateTime
val metaInfo: MetaInfo
get() = MetaInfo(chat.id, messageId)

View File

@@ -1,8 +1,9 @@
package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.abstracts.types.WithOptionalBusinessConnectionId
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
interface PossiblyBusinessMessage : Message {
val businessConnectionId: BusinessConnectionId?
interface PossiblyBusinessMessage : WithOptionalBusinessConnectionId {
override val businessConnectionId: BusinessConnectionId?
get() = null
}

View File

@@ -3,11 +3,15 @@ package dev.inmo.tgbotapi.types.update
import dev.inmo.tgbotapi.types.UpdateId
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.BusinessContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate
data class BusinessMessageUpdate(
override val updateId: UpdateId,
override val data: BusinessContentMessage<*>
) : BaseSentMessageUpdate {
override fun copy(newData: BusinessContentMessage<*>) = copy(updateId, newData)
/**
* @param newData Must be [BusinessContentMessage]
*/
override fun copy(newData: ContentMessage<*>) = copy(updateId, newData as BusinessContentMessage<*>)
}

View File

@@ -0,0 +1,13 @@
package dev.inmo.tgbotapi.types.update
import dev.inmo.tgbotapi.types.UpdateId
import dev.inmo.tgbotapi.types.business_connection.BusinessMessagesDeleted
import dev.inmo.tgbotapi.types.message.abstracts.BusinessContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
import dev.inmo.tgbotapi.types.update.abstracts.BaseEditMessageUpdate
import dev.inmo.tgbotapi.types.update.abstracts.Update
data class DeletedBusinessMessageUpdate(
override val updateId: UpdateId,
override val data: BusinessMessagesDeleted
) : Update

View File

@@ -0,0 +1,11 @@
package dev.inmo.tgbotapi.types.update
import dev.inmo.tgbotapi.types.UpdateId
import dev.inmo.tgbotapi.types.message.abstracts.BusinessContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
import dev.inmo.tgbotapi.types.update.abstracts.BaseEditMessageUpdate
data class EditBusinessMessageUpdate(
override val updateId: UpdateId,
override val data: BusinessContentMessage<*>
) : BaseEditMessageUpdate

View File

@@ -7,6 +7,7 @@ import dev.inmo.tgbotapi.types.InlineQueries.query.RawInlineQuery
import dev.inmo.tgbotapi.types.boosts.ChatBoostRemoved
import dev.inmo.tgbotapi.types.boosts.ChatBoostUpdated
import dev.inmo.tgbotapi.types.business_connection.BusinessConnection
import dev.inmo.tgbotapi.types.business_connection.BusinessMessagesDeleted
import dev.inmo.tgbotapi.types.chat.ChatJoinRequest
import dev.inmo.tgbotapi.types.chat.ChatMessageReactionUpdated
import dev.inmo.tgbotapi.types.chat.ChatMessageReactionsCountUpdated
@@ -48,7 +49,12 @@ internal data class RawUpdate constructor(
private val message_reaction_count: ChatMessageReactionsCountUpdated? = null,
private val chat_boost: ChatBoostUpdated? = null,
private val removed_chat_boost: ChatBoostRemoved? = null,
private val business_connection: BusinessConnection? = null
private val business_connection: BusinessConnection? = null,
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
private val business_message: BusinessContentMessage<*>? = null,
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
private val edited_business_message: BusinessContentMessage<*>? = null,
private val deleted_business_messages: BusinessMessagesDeleted? = null,
) {
@Transient
private var initedUpdate: Update? = null
@@ -81,6 +87,9 @@ internal data class RawUpdate constructor(
chat_boost != null -> ChatBoostUpdatedUpdate(updateId, chat_boost)
removed_chat_boost != null -> ChatBoostRemovedUpdate(updateId, removed_chat_boost)
business_connection != null -> BusinessConnectionUpdate(updateId, business_connection)
business_message != null -> BusinessMessageUpdate(updateId, business_message)
edited_business_message != null -> EditBusinessMessageUpdate(updateId, edited_business_message)
deleted_business_messages != null -> DeletedBusinessMessageUpdate(updateId, deleted_business_messages)
else -> UnknownUpdate(
updateId,
raw

View File

@@ -4,5 +4,10 @@ import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
interface BaseSentMessageUpdate : BaseMessageUpdate {
/**
* This method copies current [BaseSentMessageUpdate] with new data from [newData]
*
* **THERE IS NO ANY GUARANTEE THAT THIS METHOD WILL NOT THROW ANY EXCEPTION**
*/
fun copy(newData: ContentMessage<*>): BaseSentMessageUpdate
}

View File

@@ -41,6 +41,9 @@ interface FlowsUpdatesFilter : UpdatesFilter {
val chatBoostUpdatedUpdateFlow: Flow<ChatBoostUpdatedUpdate>
val chatBoostRemovedUpdateFlow: Flow<ChatBoostRemovedUpdate>
val businessConnectionUpdatesFlow: Flow<BusinessConnectionUpdate>
val businessMessageUpdatesFlow: Flow<BusinessMessageUpdate>
val editBusinessMessageUpdatesFlow: Flow<EditBusinessMessageUpdate>
val deleteBusinessMessageUpdatesFlow: Flow<DeletedBusinessMessageUpdate>
val unknownUpdatesFlow: Flow<UnknownUpdate>
}
@@ -65,6 +68,9 @@ abstract class AbstractFlowsUpdatesFilter : FlowsUpdatesFilter {
override val chatBoostUpdatedUpdateFlow: Flow<ChatBoostUpdatedUpdate> by lazy { allUpdatesFlow.filterIsInstance() }
override val chatBoostRemovedUpdateFlow: Flow<ChatBoostRemovedUpdate> by lazy { allUpdatesFlow.filterIsInstance() }
override val businessConnectionUpdatesFlow: Flow<BusinessConnectionUpdate> by lazy { allUpdatesFlow.filterIsInstance() }
override val businessMessageUpdatesFlow: Flow<BusinessMessageUpdate> by lazy { allUpdatesFlow.filterIsInstance() }
override val editBusinessMessageUpdatesFlow: Flow<EditBusinessMessageUpdate> by lazy { allUpdatesFlow.filterIsInstance() }
override val deleteBusinessMessageUpdatesFlow: Flow<DeletedBusinessMessageUpdate> by lazy { allUpdatesFlow.filterIsInstance() }
}
/**