1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-16 21:59:24 +00:00

start separate channel direct messages thread id insttead of one merged message thread id

This commit is contained in:
2025-09-03 19:44:42 +06:00
parent 5aa6ac3320
commit 989d33acb8
12 changed files with 92 additions and 42 deletions

View File

@@ -5,7 +5,7 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.utils.* import dev.inmo.tgbotapi.extensions.utils.*
import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.requests.abstracts.Request
import dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged import dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged
import dev.inmo.tgbotapi.types.PaidMessagePriceChanged import dev.inmo.tgbotapi.types.PaidMessagePriceChanged
import dev.inmo.tgbotapi.types.chat.ChatBackground import dev.inmo.tgbotapi.types.chat.ChatBackground
import dev.inmo.tgbotapi.types.checklists.ChecklistTasksAdded import dev.inmo.tgbotapi.types.checklists.ChecklistTasksAdded
@@ -287,7 +287,7 @@ fun BehaviourContext.waitChecklistTasksAdded(
fun BehaviourContext.waitChannelDirectMessagesConfigurationChanged( fun BehaviourContext.waitChannelDirectMessagesConfigurationChanged(
initRequest: Request<*>? = null, initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null } errorFactory: NullableRequestBuilder<*> = { null }
) = waitEvents<ChannelDirectMessagesConfigurationChanged>(initRequest, errorFactory) ) = waitEvents<DirectMessagesConfigurationChanged>(initRequest, errorFactory)
fun BehaviourContext.waitSuggestedPostApprovalFailed( fun BehaviourContext.waitSuggestedPostApprovalFailed(
initRequest: Request<*>? = null, initRequest: Request<*>? = null,

View File

@@ -10,7 +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.behaviour_builder.utils.times
import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull
import dev.inmo.tgbotapi.extensions.utils.chatEventMessageOrNull import dev.inmo.tgbotapi.extensions.utils.chatEventMessageOrNull
import dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged import dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged
import dev.inmo.tgbotapi.types.PaidMessagePriceChanged import dev.inmo.tgbotapi.types.PaidMessagePriceChanged
import dev.inmo.tgbotapi.types.chat.ChatBackground import dev.inmo.tgbotapi.types.chat.ChatBackground
import dev.inmo.tgbotapi.types.checklists.ChecklistTasksAdded import dev.inmo.tgbotapi.types.checklists.ChecklistTasksAdded
@@ -41,7 +41,6 @@ import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage
import dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage import dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage
import dev.inmo.tgbotapi.types.message.payments.RefundedPaymentEvent import dev.inmo.tgbotapi.types.message.payments.RefundedPaymentEvent
import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent
import dev.inmo.tgbotapi.types.payments.SuggestedPostPrice
import dev.inmo.tgbotapi.types.request.ChatShared import dev.inmo.tgbotapi.types.request.ChatShared
import dev.inmo.tgbotapi.types.request.ChatSharedRequest import dev.inmo.tgbotapi.types.request.ChatSharedRequest
import dev.inmo.tgbotapi.types.request.UsersShared import dev.inmo.tgbotapi.types.request.UsersShared
@@ -1184,11 +1183,11 @@ fun <BC : BehaviourContext> BC.onChecklistTasksAdded(
* data * data
*/ */
fun <BC : BehaviourContext> BC.onChannelDirectMessagesConfigurationChanged( fun <BC : BehaviourContext> BC.onChannelDirectMessagesConfigurationChanged(
initialFilter: SimpleFilter<ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>>? = null, initialFilter: SimpleFilter<ChannelEventMessage<DirectMessagesConfigurationChanged>>? = null,
subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver<BC, Boolean, ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>, Update>? = MessageFilterByChat, subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver<BC, Boolean, ChannelEventMessage<DirectMessagesConfigurationChanged>, Update>? = MessageFilterByChat,
markerFactory: MarkerFactory<in ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>, Any>? = ByChatMessageMarkerFactory, markerFactory: MarkerFactory<in ChannelEventMessage<DirectMessagesConfigurationChanged>, Any>? = ByChatMessageMarkerFactory,
additionalSubcontextInitialAction: CustomBehaviourContextAndTwoTypesReceiver<BC, Unit, Update, ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>>? = null, additionalSubcontextInitialAction: CustomBehaviourContextAndTwoTypesReceiver<BC, Unit, Update, ChannelEventMessage<DirectMessagesConfigurationChanged>>? = null,
scenarioReceiver: CustomBehaviourContextAndTypeReceiver<BC, Unit, ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>> scenarioReceiver: CustomBehaviourContextAndTypeReceiver<BC, Unit, ChannelEventMessage<DirectMessagesConfigurationChanged>>
) = onEventWithCustomChatEventMessage(initialFilter, subcontextUpdatesFilter, markerFactory, additionalSubcontextInitialAction, scenarioReceiver) ) = onEventWithCustomChatEventMessage(initialFilter, subcontextUpdatesFilter, markerFactory, additionalSubcontextInitialAction, scenarioReceiver)

View File

@@ -0,0 +1,7 @@
package dev.inmo.tgbotapi.requests.send.abstracts
import dev.inmo.tgbotapi.types.DirectMessageThreadId
interface OptionallyChannelDirectMessageThreadRequest {
val directMessageThreadId: DirectMessageThreadId?
}

View File

@@ -7,4 +7,5 @@ interface SendMessageRequest<T: Any> : SendChatMessageRequest<T>,
DisableNotification, DisableNotification,
ProtectContent, ProtectContent,
AllowPaidBroadcast, AllowPaidBroadcast,
OptionallyMessageThreadRequest OptionallyMessageThreadRequest,
OptionallyChannelDirectMessageThreadRequest

View File

@@ -63,6 +63,8 @@ data class SendInvoice(
override val priceDependOnShipAddress: Boolean = false, override val priceDependOnShipAddress: Boolean = false,
@SerialName(messageThreadIdField) @SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = chatId.threadId, override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(directMessagesTopicIdField)
override val directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
@SerialName(disableNotificationField) @SerialName(disableNotificationField)
override val disableNotification: Boolean = false, override val disableNotification: Boolean = false,
@SerialName(protectContentField) @SerialName(protectContentField)

View File

@@ -36,6 +36,8 @@ sealed interface IdChatIdentifier : ChatIdentifier {
get() = null get() = null
val businessConnectionId: BusinessConnectionId? val businessConnectionId: BusinessConnectionId?
get() = null get() = null
val directMessageThreadId: DirectMessageThreadId?
get() = null
companion object { companion object {
operator fun invoke(chatId: RawChatId, threadId: MessageThreadId? = null, businessConnectionId: BusinessConnectionId? = null) = threadId ?.let { operator fun invoke(chatId: RawChatId, threadId: MessageThreadId? = null, businessConnectionId: BusinessConnectionId? = null) = threadId ?.let {
@@ -64,6 +66,18 @@ value class ChatIdWithThreadId(val chatIdWithThreadId: Pair<RawChatId, MessageTh
constructor(chatId: RawChatId, threadId: MessageThreadId): this(chatId to threadId) constructor(chatId: RawChatId, threadId: MessageThreadId): this(chatId to threadId)
} }
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatIdentifierSerializer::class)
@JvmInline
value class ChatIdWithChannelDirectMessageThreadId(val chatIdWithThreadId: Pair<RawChatId, DirectMessageThreadId>) : IdChatIdentifier {
override val chatId: RawChatId
get() = chatIdWithThreadId.first
override val directMessageThreadId: DirectMessageThreadId
get() = chatIdWithThreadId.second
constructor(chatId: RawChatId, threadId: DirectMessageThreadId): this(chatId to threadId)
}
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChatIdentifierSerializer::class) @Serializable(ChatIdentifierSerializer::class)
@JvmInline @JvmInline
@@ -85,10 +99,12 @@ val ChatIdentifier.businessConnectionId: BusinessConnectionId?
fun IdChatIdentifier.toChatId() = when (this) { fun IdChatIdentifier.toChatId() = when (this) {
is ChatId -> this is ChatId -> this
is ChatIdWithThreadId -> ChatId(chatId) is ChatIdWithThreadId -> ChatId(chatId)
is ChatIdWithChannelDirectMessageThreadId -> ChatId(chatId)
is BusinessChatId -> ChatId(chatId) is BusinessChatId -> ChatId(chatId)
} }
fun IdChatIdentifier.toChatWithThreadId(threadId: MessageThreadId) = IdChatIdentifier(chatId, threadId) fun IdChatIdentifier.toChatWithThreadId(threadId: MessageThreadId) = IdChatIdentifier(chatId, threadId)
fun IdChatIdentifier.toChatIdWithChannelDirectMessageThreadId(threadId: DirectMessageThreadId) = ChatIdWithChannelDirectMessageThreadId(chatId, threadId)
fun IdChatIdentifier.toBusinessChatId(businessConnectionId: BusinessConnectionId) = IdChatIdentifier(chatId, businessConnectionId) fun IdChatIdentifier.toBusinessChatId(businessConnectionId: BusinessConnectionId) = IdChatIdentifier(chatId, businessConnectionId)
/** /**
@@ -221,11 +237,20 @@ object FullChatIdentifierSerializer : KSerializer<ChatIdentifier> {
) )
} }
3 -> { 3 -> {
val (chatId, _, businessConnectionId) = splitted val (chatId, intermediateDelimiter, additionalId) = splitted
BusinessChatId( val additionalIdAsLong by lazy {
additionalId.toLongOrNull()
}
when {
intermediateDelimiter == "cdm" && additionalIdAsLong != null -> ChatIdWithChannelDirectMessageThreadId(
chatId.toLongOrNull() ?.let(::RawChatId) ?: return@let null, chatId.toLongOrNull() ?.let(::RawChatId) ?: return@let null,
businessConnectionId.let(::BusinessConnectionId) additionalIdAsLong ?.let(::DirectMessageThreadId) ?: return@let null
) )
else -> BusinessChatId(
chatId.toLongOrNull() ?.let(::RawChatId) ?: return@let null,
additionalId.let(::BusinessConnectionId)
)
}
} }
else -> null else -> null
} }
@@ -239,6 +264,7 @@ object FullChatIdentifierSerializer : KSerializer<ChatIdentifier> {
is ChatId -> encoder.encodeLong(value.chatId.long) is ChatId -> encoder.encodeLong(value.chatId.long)
is ChatIdWithThreadId -> encoder.encodeString("${value.chatId}/${value.threadId}") is ChatIdWithThreadId -> encoder.encodeString("${value.chatId}/${value.threadId}")
is BusinessChatId -> encoder.encodeString("${value.chatId}//${value.businessConnectionId}") is BusinessChatId -> encoder.encodeString("${value.chatId}//${value.businessConnectionId}")
is ChatIdWithChannelDirectMessageThreadId -> encoder.encodeString("${value.chatId}/cdm/${value.directMessageThreadId}")
is Username -> encoder.encodeString(value.full) is Username -> encoder.encodeString(value.full)
} }
} }

View File

@@ -141,6 +141,7 @@ const val giveawayMessageIdField = "giveaway_message_id"
const val messageIdsField = "message_ids" const val messageIdsField = "message_ids"
const val actorChatField = "actor_chat" const val actorChatField = "actor_chat"
const val messageThreadIdField = "message_thread_id" const val messageThreadIdField = "message_thread_id"
const val directMessagesTopicIdField = "direct_messages_topic_id"
const val mediaGroupIdField = "media_group_id" const val mediaGroupIdField = "media_group_id"
const val updateIdField = "update_id" const val updateIdField = "update_id"
const val fromChatIdField = "from_chat_id" const val fromChatIdField = "from_chat_id"

View File

@@ -8,33 +8,33 @@ import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class) @Serializable(DirectMessagesConfigurationChanged.Companion::class)
sealed interface ChannelDirectMessagesConfigurationChanged : ChannelEvent { sealed interface DirectMessagesConfigurationChanged : ChannelEvent {
val enabled: Boolean val enabled: Boolean
val cost: Int? val cost: Int?
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class) @Serializable(DirectMessagesConfigurationChanged.Companion::class)
data object Disabled : ChannelDirectMessagesConfigurationChanged { data object Disabled : DirectMessagesConfigurationChanged {
override val enabled: Boolean override val enabled: Boolean
get() = false get() = false
override val cost: Int? override val cost: Int?
get() = null get() = null
} }
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class) @Serializable(DirectMessagesConfigurationChanged.Companion::class)
data object Free : ChannelDirectMessagesConfigurationChanged { data object Free : DirectMessagesConfigurationChanged {
override val enabled: Boolean override val enabled: Boolean
get() = true get() = true
override val cost: Int override val cost: Int
get() = 0 get() = 0
} }
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class) @Serializable(DirectMessagesConfigurationChanged.Companion::class)
data class Paid( data class Paid(
override val cost: Int override val cost: Int
) : ChannelDirectMessagesConfigurationChanged { ) : DirectMessagesConfigurationChanged {
override val enabled: Boolean override val enabled: Boolean
get() = true get() = true
} }
companion object : KSerializer<ChannelDirectMessagesConfigurationChanged> { companion object : KSerializer<DirectMessagesConfigurationChanged> {
@Serializable @Serializable
private data class RawDirectMessagePriceChanged( private data class RawDirectMessagePriceChanged(
val are_direct_messages_enabled: Boolean = false, val are_direct_messages_enabled: Boolean = false,
@@ -45,7 +45,7 @@ sealed interface ChannelDirectMessagesConfigurationChanged : ChannelEvent {
override fun serialize( override fun serialize(
encoder: Encoder, encoder: Encoder,
value: ChannelDirectMessagesConfigurationChanged value: DirectMessagesConfigurationChanged
) { ) {
RawDirectMessagePriceChanged.serializer().serialize( RawDirectMessagePriceChanged.serializer().serialize(
encoder, encoder,
@@ -56,7 +56,7 @@ sealed interface ChannelDirectMessagesConfigurationChanged : ChannelEvent {
) )
} }
override fun deserialize(decoder: Decoder): ChannelDirectMessagesConfigurationChanged { override fun deserialize(decoder: Decoder): DirectMessagesConfigurationChanged {
val raw = RawDirectMessagePriceChanged.serializer().deserialize(decoder) val raw = RawDirectMessagePriceChanged.serializer().deserialize(decoder)
return when { return when {

View File

@@ -0,0 +1,14 @@
package dev.inmo.tgbotapi.types
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline
@Serializable
@JvmInline
value class DirectMessageThreadId(
val long: Long
) {
override fun toString(): String {
return long.toString()
}
}

View File

@@ -1,7 +1,7 @@
package dev.inmo.tgbotapi.types.chat package dev.inmo.tgbotapi.types.chat
import dev.inmo.tgbotapi.abstracts.OptionallyWithUser import dev.inmo.tgbotapi.abstracts.OptionallyWithUser
import dev.inmo.tgbotapi.types.MessageThreadId import dev.inmo.tgbotapi.types.DirectMessageThreadId
import dev.inmo.tgbotapi.types.topicIdField import dev.inmo.tgbotapi.types.topicIdField
import dev.inmo.tgbotapi.types.userField import dev.inmo.tgbotapi.types.userField
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
@@ -10,7 +10,7 @@ import kotlinx.serialization.Serializable
@Serializable @Serializable
data class DirectMessagesTopic( data class DirectMessagesTopic(
@SerialName(topicIdField) @SerialName(topicIdField)
val threadId: MessageThreadId, val threadId: DirectMessageThreadId,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(userField) @SerialName(userField)
override val user: PreviewUser? = null, override val user: PreviewUser? = null,

View File

@@ -188,7 +188,7 @@ internal data class RawMessage(
private val checklist_tasks_added: ChecklistTasksAdded? = null, private val checklist_tasks_added: ChecklistTasksAdded? = null,
// Channel direct messages // Channel direct messages
private val direct_message_price_changed: ChannelDirectMessagesConfigurationChanged? = null, private val direct_message_price_changed: DirectMessagesConfigurationChanged? = null,
// //
private val suggested_post_approved: SuggestedPostApproved? = null, private val suggested_post_approved: SuggestedPostApproved? = null,

View File

@@ -21,7 +21,7 @@ import dev.inmo.tgbotapi.requests.stickers.InputSticker
import dev.inmo.tgbotapi.types.BackgroundFill import dev.inmo.tgbotapi.types.BackgroundFill
import dev.inmo.tgbotapi.types.BackgroundType import dev.inmo.tgbotapi.types.BackgroundType
import dev.inmo.tgbotapi.types.BusinessChatId import dev.inmo.tgbotapi.types.BusinessChatId
import dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged import dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged
import dev.inmo.tgbotapi.types.ChatId import dev.inmo.tgbotapi.types.ChatId
import dev.inmo.tgbotapi.types.ChatIdWithThreadId import dev.inmo.tgbotapi.types.ChatIdWithThreadId
import dev.inmo.tgbotapi.types.ChatIdentifier import dev.inmo.tgbotapi.types.ChatIdentifier
@@ -2292,29 +2292,29 @@ public inline fun TelegramMedia.withCustomizableCaptionTelegramMediaOrThrow(): W
public inline fun <T> TelegramMedia.ifWithCustomizableCaptionTelegramMedia(block: (WithCustomizableCaptionTelegramMedia) -> T): T? = withCustomizableCaptionTelegramMediaOrNull() ?.let(block) public inline fun <T> TelegramMedia.ifWithCustomizableCaptionTelegramMedia(block: (WithCustomizableCaptionTelegramMedia) -> T): T? = withCustomizableCaptionTelegramMediaOrNull() ?.let(block)
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedOrNull(): ChannelDirectMessagesConfigurationChanged? = this as? dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged public inline fun ChatEvent.channelDirectMessagesConfigurationChangedOrNull(): DirectMessagesConfigurationChanged? = this as? dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedOrThrow(): ChannelDirectMessagesConfigurationChanged = this as dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged public inline fun ChatEvent.channelDirectMessagesConfigurationChangedOrThrow(): DirectMessagesConfigurationChanged = this as dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged
public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChanged(block: (ChannelDirectMessagesConfigurationChanged) -> T): T? = channelDirectMessagesConfigurationChangedOrNull() ?.let(block) public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChanged(block: (DirectMessagesConfigurationChanged) -> T): T? = channelDirectMessagesConfigurationChangedOrNull() ?.let(block)
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedDisabledOrNull(): ChannelDirectMessagesConfigurationChanged.Disabled? = this as? dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged.Disabled public inline fun ChatEvent.channelDirectMessagesConfigurationChangedDisabledOrNull(): DirectMessagesConfigurationChanged.Disabled? = this as? dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged.Disabled
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedDisabledOrThrow(): ChannelDirectMessagesConfigurationChanged.Disabled = this as dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged.Disabled public inline fun ChatEvent.channelDirectMessagesConfigurationChangedDisabledOrThrow(): DirectMessagesConfigurationChanged.Disabled = this as dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged.Disabled
public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChangedDisabled(block: (ChannelDirectMessagesConfigurationChanged.Disabled) -> T): T? = channelDirectMessagesConfigurationChangedDisabledOrNull() ?.let(block) public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChangedDisabled(block: (DirectMessagesConfigurationChanged.Disabled) -> T): T? = channelDirectMessagesConfigurationChangedDisabledOrNull() ?.let(block)
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedFreeOrNull(): ChannelDirectMessagesConfigurationChanged.Free? = this as? dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged.Free public inline fun ChatEvent.channelDirectMessagesConfigurationChangedFreeOrNull(): DirectMessagesConfigurationChanged.Free? = this as? dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged.Free
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedFreeOrThrow(): ChannelDirectMessagesConfigurationChanged.Free = this as dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged.Free public inline fun ChatEvent.channelDirectMessagesConfigurationChangedFreeOrThrow(): DirectMessagesConfigurationChanged.Free = this as dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged.Free
public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChangedFree(block: (ChannelDirectMessagesConfigurationChanged.Free) -> T): T? = channelDirectMessagesConfigurationChangedFreeOrNull() ?.let(block) public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChangedFree(block: (DirectMessagesConfigurationChanged.Free) -> T): T? = channelDirectMessagesConfigurationChangedFreeOrNull() ?.let(block)
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedPaidOrNull(): ChannelDirectMessagesConfigurationChanged.Paid? = this as? dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged.Paid public inline fun ChatEvent.channelDirectMessagesConfigurationChangedPaidOrNull(): DirectMessagesConfigurationChanged.Paid? = this as? dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged.Paid
public inline fun ChatEvent.channelDirectMessagesConfigurationChangedPaidOrThrow(): ChannelDirectMessagesConfigurationChanged.Paid = this as dev.inmo.tgbotapi.types.ChannelDirectMessagesConfigurationChanged.Paid public inline fun ChatEvent.channelDirectMessagesConfigurationChangedPaidOrThrow(): DirectMessagesConfigurationChanged.Paid = this as dev.inmo.tgbotapi.types.DirectMessagesConfigurationChanged.Paid
public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChangedPaid(block: (ChannelDirectMessagesConfigurationChanged.Paid) -> T): T? = channelDirectMessagesConfigurationChangedPaidOrNull() ?.let(block) public inline fun <T> ChatEvent.ifChannelDirectMessagesConfigurationChangedPaid(block: (DirectMessagesConfigurationChanged.Paid) -> T): T? = channelDirectMessagesConfigurationChangedPaidOrNull() ?.let(block)
public inline fun ChatEvent.paidMessagePriceChangedOrNull(): PaidMessagePriceChanged? = this as? dev.inmo.tgbotapi.types.PaidMessagePriceChanged public inline fun ChatEvent.paidMessagePriceChangedOrNull(): PaidMessagePriceChanged? = this as? dev.inmo.tgbotapi.types.PaidMessagePriceChanged