tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/Impls.kt

107 lines
3.0 KiB
Kotlin

package dev.inmo.tgbotapi.types.chat
import dev.inmo.micro_utils.language_codes.IetfLanguageCode
import dev.inmo.micro_utils.language_codes.IetfLanguageCodeSerializer
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.abstracts.WithOptionalLanguageCode
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class GroupChatImpl(
@SerialName(idField)
override val id: ChatId,
@SerialName(titleField)
override val title: String
) : GroupChat
@Serializable
data class PrivateChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
@SerialName(usernameField)
override val username: Username? = null,
@SerialName(firstNameField)
override val firstName: String = "",
@SerialName(lastNameField)
override val lastName: String = ""
) : PrivateChat
@Serializable
data class SupergroupChatImpl(
@SerialName(idField)
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)
override val username: Username? = null
) : SupergroupChat
@Serializable
data class ForumChatImpl(
@SerialName(idField)
override val id: IdChatIdentifier,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)
override val username: Username? = null
) : ForumChat
@Serializable
data class ChannelChatImpl(
@SerialName(idField)
override val id: ChatId,
@SerialName(titleField)
override val title: String,
@SerialName(usernameField)
override val username: Username? = null
) : ChannelChat
@Serializable(UserSerializer::class)
sealed class User : PrivateChat
@Serializable(UserSerializer::class)
sealed class Bot : User() {
abstract override val username: Username
}
@Serializable
data class CommonBot(
override val id: UserId,
@SerialName(usernameField)
override val username: Username,
@SerialName(firstNameField)
override val firstName: String,
@SerialName(lastNameField)
override val lastName: String = ""
) : Bot() {
@SerialName(isBotField)
private val isBot = true
}
@Serializable
data class CommonUser(
override val id: UserId,
@SerialName(firstNameField)
override val firstName: String,
@SerialName(lastNameField)
override val lastName: String = "",
@SerialName(usernameField)
override val username: Username? = null,
@SerialName(languageCodeField)
@Serializable(IetfLanguageCodeSerializer::class)
override val ietfLanguageCode: IetfLanguageCode? = null,
@SerialName(isPremiumField)
override val isPremium: Boolean = false,
@SerialName(addedToAttachmentMenuField)
override val addedToAttachmentMenu: Boolean = false
) : User(), WithOptionalLanguageCode, PossiblyPremiumChat, AbleToAddInAttachmentMenuChat {
constructor(
id: UserId,
firstName: String,
lastName: String = "",
username: Username? = null,
languageCode: String
) : this(id, firstName, lastName, username, IetfLanguageCode(languageCode))
}