mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 16:23:48 +00:00
update ChatIdentifierWithThreadId and kdocs
This commit is contained in:
parent
f2f15d7173
commit
236e47478f
@ -2,15 +2,24 @@ package dev.inmo.tgbotapi.utils.extensions
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.types.ChatId
|
import dev.inmo.tgbotapi.types.ChatId
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||||
|
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||||
|
import dev.inmo.tgbotapi.utils.extensions.ChatIdWithThreadId.ByPair
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlin.Pair
|
import kotlin.Pair
|
||||||
import dev.inmo.tgbotapi.types.message.abstract.Message
|
import kotlin.jvm.JvmInline
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Union to keep both [ChatId] and optionally [MessageThreadId] as an identifier of target for messages sending and
|
||||||
|
* other information
|
||||||
|
*/
|
||||||
sealed interface ChatIdWithThreadId {
|
sealed interface ChatIdWithThreadId {
|
||||||
val chatId: ChatId
|
val chatId: ChatId
|
||||||
val threadId: MessageThreadId?
|
val threadId: MessageThreadId?
|
||||||
|
|
||||||
// Light weight due to absence of any conversations
|
/**
|
||||||
|
* Lightweight variant of [ChatIdWithThreadId] due to absence of any conversations
|
||||||
|
*/
|
||||||
|
@JvmInline
|
||||||
value class ByMessage(
|
value class ByMessage(
|
||||||
val sourceMessage: Message
|
val sourceMessage: Message
|
||||||
) : ChatIdWithThreadId {
|
) : ChatIdWithThreadId {
|
||||||
@ -19,7 +28,15 @@ sealed interface ChatIdWithThreadId {
|
|||||||
override val threadId: MessageThreadId?
|
override val threadId: MessageThreadId?
|
||||||
get() = sourceMessage.threadIdOrNull
|
get() = sourceMessage.threadIdOrNull
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [Serializable] variant of [ChatIdWithThreadId] based on [Pair] of target [ChatId] and [MessageThreadId]
|
||||||
|
*
|
||||||
|
* @see invoke
|
||||||
|
* @see serializable
|
||||||
|
*/
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@JvmInline
|
||||||
value class ByPair(
|
value class ByPair(
|
||||||
val pair: Pair<ChatId, MessageThreadId?>
|
val pair: Pair<ChatId, MessageThreadId?>
|
||||||
) : ChatIdWithThreadId {
|
) : ChatIdWithThreadId {
|
||||||
@ -29,14 +46,32 @@ sealed interface ChatIdWithThreadId {
|
|||||||
get() = pair.second
|
get() = pair.second
|
||||||
}
|
}
|
||||||
|
|
||||||
companion {
|
companion object {
|
||||||
|
/**
|
||||||
|
* Creates lightweight [ByMessage] variant of [ChatIdWithThreadId]
|
||||||
|
*/
|
||||||
inline operator fun invoke(message: Message) = ByMessage(message)
|
inline operator fun invoke(message: Message) = ByMessage(message)
|
||||||
inline fun serializable(message: Message) = ByPair(message.chatId.id to message.threadIdOrNull)
|
|
||||||
|
/**
|
||||||
|
* Creates [ByPair] variant of [ChatIdWithThreadId] using incoming [message] [Message.chat] and extension
|
||||||
|
* [Message.threadIdOrNull]
|
||||||
|
*/
|
||||||
|
inline fun serializable(message: Message) = ByPair(message.chat.id to message.threadIdOrNull)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates [ByPair] variant of [ChatIdWithThreadId] using incoming [pair]
|
||||||
|
*/
|
||||||
inline fun serializable(pair: Pair<ChatId, MessageThreadId?>) = ByPair(pair)
|
inline fun serializable(pair: Pair<ChatId, MessageThreadId?>) = ByPair(pair)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Creates [ChatIdWithThreadId.ByMessage] variant of [ChatIdWithThreadId] using [ChatIdWithThreadId.serializable]
|
||||||
|
*/
|
||||||
val Message.chatIdWithThreadId
|
val Message.chatIdWithThreadId
|
||||||
get() = ChatIdWithThreadId(this)
|
get() = ChatIdWithThreadId(this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates [ChatIdWithThreadId.ByPair] variant of [ChatIdWithThreadId] using [ChatIdWithThreadId.serializable]
|
||||||
|
*/
|
||||||
val Message.serializableChatIdWithThreadId
|
val Message.serializableChatIdWithThreadId
|
||||||
get() = ChatIdWithThreadId.serializable(this)
|
get() = ChatIdWithThreadId.serializable(this)
|
||||||
|
Loading…
Reference in New Issue
Block a user