1
0
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:
2025-08-23 16:07:45 +06:00
parent 6c02d57197
commit b92288d7cc
12 changed files with 697 additions and 0 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
}
}
}
}

View File

@@ -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

View File

@@ -0,0 +1,3 @@
package dev.inmo.tgbotapi.types.message.ChatEvents.abstracts
interface ChannelDirectMessagesEvent : SupergroupEvent

View File

@@ -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)
}
}
}
}
}

View File

@@ -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
)

View File

@@ -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

View File

@@ -5,6 +5,9 @@ typealias Currency = String
val String.Companion.XTR
get() = "XTR"
val String.Companion.TON
get() = "TOM"
interface Currencied {
val currency: Currency
}