tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/chat/invite_links/EditChatInviteLink.kt

135 lines
4.9 KiB
Kotlin
Raw Normal View History

package dev.inmo.tgbotapi.requests.chat.invite_links
2023-05-27 12:19:14 +00:00
import korlibs.time.DateTime
2021-11-08 11:27:15 +00:00
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.requests.chat.abstracts.*
import dev.inmo.tgbotapi.types.*
import kotlinx.serialization.*
2021-11-08 11:27:15 +00:00
sealed interface EditChatInviteLink<R : SecondaryChatInviteLink> : EditChatInviteLinkRequest<R>, KnownChatInviteLinkRequest<R> {
val expirationUnixTimeStamp: TelegramDate?
override val expireDate: DateTime?
get() = expirationUnixTimeStamp ?.asDate
override fun method(): String = "editChatInviteLink"
companion object {
fun unlimited(
chatId: ChatIdentifier,
inviteLink: String,
2021-11-08 12:00:43 +00:00
name: String? = null,
2021-11-08 11:27:15 +00:00
expirationUnixTimeStamp: TelegramDate? = null,
2021-11-08 12:00:43 +00:00
) = EditChatInviteLinkUnlimited(chatId, inviteLink, name, expirationUnixTimeStamp)
2021-11-08 11:27:15 +00:00
fun withLimitedMembers(
chatId: ChatIdentifier,
inviteLink: String,
membersLimit: MembersLimit,
2021-11-08 12:00:43 +00:00
name: String? = null,
2021-11-08 11:27:15 +00:00
expirationUnixTimeStamp: TelegramDate? = null,
2021-11-08 12:00:43 +00:00
) = EditChatInviteLinkWithLimitedMembers(chatId, inviteLink, membersLimit, name, expirationUnixTimeStamp)
2021-11-08 11:27:15 +00:00
fun withJoinRequest(
chatId: ChatIdentifier,
inviteLink: String,
2021-11-08 12:00:43 +00:00
name: String? = null,
2021-11-08 11:27:15 +00:00
expirationUnixTimeStamp: TelegramDate? = null,
2021-11-08 12:00:43 +00:00
) = EditChatInviteLinkWithJoinRequest(chatId, inviteLink, name, expirationUnixTimeStamp)
2021-11-08 11:27:15 +00:00
fun unlimited(
chatId: ChatIdentifier,
inviteLink: String,
2021-11-08 12:00:43 +00:00
expiration: DateTime,
name: String? = null,
) = unlimited(chatId, inviteLink, name, expiration.toTelegramDate())
2021-11-08 11:27:15 +00:00
fun withLimitedMembers(
chatId: ChatIdentifier,
inviteLink: String,
membersLimit: MembersLimit,
2021-11-08 12:00:43 +00:00
expiration: DateTime,
name: String? = null,
) = withLimitedMembers(chatId, inviteLink, membersLimit, name, expiration.toTelegramDate())
2021-11-08 11:27:15 +00:00
fun withJoinRequest(
chatId: ChatIdentifier,
inviteLink: String,
2021-11-08 12:00:43 +00:00
expiration: DateTime,
name: String? = null,
) = withJoinRequest(chatId, inviteLink, name, expiration.toTelegramDate())
2021-11-08 11:27:15 +00:00
}
}
/**
* Represent [https://core.telegram.org/bots/api#editchatinvitelink] request WITHOUT `member_limit`
* and `creates_join_request`
*
* @see EditChatInviteLink.unlimited
* @see EditChatInviteLinkWithLimitedMembers
* @see EditChatInviteLinkWithJoinRequest
*/
@Serializable
2021-11-08 11:27:15 +00:00
data class EditChatInviteLinkUnlimited(
@SerialName(chatIdField)
2021-03-11 15:25:11 +00:00
override val chatId: ChatIdentifier,
@SerialName(inviteLinkField)
override val inviteLink: String,
2021-11-08 12:00:43 +00:00
@SerialName(nameField)
override val name: String? = null,
@SerialName(expireDateField)
2021-11-08 11:27:15 +00:00
override val expirationUnixTimeStamp: TelegramDate? = null,
) : EditChatInviteLink<ChatInviteLinkUnlimited> {
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
2021-11-08 11:27:15 +00:00
override val resultDeserializer: DeserializationStrategy<ChatInviteLinkUnlimited>
get() = ChatInviteLinkUnlimited.serializer()
}
2021-11-08 11:27:15 +00:00
/**
* Represent [https://core.telegram.org/bots/api#editchatinvitelink] request WITH `member_limit`
* and WITHOUT `creates_join_request`
*
* @see EditChatInviteLink.withLimitedMembers
* @see EditChatInviteLinkUnlimited
* @see EditChatInviteLinkWithJoinRequest
*/
@Serializable
data class EditChatInviteLinkWithLimitedMembers(
@SerialName(chatIdField)
override val chatId: ChatIdentifier,
@SerialName(inviteLinkField)
override val inviteLink: String,
@SerialName(memberLimitField)
override val membersLimit: MembersLimit,
2021-11-08 12:00:43 +00:00
@SerialName(nameField)
override val name: String? = null,
2021-11-08 11:27:15 +00:00
@SerialName(expireDateField)
override val expirationUnixTimeStamp: TelegramDate? = null,
) : EditChatInviteLink<ChatInviteLinkWithLimitedMembers>,
LimitedMembersChatInviteLinkRequest {
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}
2021-11-08 11:27:15 +00:00
/**
* Represent [https://core.telegram.org/bots/api#editchatinvitelink] request WITHOUT `member_limit`
* and WITH `creates_join_request`
*
* @see EditChatInviteLink.withJoinRequest
* @see EditChatInviteLinkUnlimited
* @see EditChatInviteLinkWithLimitedMembers
*/
@Serializable
data class EditChatInviteLinkWithJoinRequest(
@SerialName(chatIdField)
override val chatId: ChatIdentifier,
@SerialName(inviteLinkField)
override val inviteLink: String,
2021-11-08 12:00:43 +00:00
@SerialName(nameField)
override val name: String? = null,
2021-11-08 11:27:15 +00:00
@SerialName(expireDateField)
override val expirationUnixTimeStamp: TelegramDate? = null,
) : EditChatInviteLink<ChatInviteLinkWithJoinRequest>,
WithJoinRequestChatInviteLinkRequest {
@Required
@SerialName(createsJoinRequestField)
private val createsJoinRequest: Boolean = true
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}