diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt index 5c8f9135f5..73a4e0095e 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt @@ -5,6 +5,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.utils.* import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.PaidMessagePriceChanged import dev.inmo.tgbotapi.types.chat.ChatBackground import dev.inmo.tgbotapi.types.giveaway.GiveawayCreated import dev.inmo.tgbotapi.types.giveaway.GiveawayPrivateResults @@ -248,3 +249,8 @@ suspend fun BehaviourContext.waitGiveawayCompletedWithPrivateWinners( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } ) = waitGiveawayCompleted(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPaidMessagePriceChanged( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt index 9756b2017f..0d23f53a78 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt @@ -5,6 +5,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.utils.* import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.PaidMessagePriceChanged import dev.inmo.tgbotapi.types.chat.ChatBackground import dev.inmo.tgbotapi.types.message.ChatEvents.* import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.* @@ -224,3 +225,8 @@ suspend fun BehaviourContext.waitChatBackgroundSetEventsMessages( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } ) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPaidMessagePriceChangedMessages( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt index c7bda994d7..c5ae3cf425 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/EventTriggers.kt @@ -10,6 +10,7 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.Mar import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull import dev.inmo.tgbotapi.extensions.utils.chatEventMessageOrNull +import dev.inmo.tgbotapi.types.PaidMessagePriceChanged import dev.inmo.tgbotapi.types.chat.ChatBackground import dev.inmo.tgbotapi.types.giveaway.GiveawayCreated import dev.inmo.tgbotapi.types.giveaway.GiveawayPrivateResults @@ -1045,3 +1046,25 @@ suspend fun BC.onGiveawayCompletedWithPrivateWinners( additionalSubcontextInitialAction: CustomBehaviourContextAndTwoTypesReceiver>? = null, scenarioReceiver: CustomBehaviourContextAndTypeReceiver> ) = onGiveawayCompleted(initialFilter, subcontextUpdatesFilter, markerFactory, additionalSubcontextInitialAction, scenarioReceiver) + + +/** + * @param initialFilter This filter will be called to remove unnecessary data BEFORE [scenarioReceiver] call + * @param subcontextUpdatesFilter This filter will be applied to each update inside of [scenarioReceiver]. For example, + * this filter will be used if you will call [dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitContentMessage]. + * Use [dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextAndTwoTypesReceiver] function to create your own. + * Use [dev.inmo.tgbotapi.extensions.behaviour_builder.utils.plus] or [dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times] + * to combinate several filters + * @param [markerFactory] **Pass null to handle requests fully parallel**. Will be used to identify different "stream". + * [scenarioReceiver] will be called synchronously in one "stream". Output of [markerFactory] will be used as a key for + * "stream" + * @param scenarioReceiver Main callback which will be used to handle incoming data if [initialFilter] will pass that + * data + */ +suspend fun BC.onPaidMessagePriceChanged( + initialFilter: SimpleFilter>? = null, + subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver, Update>? = MessageFilterByChat, + markerFactory: MarkerFactory, Any>? = ByChatMessageMarkerFactory, + additionalSubcontextInitialAction: CustomBehaviourContextAndTwoTypesReceiver>? = null, + scenarioReceiver: CustomBehaviourContextAndTypeReceiver> +) = onEventWithCustomChatEventMessage(initialFilter, subcontextUpdatesFilter, markerFactory, additionalSubcontextInitialAction, scenarioReceiver) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt index 5ed47f6f00..bd92cfd9fb 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt @@ -604,6 +604,9 @@ const val mediaField = "media" const val mainFrameTimestampField = "main_frame_timestamp" +const val paidMessageStarCountField = "paid_message_star_count" +const val paidStarCountField = "paid_star_count" + const val disableEditMessageField = "disable_edit_message" const val scoreField = "score" const val forceField = "force" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/PaidMessagePriceChanged.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/PaidMessagePriceChanged.kt new file mode 100644 index 0000000000..937698541f --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/PaidMessagePriceChanged.kt @@ -0,0 +1,11 @@ +package dev.inmo.tgbotapi.types + +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PaidMessagePriceChanged( + @SerialName(paidMessageStarCountField) + val cost: Int +) : CommonEvent diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/BusinessContentMessageImpl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/BusinessContentMessageImpl.kt index aca2ca5651..ffb9b2e31f 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/BusinessContentMessageImpl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/BusinessContentMessageImpl.kt @@ -11,6 +11,7 @@ import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage import dev.inmo.tgbotapi.types.message.abstracts.BusinessContentMessage import dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage import dev.inmo.tgbotapi.types.message.content.MessageContent +import kotlinx.serialization.SerialName data class BusinessContentMessageImpl( override val messageId: MessageId, @@ -28,6 +29,8 @@ data class BusinessContentMessageImpl( override val mediaGroupId: MediaGroupId?, override val senderBusinessBot: PreviewBot?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : BusinessContentMessage { constructor( messageId: MessageId, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelContentMessageImpl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelContentMessageImpl.kt index 9e845ebf7d..08df25df6a 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelContentMessageImpl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelContentMessageImpl.kt @@ -9,6 +9,7 @@ import dev.inmo.tgbotapi.types.chat.PreviewChat import dev.inmo.tgbotapi.types.chat.User import dev.inmo.tgbotapi.types.message.abstracts.* import dev.inmo.tgbotapi.types.message.content.MessageContent +import kotlinx.serialization.SerialName data class ChannelContentMessageImpl( override val messageId: MessageId, @@ -25,6 +26,8 @@ data class ChannelContentMessageImpl( override val authorSignature: AuthorSignature?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : ChannelContentMessage { constructor( messageId: MessageId, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt index 614e6c2e8f..4da9065c32 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt @@ -8,6 +8,7 @@ import dev.inmo.tgbotapi.types.chat.CommonBot import dev.inmo.tgbotapi.types.chat.User import dev.inmo.tgbotapi.types.message.abstracts.* import dev.inmo.tgbotapi.types.message.content.MessageContent +import kotlinx.serialization.SerialName data class ConnectedFromChannelGroupContentMessageImpl( override val chat: PreviewGroupChat, @@ -24,6 +25,8 @@ data class ConnectedFromChannelGroupContentMessageImpl( override val authorSignature: AuthorSignature?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : ConnectedFromChannelGroupContentMessage { constructor( @@ -41,8 +44,23 @@ data class ConnectedFromChannelGroupContentMessageImpl( authorSignature: AuthorSignature?, mediaGroupId: MediaGroupId?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, channel, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, authorSignature, mediaGroupId, fromOffline + chat = chat, + channel = channel, + messageId = messageId, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + authorSignature = authorSignature, + mediaGroupId = mediaGroupId, + fromOffline = fromOffline, + cost = cost, ) } @@ -61,6 +79,8 @@ data class UnconnectedFromChannelGroupContentMessageImpl( override val authorSignature: AuthorSignature?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : UnconnectedFromChannelGroupContentMessage { constructor( chat: PreviewGroupChat, @@ -77,8 +97,23 @@ data class UnconnectedFromChannelGroupContentMessageImpl( authorSignature: AuthorSignature?, mediaGroupId: MediaGroupId?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, channel, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, authorSignature, mediaGroupId, fromOffline + chat = chat, + channel = channel, + messageId = messageId, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + authorSignature = authorSignature, + mediaGroupId = mediaGroupId, + fromOffline = fromOffline, + cost = cost, ) } @@ -96,6 +131,8 @@ data class AnonymousGroupContentMessageImpl( override val authorSignature: AuthorSignature?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : AnonymousGroupContentMessage { constructor( chat: PreviewGroupChat, @@ -111,8 +148,22 @@ data class AnonymousGroupContentMessageImpl( authorSignature: AuthorSignature?, mediaGroupId: MediaGroupId?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, authorSignature, mediaGroupId, fromOffline + chat = chat, + messageId = messageId, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + authorSignature = authorSignature, + mediaGroupId = mediaGroupId, + fromOffline = fromOffline, + cost = cost, ) } @@ -131,6 +182,8 @@ data class CommonGroupContentMessageImpl( override val mediaGroupId: MediaGroupId?, override val senderBoostsCount: Int?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : CommonGroupContentMessage { constructor( chat: PreviewGroupChat, @@ -147,8 +200,23 @@ data class CommonGroupContentMessageImpl( mediaGroupId: MediaGroupId?, senderBoostsCount: Int?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, messageId, from, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, mediaGroupId, senderBoostsCount, fromOffline + chat = chat, + messageId = messageId, + from = from, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + mediaGroupId = mediaGroupId, + senderBoostsCount = senderBoostsCount, + fromOffline = fromOffline, + cost = cost, ) } @@ -168,6 +236,8 @@ data class FromChannelForumContentMessageImpl( override val authorSignature: AuthorSignature?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : FromChannelForumContentMessage { constructor( chat: PreviewForumChat, @@ -185,8 +255,24 @@ data class FromChannelForumContentMessageImpl( authorSignature: AuthorSignature?, mediaGroupId: MediaGroupId?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, channel, messageId, threadId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, authorSignature, mediaGroupId, fromOffline + chat = chat, + channel = channel, + messageId = messageId, + threadId = threadId, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + authorSignature = authorSignature, + mediaGroupId = mediaGroupId, + fromOffline = fromOffline, + cost = cost, ) } @@ -205,6 +291,8 @@ data class AnonymousForumContentMessageImpl( override val authorSignature: AuthorSignature?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : AnonymousForumContentMessage { constructor( chat: PreviewForumChat, @@ -221,8 +309,23 @@ data class AnonymousForumContentMessageImpl( authorSignature: AuthorSignature?, mediaGroupId: MediaGroupId?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, messageId, threadId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, authorSignature, mediaGroupId, fromOffline + chat = chat, + messageId = messageId, + threadId = threadId, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + authorSignature = authorSignature, + mediaGroupId = mediaGroupId, + fromOffline = fromOffline, + cost = cost, ) } @@ -242,6 +345,8 @@ data class CommonForumContentMessageImpl( override val mediaGroupId: MediaGroupId?, override val senderBoostsCount: Int?, override val fromOffline: Boolean, + @SerialName(paidMessageStarCountField) + override val cost: Int? = null, ) : CommonForumContentMessage { constructor( chat: PreviewForumChat, @@ -259,7 +364,23 @@ data class CommonForumContentMessageImpl( mediaGroupId: MediaGroupId?, senderBoostsCount: Int?, fromOffline: Boolean, + cost: Int? = null, ) : this( - chat, messageId, threadId, from, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, content, senderBot, mediaGroupId, senderBoostsCount, fromOffline + chat = chat, + messageId = messageId, + threadId = threadId, + from = from, + date = date, + forwardOrigin = forwardInfo.messageOrigin(), + editDate = editDate, + hasProtectedContent = hasProtectedContent, + replyInfo = replyTo ?.let { ReplyInfo.Internal(it) }, + replyMarkup = replyMarkup, + content = content, + senderBot = senderBot, + mediaGroupId = mediaGroupId, + senderBoostsCount = senderBoostsCount, + fromOffline = fromOffline, + cost = cost, ) } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateContentMessageImpl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateContentMessageImpl.kt index c9f0d1be13..3fc2eadcd7 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateContentMessageImpl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateContentMessageImpl.kt @@ -9,6 +9,7 @@ import dev.inmo.tgbotapi.types.chat.User import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage import dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage import dev.inmo.tgbotapi.types.message.content.MessageContent +import kotlinx.serialization.SerialName data class PrivateContentMessageImpl( override val messageId: MessageId, @@ -24,7 +25,9 @@ data class PrivateContentMessageImpl( override val senderBot: CommonBot?, override val mediaGroupId: MediaGroupId?, override val fromOffline: Boolean, - override val effectId: EffectId? + override val effectId: EffectId?, + @SerialName(paidStarCountField) + override val cost: Int? = null ) : PrivateContentMessage { constructor( messageId: MessageId, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt index 2fa2995bc8..735ab56944 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt @@ -109,6 +109,8 @@ internal data class RawMessage( private val is_from_offline: Boolean = false, + private val paid_star_count: Int? = null, + // Voice Chat Service Messages private val video_chat_scheduled: VideoChatScheduled? = null, private val video_chat_started: VideoChatStarted? = null, @@ -160,6 +162,8 @@ internal data class RawMessage( private val giveaway: Giveaway? = null, private val giveaway_winners: GiveawayPublicResults? = null, private val giveaway_completed: GiveawayPrivateResults? = null, + + private val paid_message_price_changed: PaidMessagePriceChanged? = null ) { private val checkedFrom = from ?.takeIf { !it.isFakeTelegramUser() } private val content: MessageContent? by lazy { @@ -282,6 +286,7 @@ internal data class RawMessage( giveaway_completed != null -> giveaway_completed boost_added != null -> boost_added chat_background_set != null -> chat_background_set + paid_message_price_changed != null -> paid_message_price_changed else -> null } } @@ -295,7 +300,7 @@ internal data class RawMessage( } try { - chatEvent?.let { chatEvent -> + chatEvent ?.let { chatEvent -> when (chat) { is PreviewSupergroupChat -> CommonSupergroupEventMessage( messageId, @@ -350,7 +355,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) is PreviewForumChat -> if (messageThreadId != null) { val chatId = ChatIdWithThreadId( @@ -376,7 +382,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) is PreviewGroupChat -> AnonymousForumContentMessageImpl( chat = actualForumChat, @@ -392,7 +399,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) null -> CommonForumContentMessageImpl( chat = actualForumChat, @@ -409,7 +417,8 @@ internal data class RawMessage( senderBot = via_bot, mediaGroupId = media_group_id, senderBoostsCount = sender_boost_count, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } } else { @@ -429,7 +438,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } else { UnconnectedFromChannelGroupContentMessageImpl( @@ -446,7 +456,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } is GroupChat -> AnonymousGroupContentMessageImpl( @@ -462,7 +473,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) null -> CommonGroupContentMessageImpl( chat = chat, @@ -478,7 +490,8 @@ internal data class RawMessage( senderBot = via_bot, mediaGroupId = media_group_id, senderBoostsCount = sender_boost_count, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } } @@ -498,7 +511,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } else { UnconnectedFromChannelGroupContentMessageImpl( @@ -515,7 +529,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } is PreviewGroupChat -> AnonymousGroupContentMessageImpl( @@ -531,7 +546,8 @@ internal data class RawMessage( senderBot = via_bot, authorSignature = author_signature, mediaGroupId = media_group_id, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) null -> CommonGroupContentMessageImpl( chat = chat, @@ -547,7 +563,8 @@ internal data class RawMessage( senderBot = via_bot, mediaGroupId = media_group_id, senderBoostsCount = sender_boost_count, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } } @@ -566,7 +583,8 @@ internal data class RawMessage( senderBot = via_bot, mediaGroupId = media_group_id, fromOffline = is_from_offline, - effectId = effect_id + effectId = effect_id, + cost = paid_star_count, ) } else { BusinessContentMessageImpl( @@ -587,18 +605,19 @@ internal data class RawMessage( senderBot = via_bot, mediaGroupId = media_group_id, senderBusinessBot = sender_business_bot, - fromOffline = is_from_offline + fromOffline = is_from_offline, + cost = paid_star_count, ) } else -> error("Unknown type of chat: $chat") } } ?: passport_data ?.let{ PassportMessage( - messageId, - chat, - checkedFrom ?: from ?: error("For passport must be provided user, but got null"), - date.asDate, - passport_data + messageId = messageId, + chat = chat, + from = checkedFrom ?: from ?: error("For passport must be provided user, but got null"), + date = date.asDate, + passportData = passport_data, ) } ?: error("Was not found supported type of data") } catch (e: Exception) { diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/CommonMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/CommonMessage.kt index 5189ac818f..144a704ed7 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/CommonMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/CommonMessage.kt @@ -10,4 +10,5 @@ sealed interface CommonMessage : AccessibleMessage, PossiblyBusinessMessage, PossiblyOfflineMessage, PossiblyMediaGroupMessage, + PossiblyPaidMessage, ContentMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyPaidMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyPaidMessage.kt new file mode 100644 index 0000000000..00572227f9 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PossiblyPaidMessage.kt @@ -0,0 +1,5 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +interface PossiblyPaidMessage : Message { + val cost: Int? +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/MediaGroupContentMessageCreator.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/MediaGroupContentMessageCreator.kt index f5afda775b..090ecf64ad 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/MediaGroupContentMessageCreator.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/MediaGroupContentMessageCreator.kt @@ -29,7 +29,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, authorSignature = sourceMessage.authorSignature, mediaGroupId = sourceMessage.mediaGroupId, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is BusinessContentMessage -> BusinessContentMessageImpl( messageId = sourceMessage.messageId, @@ -46,7 +47,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, mediaGroupId = sourceMessage.mediaGroupId, senderBusinessBot = sourceMessage.senderBusinessBot, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is PrivateContentMessage -> PrivateContentMessageImpl( messageId = sourceMessage.messageId, @@ -62,7 +64,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, mediaGroupId = sourceMessage.mediaGroupId, fromOffline = sourceMessage.fromOffline, - effectId = sourceMessage.effectId + effectId = sourceMessage.effectId, + cost = sourceMessage.cost, ) is AnonymousGroupContentMessage -> AnonymousGroupContentMessageImpl( chat = sourceMessage.chat, @@ -77,7 +80,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, authorSignature = sourceMessage.authorSignature, mediaGroupId = sourceMessage.mediaGroupId, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is CommonGroupContentMessage -> CommonGroupContentMessageImpl( chat = sourceMessage.chat, @@ -93,7 +97,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, mediaGroupId = sourceMessage.mediaGroupId, senderBoostsCount = sourceMessage.senderBoostsCount, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is ConnectedFromChannelGroupContentMessage -> ConnectedFromChannelGroupContentMessageImpl( chat = sourceMessage.chat, @@ -109,7 +114,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, authorSignature = sourceMessage.authorSignature, mediaGroupId = sourceMessage.mediaGroupId, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is UnconnectedFromChannelGroupContentMessage -> UnconnectedFromChannelGroupContentMessageImpl( chat = sourceMessage.chat, @@ -125,7 +131,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, authorSignature = sourceMessage.authorSignature, mediaGroupId = sourceMessage.mediaGroupId, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is AnonymousForumContentMessage -> AnonymousForumContentMessageImpl( chat = sourceMessage.chat, @@ -141,7 +148,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, authorSignature = sourceMessage.authorSignature, mediaGroupId = sourceMessage.mediaGroupId, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is CommonForumContentMessage -> CommonForumContentMessageImpl( chat = sourceMessage.chat, @@ -158,7 +166,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, mediaGroupId = sourceMessage.mediaGroupId, senderBoostsCount = sourceMessage.senderBoostsCount, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) is FromChannelForumContentMessage -> FromChannelForumContentMessageImpl( chat = sourceMessage.chat, @@ -175,7 +184,8 @@ fun List>.asMedia senderBot = sourceMessage.senderBot, authorSignature = sourceMessage.authorSignature, mediaGroupId = sourceMessage.mediaGroupId, - fromOffline = sourceMessage.fromOffline + fromOffline = sourceMessage.fromOffline, + cost = sourceMessage.cost, ) } }