mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-12-08 15:25:52 +00:00
add realization of several suggested post events
This commit is contained in:
@@ -779,6 +779,13 @@ const val rawField = "raw"
|
||||
|
||||
const val reactionTypeField = "reaction_type"
|
||||
|
||||
const val suggestedPostMessageField = "suggested_post_message"
|
||||
const val priceField = "price"
|
||||
const val sendDateField = "send_date"
|
||||
const val commentField = "comment"
|
||||
const val reasonField = "reason"
|
||||
const val starAmountField = "star_amount"
|
||||
|
||||
const val isDarkField = "is_dark"
|
||||
const val isFlippedField = "is_flipped"
|
||||
const val temperatureField = "temperature"
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelDirectMessagesEvent
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
|
||||
import dev.inmo.tgbotapi.types.payments.SuggestedPostPrice
|
||||
import dev.inmo.tgbotapi.types.suggestedPostMessageField
|
||||
import dev.inmo.tgbotapi.types.priceField
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostApprovalFailed(
|
||||
@SerialName(priceField) // TODO::Test that this field will never be null
|
||||
val price: SuggestedPostPrice,
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
val suggestedPostMessage: Message? = null,
|
||||
) : ChannelDirectMessagesEvent
|
||||
@@ -0,0 +1,24 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents
|
||||
|
||||
import dev.inmo.tgbotapi.types.TelegramDate
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelDirectMessagesEvent
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
|
||||
import dev.inmo.tgbotapi.types.payments.SuggestedPostPrice
|
||||
import dev.inmo.tgbotapi.types.suggestedPostMessageField
|
||||
import dev.inmo.tgbotapi.types.priceField
|
||||
import dev.inmo.tgbotapi.types.sendDateField
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostApproved(
|
||||
@SerialName(sendDateField)
|
||||
val sendDate: TelegramDate,
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
val suggestedPostMessage: Message? = null,
|
||||
@SerialName(priceField)
|
||||
val price: SuggestedPostPrice? = null,
|
||||
) : ChannelDirectMessagesEvent
|
||||
@@ -0,0 +1,19 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.suggestedPostMessageField
|
||||
import dev.inmo.tgbotapi.types.commentField
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelDirectMessagesEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostDeclined(
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
val suggestedPostMessage: Message? = null,
|
||||
@SerialName(commentField)
|
||||
val comment: String? = null
|
||||
) : ChannelDirectMessagesEvent
|
||||
@@ -0,0 +1,102 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.payments.stars.StarAmount
|
||||
import dev.inmo.tgbotapi.types.suggestedPostMessageField
|
||||
import dev.inmo.tgbotapi.types.currencyField
|
||||
import dev.inmo.tgbotapi.types.amountField
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelDirectMessagesEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializationStrategyClass
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Currencied
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Currency
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.TON
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.XTR
|
||||
import dev.inmo.tgbotapi.types.starAmountField
|
||||
import kotlinx.serialization.EncodeDefault
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
@Serializable(SuggestedPostPaid.Companion::class)
|
||||
sealed interface SuggestedPostPaid : Currencied, ChannelDirectMessagesEvent {
|
||||
val amount: Long?
|
||||
val starAmount: StarAmount?
|
||||
val suggestedPostMessage: Message?
|
||||
|
||||
@Serializable
|
||||
data class XTR(
|
||||
@SerialName(starAmountField)
|
||||
override val starAmount: StarAmount,
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
override val suggestedPostMessage: Message? = null,
|
||||
) : SuggestedPostPaid {
|
||||
override val amount: Long?
|
||||
get() = null
|
||||
@EncodeDefault
|
||||
override val currency: Currency = Currency.XTR
|
||||
}
|
||||
@Serializable
|
||||
data class TON(
|
||||
@SerialName(amountField)
|
||||
override val amount: Long,
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
override val suggestedPostMessage: Message? = null
|
||||
) : SuggestedPostPaid {
|
||||
override val starAmount: StarAmount?
|
||||
get() = null
|
||||
@EncodeDefault
|
||||
override val currency: Currency = Currency.TON
|
||||
}
|
||||
@Serializable
|
||||
data class Other(
|
||||
@SerialName(currencyField)
|
||||
override val currency: Currency,
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
override val suggestedPostMessage: Message? = null,
|
||||
@SerialName(amountField)
|
||||
override val amount: Long? = null,
|
||||
@SerialName(starAmountField)
|
||||
override val starAmount: StarAmount? = null
|
||||
) : SuggestedPostPaid
|
||||
|
||||
companion object : KSerializer<SuggestedPostPaid> {
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = Other.serializer().descriptor
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
value: SuggestedPostPaid
|
||||
) {
|
||||
val asOther = value as? Other ?: Other(
|
||||
currency = value.currency,
|
||||
amount = value.amount,
|
||||
starAmount = value.starAmount,
|
||||
suggestedPostMessage = value.suggestedPostMessage
|
||||
)
|
||||
return Other.serializer().serialize(encoder, asOther)
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): SuggestedPostPaid {
|
||||
val asOther = Other.serializer().deserialize(decoder)
|
||||
return when (asOther.currency) {
|
||||
Currency.TON -> TON(
|
||||
amount = asOther.amount ?: return asOther,
|
||||
suggestedPostMessage = asOther.suggestedPostMessage
|
||||
)
|
||||
Currency.XTR -> XTR(
|
||||
starAmount = asOther.starAmount ?: return asOther,
|
||||
suggestedPostMessage = asOther.suggestedPostMessage
|
||||
)
|
||||
else -> asOther
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelDirectMessagesEvent
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
|
||||
import dev.inmo.tgbotapi.types.suggestedPostMessageField
|
||||
import dev.inmo.tgbotapi.types.reasonField
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostRefunded(
|
||||
@SerialName(reasonField)
|
||||
val reason: String,
|
||||
@SerialName(suggestedPostMessageField)
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
val suggestedPostMessage: Message? = null
|
||||
) : ChannelDirectMessagesEvent
|
||||
@@ -0,0 +1,3 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents.abstracts
|
||||
|
||||
interface ChannelDirectMessagesEvent : SupergroupEvent
|
||||
@@ -0,0 +1,56 @@
|
||||
package dev.inmo.tgbotapi.types.message
|
||||
|
||||
import dev.inmo.tgbotapi.types.payments.SuggestedPostPrice
|
||||
import dev.inmo.tgbotapi.types.stateField
|
||||
import dev.inmo.tgbotapi.types.priceField
|
||||
import dev.inmo.tgbotapi.types.sendDateField
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlin.jvm.JvmInline
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostInfo(
|
||||
@SerialName(stateField)
|
||||
val state: State,
|
||||
@SerialName(priceField)
|
||||
val price: SuggestedPostPrice? = null,
|
||||
@SerialName(sendDateField)
|
||||
val sendDate: Int? = null
|
||||
) {
|
||||
@Serializable(State.Companion::class)
|
||||
sealed interface State {
|
||||
val name: String
|
||||
@Serializable
|
||||
data object Pending: State { override val name: String = "pending" }
|
||||
@Serializable
|
||||
data object Approved: State { override val name: String = "approved" }
|
||||
@Serializable
|
||||
data object Declined: State { override val name: String = "declined" }
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class Unknown(override val name: String) : State
|
||||
|
||||
companion object : KSerializer<State> {
|
||||
override val descriptor: SerialDescriptor =
|
||||
PrimitiveSerialDescriptor("SuggestedPostInfo.State", kotlinx.serialization.descriptors.PrimitiveKind.STRING)
|
||||
|
||||
override fun serialize(encoder: Encoder, value: State) {
|
||||
encoder.encodeString(value.name)
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): State {
|
||||
return when (val name = decoder.decodeString()) {
|
||||
Pending.name -> Pending
|
||||
Approved.name -> Approved
|
||||
Declined.name -> Declined
|
||||
else -> Unknown(name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.inmo.tgbotapi.types.message
|
||||
|
||||
import dev.inmo.tgbotapi.types.TelegramDate
|
||||
import dev.inmo.tgbotapi.types.payments.SuggestedPostPrice
|
||||
import dev.inmo.tgbotapi.types.priceField
|
||||
import dev.inmo.tgbotapi.types.sendDateField
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostParameters(
|
||||
@SerialName(priceField)
|
||||
val price: SuggestedPostPrice? = null,
|
||||
@SerialName(sendDateField)
|
||||
val sendDate: TelegramDate? = null
|
||||
)
|
||||
@@ -0,0 +1,17 @@
|
||||
package dev.inmo.tgbotapi.types.payments
|
||||
|
||||
import dev.inmo.tgbotapi.types.amountField
|
||||
import dev.inmo.tgbotapi.types.currencyField
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Amounted
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Currencied
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Currency
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SuggestedPostPrice(
|
||||
@SerialName(currencyField)
|
||||
override val currency: Currency,
|
||||
@SerialName(amountField)
|
||||
override val amount: Long
|
||||
) : Amounted, Currencied
|
||||
@@ -5,6 +5,9 @@ typealias Currency = String
|
||||
val String.Companion.XTR
|
||||
get() = "XTR"
|
||||
|
||||
val String.Companion.TON
|
||||
get() = "TOM"
|
||||
|
||||
interface Currencied {
|
||||
val currency: Currency
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user