mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-04 15:49:41 +00:00
rewrite work with Bot class
This commit is contained in:
@@ -1,15 +1,14 @@
|
||||
package com.github.insanusmokrassar.TelegramBotAPI.requests
|
||||
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.Bot
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.User
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
class GetMe : SimpleRequest<Bot> {
|
||||
class GetMe : SimpleRequest<ExtendedBot> {
|
||||
override fun method(): String = "getMe"
|
||||
override val resultDeserializer: DeserializationStrategy<Bot>
|
||||
get() = Bot.serializer()
|
||||
override val resultDeserializer: DeserializationStrategy<ExtendedBot>
|
||||
get() = ExtendedBot.serializer()
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
}
|
@@ -21,8 +21,25 @@ data class CommonUser(
|
||||
val languageCode: String? = null
|
||||
) : User()
|
||||
|
||||
@Serializable(UserSerializer::class)
|
||||
sealed class Bot : User()
|
||||
|
||||
@Serializable
|
||||
data class Bot(
|
||||
data class CommonBot(
|
||||
override val id: ChatId,
|
||||
@SerialName(firstNameField)
|
||||
override val firstName: String,
|
||||
@SerialName(lastNameField)
|
||||
override val lastName: String = "",
|
||||
@SerialName(usernameField)
|
||||
override val username: Username? = null
|
||||
) : Bot() {
|
||||
@SerialName(isBotField)
|
||||
private val isBot = true
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class ExtendedBot(
|
||||
override val id: ChatId,
|
||||
@SerialName(firstNameField)
|
||||
override val firstName: String,
|
||||
@@ -36,11 +53,12 @@ data class Bot(
|
||||
val canReadAllGroupMessages: Boolean = false,
|
||||
@SerialName(supportInlineQueriesField)
|
||||
val supportsInlineQueries: Boolean = false
|
||||
) : User() {
|
||||
) : Bot() {
|
||||
@SerialName(isBotField)
|
||||
private val isBot = true
|
||||
}
|
||||
|
||||
|
||||
@Serializer(User::class)
|
||||
internal object UserSerializer : KSerializer<User> {
|
||||
override fun deserialize(decoder: Decoder): User {
|
||||
@@ -51,17 +69,30 @@ internal object UserSerializer : KSerializer<User> {
|
||||
CommonUser.serializer(),
|
||||
asJson
|
||||
)
|
||||
else -> Json.nonstrict.fromJson(
|
||||
Bot.serializer(),
|
||||
asJson
|
||||
)
|
||||
else -> {
|
||||
if ((asJson.get(canJoinGroupsField)
|
||||
?: asJson.get(canReadAllGroupMessagesField)
|
||||
?: asJson.get(supportInlineQueriesField)) != null
|
||||
) {
|
||||
Json.nonstrict.fromJson(
|
||||
ExtendedBot.serializer(),
|
||||
asJson
|
||||
)
|
||||
} else {
|
||||
Json.nonstrict.fromJson(
|
||||
CommonBot.serializer(),
|
||||
asJson
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, obj: User) {
|
||||
when (obj) {
|
||||
is CommonUser -> CommonUser.serializer().serialize(encoder, obj)
|
||||
is Bot -> Bot.serializer().serialize(encoder, obj)
|
||||
is CommonBot -> CommonBot.serializer().serialize(encoder, obj)
|
||||
is ExtendedBot -> ExtendedBot.serializer().serialize(encoder, obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user