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

update user shared to users shared

This commit is contained in:
2024-01-03 16:28:56 +06:00
parent c025a027c6
commit fc183bfd2f
11 changed files with 105 additions and 86 deletions

View File

@@ -175,6 +175,8 @@ val keywordsInStickerLimit = 0 .. 20
val stickerKeywordLengthLimit = 0 .. 64
val keyboardButtonRequestUserLimit = 1 .. 10
val forwardMessagesLimit = 1 .. 100
val copyMessagesLimit = forwardMessagesLimit
val deleteMessagesLimit = forwardMessagesLimit
@@ -245,6 +247,7 @@ const val slowModeDelayField = "slow_mode_delay"
const val maskPositionField = "mask_position"
const val phoneNumberField = "phone_number"
const val userIdField = "user_id"
const val userIdsField = "user_ids"
const val onlyIfBannedField = "only_if_banned"
const val containsMasksField = "contains_masks"
const val resultIdField = "result_id"
@@ -331,8 +334,10 @@ const val requestContactField = "request_contact"
const val requestLocationField = "request_location"
const val requestPollField = "request_poll"
const val requestUserField = "request_user"
const val requestUsersField = "request_users"
const val requestChatField = "request_chat"
const val requestIdField = "request_id"
const val maxQuantityField = "max_quantity"
const val userIsBotField = "user_is_bot"
const val userIsPremiumField = "user_is_premium"

View File

