1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-16 13:49:26 +00:00

ChatIdWithThreadId, all chats ids now value classes, update chats ids hierarchy

This commit is contained in:
2022-11-10 16:24:20 +06:00
parent 1ec4507891
commit 925c4dae6c
48 changed files with 445 additions and 457 deletions

View File

@@ -20,7 +20,7 @@ data class ForwardMessage(
@SerialName(messageIdField)
override val messageId: MessageId,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = toChatId.threadId,
@SerialName(disableNotificationField)
val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -27,7 +27,7 @@ fun CopyMessage(
messageId: MessageId,
text: String? = null,
parseMode: ParseMode? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = toChatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -53,7 +53,7 @@ fun CopyMessage(
fromChatId: ChatIdentifier,
messageId: MessageId,
entities: List<TextSource>,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = toChatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -80,7 +80,7 @@ fun CopyMessage(
toChatId: ChatIdentifier,
text: String? = null,
parseMode: ParseMode? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = toChatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -106,7 +106,7 @@ fun CopyMessage(
messageId: MessageId,
toChatId: ChatIdentifier,
entities: List<TextSource>,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = toChatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -142,7 +142,7 @@ data class CopyMessage internal constructor(
@SerialName(captionEntitiesField)
private val rawEntities: List<RawMessageEntity>? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = toChatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -23,7 +23,7 @@ data class SendContact(
@SerialName(lastNameField)
val lastName: String? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)
@@ -40,7 +40,7 @@ data class SendContact(
constructor(
chatId: ChatIdentifier,
contact: Contact,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -68,7 +68,7 @@ data class SendContact(
fun Contact.toRequest(
chatId: ChatIdentifier,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,

View File

@@ -18,7 +18,7 @@ fun SendLocation(
chatId: ChatIdentifier,
latitude: Double,
longitude: Double,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -44,7 +44,7 @@ fun SendStaticLocation(
chatId: ChatIdentifier,
latitude: Double,
longitude: Double,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -60,7 +60,7 @@ fun SendLiveLocation(
horizontalAccuracy: Meters? = null,
heading: Degrees? = null,
proximityAlertRadius: Meters? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -99,7 +99,7 @@ data class SendLocation internal constructor(
@SerialName(proximityAlertRadiusField)
override val proximityAlertRadius: Meters? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -25,7 +25,7 @@ fun SendTextMessage(
text: String,
parseMode: ParseMode? = null,
disableWebPagePreview: Boolean? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -49,7 +49,7 @@ fun SendTextMessage(
chatId: ChatIdentifier,
entities: TextSourcesList,
disableWebPagePreview: Boolean? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -80,7 +80,7 @@ data class SendTextMessage internal constructor(
@SerialName(entitiesField)
private val rawEntities: List<RawMessageEntity>? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableWebPagePreviewField)
override val disableWebPagePreview: Boolean? = null,
@SerialName(disableNotificationField)

View File

@@ -33,7 +33,7 @@ data class SendVenue(
@SerialName(googlePlaceTypeField)
val googlePlaceType: GooglePlaceType? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)
@@ -52,7 +52,7 @@ data class SendVenue(
constructor(
chatId: ChatIdentifier,
venue: Venue,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -85,7 +85,7 @@ data class SendVenue(
fun Venue.toRequest(
chatId: ChatIdentifier,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,

View File

@@ -19,7 +19,7 @@ data class SendGame (
@SerialName(gameShortNameField)
val gameShortName: String,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -28,7 +28,7 @@ fun SendAnimation(
duration: Long? = null,
width: Int? = null,
height: Int? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -76,7 +76,7 @@ fun SendAnimation(
duration: Long? = null,
width: Int? = null,
height: Int? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -140,7 +140,7 @@ data class SendAnimationData internal constructor(
@SerialName(heightField)
override val height: Int? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -29,7 +29,7 @@ fun SendAudio(
duration: Long? = null,
performer: String? = null,
title: String? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -77,7 +77,7 @@ fun SendAudio(
duration: Long? = null,
performer: String? = null,
title: String? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -141,7 +141,7 @@ data class SendAudioData internal constructor(
@SerialName(titleField)
override val title: String? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -34,7 +34,7 @@ fun SendDocument(
thumb: InputFile? = null,
text: String? = null,
parseMode: ParseMode? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -87,7 +87,7 @@ fun SendDocument(
document: InputFile,
thumb: InputFile? = null,
entities: TextSourcesList,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -153,7 +153,7 @@ data class SendDocumentData internal constructor(
@SerialName(captionEntitiesField)
private val rawEntities: List<RawMessageEntity>? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -32,7 +32,7 @@ const val rawSendingMediaGroupsWarning = "Media groups contains restrictions rel
fun <T : MediaGroupPartContent> SendMediaGroup(
chatId: ChatIdentifier,
media: List<MediaGroupMemberTelegramMedia>,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -82,7 +82,7 @@ fun <T : MediaGroupPartContent> SendMediaGroup(
inline fun SendPlaylist(
chatId: ChatIdentifier,
media: List<AudioMediaGroupMemberTelegramMedia>,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -98,7 +98,7 @@ inline fun SendPlaylist(
inline fun SendDocumentsGroup(
chatId: ChatIdentifier,
media: List<DocumentMediaGroupMemberTelegramMedia>,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -115,7 +115,7 @@ inline fun SendDocumentsGroup(
inline fun SendVisualMediaGroup(
chatId: ChatIdentifier,
media: List<VisualMediaGroupMemberTelegramMedia>,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -143,7 +143,7 @@ data class SendMediaGroupData internal constructor(
override val chatId: ChatIdentifier,
val media: List<MediaGroupMemberTelegramMedia> = emptyList(),
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -23,7 +23,7 @@ fun SendPhoto(
photo: InputFile,
text: String? = null,
parseMode: ParseMode? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -55,7 +55,7 @@ fun SendPhoto(
chatId: ChatIdentifier,
photo: InputFile,
entities: TextSourcesList,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -99,7 +99,7 @@ data class SendPhotoData internal constructor(
@SerialName(captionEntitiesField)
private val rawEntities: List<RawMessageEntity>? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -15,7 +15,7 @@ import kotlinx.serialization.json.JsonObject
fun SendSticker(
chatId: ChatIdentifier,
sticker: InputFile,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -47,7 +47,7 @@ data class SendStickerByFileId internal constructor(
@SerialName(stickerField)
val sticker: FileId? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -29,7 +29,7 @@ fun SendVideo(
width: Int? = null,
height: Int? = null,
supportStreaming: Boolean? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -79,7 +79,7 @@ fun SendVideo(
width: Int? = null,
height: Int? = null,
supportStreaming: Boolean? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -146,7 +146,7 @@ data class SendVideoData internal constructor(
@SerialName(supportStreamingField)
val supportStreaming: Boolean? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -17,7 +17,7 @@ fun SendVideoNote(
thumb: InputFile? = null,
duration: Long? = null,
size: Int? = null, // in documentation - length (size of video side)
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -69,7 +69,7 @@ data class SendVideoNoteData internal constructor(
@SerialName(lengthField)
override val width: Int? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -25,7 +25,7 @@ fun SendVoice(
text: String? = null,
parseMode: ParseMode? = null,
duration: Long? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -64,7 +64,7 @@ fun SendVoice(
chatId: ChatIdentifier,
voice: InputFile,
entities: TextSourcesList,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
duration: Long? = null,
disableNotification: Boolean = false,
protectContent: Boolean = false,
@@ -118,7 +118,7 @@ data class SendVoiceData internal constructor(
@SerialName(durationField)
override val duration: Long? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -48,7 +48,7 @@ fun SendPoll(
options: List<String>,
isAnonymous: Boolean = true,
isClosed: Boolean = false,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -74,7 +74,7 @@ fun SendPoll(
*/
fun Poll.createRequest(
chatId: ChatIdentifier,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -202,7 +202,7 @@ data class SendRegularPoll(
@SerialName(closeDateField)
override val closeDate: LongSeconds?,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)
@@ -232,7 +232,7 @@ fun SendRegularPoll(
isClosed: Boolean = false,
allowMultipleAnswers: Boolean = false,
closeInfo: ScheduledCloseInfo? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -265,7 +265,7 @@ fun SendQuizPoll(
explanation: String? = null,
parseMode: ParseMode? = null,
closeInfo: ScheduledCloseInfo? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -299,7 +299,7 @@ fun SendQuizPoll(
isClosed: Boolean = false,
entities: List<TextSource>,
closeInfo: ScheduledCloseInfo? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -335,7 +335,7 @@ internal fun SendQuizPoll(
parseMode: ParseMode? = null,
rawEntities: List<RawMessageEntity>? = null,
closeInfo: ScheduledCloseInfo? = null,
threadId: MessageThreadId? = null,
threadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,
@@ -386,7 +386,7 @@ data class SendQuizPoll internal constructor(
@SerialName(closeDateField)
override val closeDate: LongSeconds? = null,
@SerialName(messageThreadIdField)
override val threadId: MessageThreadId? = null,
override val threadId: MessageThreadId? = chatId.threadId,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(protectContentField)

View File

@@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.types
import dev.inmo.micro_utils.common.Warning
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.utils.RiskFeature
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
@@ -15,6 +16,7 @@ import kotlin.jvm.JvmInline
const val internalLinkBeginning = "https://t.me"
@Serializable(ChatIdentifierSerializer::class)
@ClassCastsIncluded
sealed interface ChatIdentifier
/**

View File

@@ -25,7 +25,9 @@ sealed interface PublicChat : Chat {
sealed interface SuperPublicChat : PublicChat, UsernameChat
@Serializable(PreviewChatSerializer::class)
sealed interface ChannelChat : SuperPublicChat
sealed interface ChannelChat : SuperPublicChat {
override val id: ChatId
}
@Serializable(PreviewChatSerializer::class)
sealed interface GroupChat : PublicChat

View File

@@ -10,7 +10,7 @@ import kotlinx.serialization.json.JsonObject
@Serializable
data class ExtendedChannelChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)
@@ -33,7 +33,7 @@ data class ExtendedChannelChatImpl(
@Serializable
data class ExtendedGroupChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(photoField)
@@ -78,7 +78,7 @@ typealias ExtendedUser = ExtendedPrivateChatImpl
@Serializable
data class ExtendedSupergroupChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)

View File

@@ -10,7 +10,7 @@ import kotlinx.serialization.Serializable
@Serializable
data class GroupChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
override val id: ChatId,
@SerialName(titleField)
override val title: String
) : GroupChat
@@ -30,7 +30,7 @@ data class PrivateChatImpl(
@Serializable
data class SupergroupChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)
@@ -50,7 +50,7 @@ data class ForumChatImpl(
@Serializable
data class ChannelChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)

View File

@@ -9,6 +9,7 @@ import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
import dev.inmo.tgbotapi.types.files.TelegramMediaFile
import dev.inmo.tgbotapi.types.media.TelegramMedia
import dev.inmo.tgbotapi.types.message.abstracts.*
import dev.inmo.tgbotapi.types.threadId
import dev.inmo.tgbotapi.utils.RiskFeature
import kotlinx.serialization.modules.*
@@ -114,7 +115,7 @@ sealed interface MediaContent: MessageContent {
sealed interface ResendableContent {
fun createResend(
chatId: ChatIdentifier,
messageThreadId: MessageThreadId? = null,
messageThreadId: MessageThreadId? = chatId.threadId,
disableNotification: Boolean = false,
protectContent: Boolean = false,
replyToMessageId: MessageId? = null,

View File

@@ -1,76 +0,0 @@
package dev.inmo.tgbotapi.utils.extensions
import dev.inmo.tgbotapi.types.IdChatIdentifier
import dev.inmo.tgbotapi.types.MessageThreadId
import dev.inmo.tgbotapi.types.message.abstracts.Message
import kotlinx.serialization.Serializable
import kotlin.Pair
import kotlin.jvm.JvmInline
/**
* Union to keep both [IdChatIdentifier] and optionally [MessageThreadId] as an identifier of target for messages sending and
* other information
*/
sealed interface ChatIdWithThreadId {
val chatId: IdChatIdentifier
val threadId: MessageThreadId?
/**
* Lightweight variant of [ChatIdWithThreadId] due to absence of any conversations
*/
@JvmInline
value class ByMessage(
val sourceMessage: Message
) : ChatIdWithThreadId {
override val chatId: IdChatIdentifier
get() = sourceMessage.chat.id
override val threadId: MessageThreadId?
get() = sourceMessage.threadIdOrNull
}
/**
* [Serializable] variant of [ChatIdWithThreadId] based on [Pair] of target [IdChatIdentifier] and [MessageThreadId]
*
* @see invoke
* @see serializable
*/
@Serializable
@JvmInline
value class ByPair(
val pair: Pair<IdChatIdentifier, MessageThreadId?>
) : ChatIdWithThreadId {
override val chatId: IdChatIdentifier
get() = pair.first
override val threadId: MessageThreadId?
get() = pair.second
}
companion object {
/**
* Creates lightweight [ByMessage] variant of [ChatIdWithThreadId]
*/
inline operator fun invoke(message: Message) = ByMessage(message)
/**
* 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<IdChatIdentifier, MessageThreadId?>) = ByPair(pair)
}
}
/**
* Creates [ChatIdWithThreadId.ByMessage] variant of [ChatIdWithThreadId] using [ChatIdWithThreadId.serializable]
*/
val Message.chatIdWithThreadId
get() = ChatIdWithThreadId(this)
/**
* Creates [ChatIdWithThreadId.ByPair] variant of [ChatIdWithThreadId] using [ChatIdWithThreadId.serializable]
*/
val Message.serializableChatIdWithThreadId
get() = ChatIdWithThreadId.serializable(this)