mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-16 13:49:26 +00:00
start separate channel direct messages thread id insttead of one merged message thread id
This commit is contained in:
@@ -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.utils.*
|
||||
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.chat.ChatBackground
|
||||
import dev.inmo.tgbotapi.types.checklists.ChecklistTasksAdded
|
||||
@@ -287,7 +287,7 @@ fun BehaviourContext.waitChecklistTasksAdded(
|
||||
fun BehaviourContext.waitChannelDirectMessagesConfigurationChanged(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEvents<ChannelDirectMessagesConfigurationChanged>(initRequest, errorFactory)
|
||||
) = waitEvents<DirectMessagesConfigurationChanged>(initRequest, errorFactory)
|
||||
|
||||
fun BehaviourContext.waitSuggestedPostApprovalFailed(
|
||||
initRequest: Request<*>? = null,
|
||||
|
@@ -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.utils.baseSentMessageUpdateOrNull
|
||||
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.chat.ChatBackground
|
||||
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.payments.RefundedPaymentEvent
|
||||
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.ChatSharedRequest
|
||||
import dev.inmo.tgbotapi.types.request.UsersShared
|
||||
@@ -1184,11 +1183,11 @@ fun <BC : BehaviourContext> BC.onChecklistTasksAdded(
|
||||
* data
|
||||
*/
|
||||
fun <BC : BehaviourContext> BC.onChannelDirectMessagesConfigurationChanged(
|
||||
initialFilter: SimpleFilter<ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>>? = null,
|
||||
subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver<BC, Boolean, ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>, Update>? = MessageFilterByChat,
|
||||
markerFactory: MarkerFactory<in ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>, Any>? = ByChatMessageMarkerFactory,
|
||||
additionalSubcontextInitialAction: CustomBehaviourContextAndTwoTypesReceiver<BC, Unit, Update, ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>>? = null,
|
||||
scenarioReceiver: CustomBehaviourContextAndTypeReceiver<BC, Unit, ChannelEventMessage<ChannelDirectMessagesConfigurationChanged>>
|
||||
initialFilter: SimpleFilter<ChannelEventMessage<DirectMessagesConfigurationChanged>>? = null,
|
||||
subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver<BC, Boolean, ChannelEventMessage<DirectMessagesConfigurationChanged>, Update>? = MessageFilterByChat,
|
||||
markerFactory: MarkerFactory<in ChannelEventMessage<DirectMessagesConfigurationChanged>, Any>? = ByChatMessageMarkerFactory,
|
||||
additionalSubcontextInitialAction: CustomBehaviourContextAndTwoTypesReceiver<BC, Unit, Update, ChannelEventMessage<DirectMessagesConfigurationChanged>>? = null,
|
||||
scenarioReceiver: CustomBehaviourContextAndTypeReceiver<BC, Unit, ChannelEventMessage<DirectMessagesConfigurationChanged>>
|
||||
) = onEventWithCustomChatEventMessage(initialFilter, subcontextUpdatesFilter, markerFactory, additionalSubcontextInitialAction, scenarioReceiver)
|
||||
|
||||
|
||||
|
@@ -0,0 +1,7 @@
|
||||
package dev.inmo.tgbotapi.requests.send.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
||||
|
||||
interface OptionallyChannelDirectMessageThreadRequest {
|
||||
val directMessageThreadId: DirectMessageThreadId?
|
||||
}
|
@@ -7,4 +7,5 @@ interface SendMessageRequest<T: Any> : SendChatMessageRequest<T>,
|
||||
DisableNotification,
|
||||
ProtectContent,
|
||||
AllowPaidBroadcast,
|
||||
OptionallyMessageThreadRequest
|
||||
OptionallyMessageThreadRequest,
|
||||
OptionallyChannelDirectMessageThreadRequest
|
||||
|
@@ -63,6 +63,8 @@ data class SendInvoice(
|
||||
override val priceDependOnShipAddress: Boolean = false,
|
||||
@SerialName(messageThreadIdField)
|
||||
override val threadId: MessageThreadId? = chatId.threadId,
|
||||
@SerialName(directMessagesTopicIdField)
|
||||
override val directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
@SerialName(disableNotificationField)
|
||||
override val disableNotification: Boolean = false,
|
||||
@SerialName(protectContentField)
|
||||
|
@@ -36,6 +36,8 @@ sealed interface IdChatIdentifier : ChatIdentifier {
|
||||
get() = null
|
||||
val businessConnectionId: BusinessConnectionId?
|
||||
get() = null
|
||||
val directMessageThreadId: DirectMessageThreadId?
|
||||
get() = null
|
||||
|
||||
companion object {
|
||||
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)
|
||||
}
|
||||
|
||||
@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")
|
||||
@Serializable(ChatIdentifierSerializer::class)
|
||||
@JvmInline
|
||||
@@ -85,10 +99,12 @@ val ChatIdentifier.businessConnectionId: BusinessConnectionId?
|
||||
fun IdChatIdentifier.toChatId() = when (this) {
|
||||
is ChatId -> this
|
||||
is ChatIdWithThreadId -> ChatId(chatId)
|
||||
is ChatIdWithChannelDirectMessageThreadId -> ChatId(chatId)
|
||||
is BusinessChatId -> ChatId(chatId)
|
||||
}
|
||||
|
||||
fun IdChatIdentifier.toChatWithThreadId(threadId: MessageThreadId) = IdChatIdentifier(chatId, threadId)
|
||||
fun IdChatIdentifier.toChatIdWithChannelDirectMessageThreadId(threadId: DirectMessageThreadId) = ChatIdWithChannelDirectMessageThreadId(chatId, threadId)
|
||||
fun IdChatIdentifier.toBusinessChatId(businessConnectionId: BusinessConnectionId) = IdChatIdentifier(chatId, businessConnectionId)
|
||||
|
||||
/**
|
||||
@@ -221,11 +237,20 @@ object FullChatIdentifierSerializer : KSerializer<ChatIdentifier> {
|
||||
)
|
||||
}
|
||||
3 -> {
|
||||
val (chatId, _, businessConnectionId) = splitted
|
||||
BusinessChatId(
|
||||
chatId.toLongOrNull() ?.let(::RawChatId) ?: return@let null,
|
||||
businessConnectionId.let(::BusinessConnectionId)
|
||||
)
|
||||
val (chatId, intermediateDelimiter, additionalId) = splitted
|
||||
val additionalIdAsLong by lazy {
|
||||
additionalId.toLongOrNull()
|
||||
}
|
||||
when {
|
||||
intermediateDelimiter == "cdm" && additionalIdAsLong != null -> ChatIdWithChannelDirectMessageThreadId(
|
||||
chatId.toLongOrNull() ?.let(::RawChatId) ?: return@let null,
|
||||
additionalIdAsLong ?.let(::DirectMessageThreadId) ?: return@let null
|
||||
)
|
||||
else -> BusinessChatId(
|
||||
chatId.toLongOrNull() ?.let(::RawChatId) ?: return@let null,
|
||||
additionalId.let(::BusinessConnectionId)
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
@@ -239,6 +264,7 @@ object FullChatIdentifierSerializer : KSerializer<ChatIdentifier> {
|
||||
is ChatId -> encoder.encodeLong(value.chatId.long)
|
||||
is ChatIdWithThreadId -> encoder.encodeString("${value.chatId}/${value.threadId}")
|
||||
is BusinessChatId -> encoder.encodeString("${value.chatId}//${value.businessConnectionId}")
|
||||
is ChatIdWithChannelDirectMessageThreadId -> encoder.encodeString("${value.chatId}/cdm/${value.directMessageThreadId}")
|
||||
is Username -> encoder.encodeString(value.full)
|
||||
}
|
||||
}
|
||||
|
@@ -141,6 +141,7 @@ const val giveawayMessageIdField = "giveaway_message_id"
|
||||
const val messageIdsField = "message_ids"
|
||||
const val actorChatField = "actor_chat"
|
||||
const val messageThreadIdField = "message_thread_id"
|
||||
const val directMessagesTopicIdField = "direct_messages_topic_id"
|
||||
const val mediaGroupIdField = "media_group_id"
|
||||
const val updateIdField = "update_id"
|
||||
const val fromChatIdField = "from_chat_id"
|
||||
|
@@ -8,33 +8,33 @@ import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class)
|
||||
sealed interface ChannelDirectMessagesConfigurationChanged : ChannelEvent {
|
||||
@Serializable(DirectMessagesConfigurationChanged.Companion::class)
|
||||
sealed interface DirectMessagesConfigurationChanged : ChannelEvent {
|
||||
val enabled: Boolean
|
||||
val cost: Int?
|
||||
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class)
|
||||
data object Disabled : ChannelDirectMessagesConfigurationChanged {
|
||||
@Serializable(DirectMessagesConfigurationChanged.Companion::class)
|
||||
data object Disabled : DirectMessagesConfigurationChanged {
|
||||
override val enabled: Boolean
|
||||
get() = false
|
||||
override val cost: Int?
|
||||
get() = null
|
||||
}
|
||||
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class)
|
||||
data object Free : ChannelDirectMessagesConfigurationChanged {
|
||||
@Serializable(DirectMessagesConfigurationChanged.Companion::class)
|
||||
data object Free : DirectMessagesConfigurationChanged {
|
||||
override val enabled: Boolean
|
||||
get() = true
|
||||
override val cost: Int
|
||||
get() = 0
|
||||
}
|
||||
@Serializable(ChannelDirectMessagesConfigurationChanged.Companion::class)
|
||||
@Serializable(DirectMessagesConfigurationChanged.Companion::class)
|
||||
data class Paid(
|
||||
override val cost: Int
|
||||
) : ChannelDirectMessagesConfigurationChanged {
|
||||
) : DirectMessagesConfigurationChanged {
|
||||
override val enabled: Boolean
|
||||
get() = true
|
||||
}
|
||||
|
||||
companion object : KSerializer<ChannelDirectMessagesConfigurationChanged> {
|
||||
companion object : KSerializer<DirectMessagesConfigurationChanged> {
|
||||
@Serializable
|
||||
private data class RawDirectMessagePriceChanged(
|
||||
val are_direct_messages_enabled: Boolean = false,
|
||||
@@ -45,7 +45,7 @@ sealed interface ChannelDirectMessagesConfigurationChanged : ChannelEvent {
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
value: ChannelDirectMessagesConfigurationChanged
|
||||
value: DirectMessagesConfigurationChanged
|
||||
) {
|
||||
RawDirectMessagePriceChanged.serializer().serialize(
|
||||
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)
|
||||
|
||||
return when {
|
||||
|
@@ -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()
|
||||
}
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.chat
|
||||
|
||||
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.userField
|
||||
import kotlinx.serialization.SerialName
|
||||
@@ -10,7 +10,7 @@ import kotlinx.serialization.Serializable
|
||||
@Serializable
|
||||
data class DirectMessagesTopic(
|
||||
@SerialName(topicIdField)
|
||||
val threadId: MessageThreadId,
|
||||
val threadId: DirectMessageThreadId,
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@SerialName(userField)
|
||||
override val user: PreviewUser? = null,
|
||||
|
@@ -188,7 +188,7 @@ internal data class RawMessage(
|
||||
private val checklist_tasks_added: ChecklistTasksAdded? = null,
|
||||
|
||||
// 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,
|
||||
|
@@ -21,7 +21,7 @@ import dev.inmo.tgbotapi.requests.stickers.InputSticker
|
||||
import dev.inmo.tgbotapi.types.BackgroundFill
|
||||
import dev.inmo.tgbotapi.types.BackgroundType
|
||||
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.ChatIdWithThreadId
|
||||
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 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
|
||||
|
||||
|
Reference in New Issue
Block a user