@@ -103,13 +103,13 @@ data class RequestPollKeyboardButton(
*
* In case you will use [dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onUserShared] it is
* recommended to use [kotlinx.coroutines.flow.Flow] [kotlinx.coroutines.flow.filter] with checking of incoming
* [dev.inmo.tgbotapi.types.request.UserShared.requestId]
* [dev.inmo.tgbotapi.types.request.UsersShared.requestId]
*/
@Serializable
data class RequestUserKeyboardButton(
override val text: String,
@SerialName(requestUserField)
val requestUser: KeyboardButtonRequestUser
@SerialName(requestUsersField)
val requestUsers: KeyboardButtonRequestUsers
) : KeyboardButton
/**
@@ -160,11 +160,11 @@ object KeyboardButtonSerializer : KSerializer<KeyboardButton> {
asJson[requestPollField] ?.jsonObject ?: buildJsonObject { }
)
)
asJson is JsonObject && asJson[requestUserField] != null -> RequestUserKeyboardButton(
asJson is JsonObject && asJson[requestUsersField] != null -> RequestUserKeyboardButton(
asJson[textField]!!.jsonPrimitive.content,
nonstrictJsonFormat.decodeFromJsonElement(
KeyboardButtonRequestUser.serializer(),
asJson[requestUserField] ?.jsonObject ?: buildJsonObject { }
KeyboardButtonRequestUsers.serializer(),
asJson[requestUsersField] ?.jsonObject ?: buildJsonObject { }
)
)
asJson is JsonObject && asJson[requestChatField] != null -> RequestChatKeyboardButton(

View File

@@ -1,9 +1,7 @@
package dev.inmo.tgbotapi.types.buttons
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.request.RequestId
import dev.inmo.tgbotapi.types.requestIdField
import dev.inmo.tgbotapi.types.userIsBotField
import dev.inmo.tgbotapi.types.userIsPremiumField
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.KSerializer
@@ -14,17 +12,20 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable(KeyboardButtonRequestUser.Companion::class)
@Serializable(KeyboardButtonRequestUsers.Companion::class)
@ClassCastsIncluded
sealed interface KeyboardButtonRequestUser {
sealed interface KeyboardButtonRequestUsers {
val requestId: RequestId
val isBot: Boolean?
val maxCount: Int
@Serializable
data class Any(
@SerialName(requestIdField)
override val requestId: RequestId
) : KeyboardButtonRequestUser {
override val requestId: RequestId,
@SerialName(maxQuantityField)
override val maxCount: Int = keyboardButtonRequestUserLimit.first
) : KeyboardButtonRequestUsers {
@SerialName(userIsBotField)
@EncodeDefault
override val isBot: Boolean? = null
@@ -35,8 +36,10 @@ sealed interface KeyboardButtonRequestUser {
@SerialName(requestIdField)
override val requestId: RequestId,
@SerialName(userIsPremiumField)
val isPremium: Boolean? = null
) : KeyboardButtonRequestUser {
val isPremium: Boolean? = null,
@SerialName(maxQuantityField)
override val maxCount: Int = keyboardButtonRequestUserLimit.first
) : KeyboardButtonRequestUsers {
@SerialName(userIsBotField)
@EncodeDefault
override val isBot: Boolean = false
@@ -45,15 +48,17 @@ sealed interface KeyboardButtonRequestUser {
@Serializable
data class Bot(
@SerialName(requestIdField)
override val requestId: RequestId
) : KeyboardButtonRequestUser {
override val requestId: RequestId,
@SerialName(maxQuantityField)
override val maxCount: Int = keyboardButtonRequestUserLimit.first
) : KeyboardButtonRequestUsers {
@SerialName(userIsBotField)
@EncodeDefault
override val isBot: Boolean = true
}
@Serializer(KeyboardButtonRequestUser::class)
companion object : KSerializer<KeyboardButtonRequestUser> {
@Serializer(KeyboardButtonRequestUsers::class)
companion object : KSerializer<KeyboardButtonRequestUsers> {
@Serializable
private data class Surrogate(
@SerialName(requestIdField)
@@ -61,31 +66,37 @@ sealed interface KeyboardButtonRequestUser {
@SerialName(userIsBotField)
val userIsBot: Boolean? = null,
@SerialName(userIsPremiumField)
val userIsPremium: Boolean? = null
val userIsPremium: Boolean? = null,
@SerialName(maxQuantityField)
val maxCount: Int = keyboardButtonRequestUserLimit.first
)
private val realSerializer = Surrogate.serializer()
override val descriptor: SerialDescriptor = realSerializer.descriptor
override fun deserialize(decoder: Decoder): KeyboardButtonRequestUser {
override fun deserialize(decoder: Decoder): KeyboardButtonRequestUsers {
val surrogate = realSerializer.deserialize(decoder)
return when (surrogate.userIsBot) {
true -> Bot(surrogate.requestId)
false -> Common(surrogate.requestId, surrogate.userIsPremium)
null -> Any(surrogate.requestId)
true -> Bot(surrogate.requestId, surrogate.maxCount)
false -> Common(surrogate.requestId, surrogate.userIsPremium, surrogate.maxCount)
null -> Any(surrogate.requestId, surrogate.maxCount)
}
}
override fun serialize(encoder: Encoder, value: KeyboardButtonRequestUser) {
override fun serialize(encoder: Encoder, value: KeyboardButtonRequestUsers) {
realSerializer.serialize(
encoder,
Surrogate(
value.requestId,
value.isBot,
(value as? Common) ?.isPremium
(value as? Common) ?.isPremium,
value.maxCount
)
)
}
}
}
@Deprecated("Renamed", ReplaceWith("KeyboardButtonRequestUsers", "dev.inmo.tgbotapi.types.buttons.KeyboardButtonRequestUsers"))
typealias KeyboardButtonRequestUser = KeyboardButtonRequestUsers

View File

@@ -57,25 +57,25 @@ inline fun webAppReplyButton(
*/
inline fun requestUserReplyButton(
text: String,
requestUser: KeyboardButtonRequestUser
requestUser: KeyboardButtonRequestUsers
) = RequestUserKeyboardButton(
text,
requestUser
)
/**
* Creates [RequestUserKeyboardButton] with [KeyboardButtonRequestUser.Bot]
* Creates [RequestUserKeyboardButton] with [KeyboardButtonRequestUsers.Bot]
*/
inline fun requestBotReplyButton(
text: String,
requestId: RequestId
) = requestUserReplyButton(
text,
KeyboardButtonRequestUser.Bot(requestId)
KeyboardButtonRequestUsers.Bot(requestId)
)
/**
* Creates [RequestUserKeyboardButton] with [KeyboardButtonRequestUser.Common]
* Creates [RequestUserKeyboardButton] with [KeyboardButtonRequestUsers.Common]
*/
inline fun requestUserReplyButton(
text: String,
@@ -83,18 +83,18 @@ inline fun requestUserReplyButton(
premiumUser: Boolean? = null
) = requestUserReplyButton(
text,
KeyboardButtonRequestUser.Common(requestId, premiumUser)
KeyboardButtonRequestUsers.Common(requestId, premiumUser)
)
/**
* Creates [RequestUserKeyboardButton] with [KeyboardButtonRequestUser.Any]
* Creates [RequestUserKeyboardButton] with [KeyboardButtonRequestUsers.Any]
*/
inline fun requestUserOrBotReplyButton(
text: String,
requestId: RequestId
) = requestUserReplyButton(
text,
KeyboardButtonRequestUser.Any(requestId)
KeyboardButtonRequestUsers.Any(requestId)
)

View File

@@ -30,7 +30,7 @@ import dev.inmo.tgbotapi.types.payments.Invoice
import dev.inmo.tgbotapi.types.payments.SuccessfulPayment
import dev.inmo.tgbotapi.types.polls.Poll
import dev.inmo.tgbotapi.types.request.ChatShared
import dev.inmo.tgbotapi.types.request.UserShared
import dev.inmo.tgbotapi.types.request.UsersShared
import dev.inmo.tgbotapi.types.stories.Story
import dev.inmo.tgbotapi.types.venue.Venue
import kotlinx.serialization.SerialName
@@ -97,7 +97,7 @@ internal data class RawMessage(
private val dice: Dice? = null,
private val successful_payment: SuccessfulPayment? = null,
private val user_shared: UserShared? = null,
private val users_shared: UsersShared? = null,
private val chat_shared: ChatShared? = null,
// Voice Chat Service Messages
@@ -266,7 +266,7 @@ internal data class RawMessage(
successful_payment != null -> SuccessfulPaymentEvent(successful_payment)
connected_website != null -> UserLoggedIn(connected_website)
web_app_data != null -> web_app_data
user_shared != null -> user_shared
users_shared != null -> users_shared
chat_shared != null -> chat_shared
else -> null
}

View File

@@ -1,19 +1,22 @@
package dev.inmo.tgbotapi.types.request
import dev.inmo.tgbotapi.types.ChatId
import dev.inmo.tgbotapi.types.UserId
import dev.inmo.tgbotapi.types.requestIdField
import dev.inmo.tgbotapi.types.userIdField
import dev.inmo.tgbotapi.types.*
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class UserShared(
data class UsersShared(
@SerialName(requestIdField)
override val requestId: RequestId,
@SerialName(userIdField)
val userId: UserId
@SerialName(userIdsField)
val userIds: List<UserId>
) : ChatSharedRequest {
val userId: UserId
get() = userIds.first()
constructor(
requestId: RequestId,
userId: UserId
) : this(requestId, listOf(userId))
override val chatId: ChatId
get() = userId
}