1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-16 05:40:32 +00:00

add support of is_paid_post field

This commit is contained in:
2025-09-09 17:15:59 +06:00
parent b9bdf7cc72
commit 6eb7563c70
5 changed files with 103 additions and 19 deletions

View File

@@ -28,9 +28,9 @@ data class ChannelContentMessageImpl<T: MessageContent>(
override val fromOffline: Boolean, override val fromOffline: Boolean,
@SerialName(paidMessageStarCountField) @SerialName(paidMessageStarCountField)
override val cost: Int? = null, override val cost: Int? = null,
) : ChannelContentMessage<T> {
@SerialName(isPaidPostField) @SerialName(isPaidPostField)
override val isPaidPost: Boolean = false override val isPaidPost: Boolean = false
) : ChannelContentMessage<T> {
constructor( constructor(
messageId: MessageId, messageId: MessageId,
chat: PreviewChannelChat, chat: PreviewChannelChat,

View File

@@ -0,0 +1,54 @@
package dev.inmo.tgbotapi.types.message
import korlibs.time.DateTime
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
import dev.inmo.tgbotapi.types.chat.CommonBot
import dev.inmo.tgbotapi.types.chat.PreviewChannelChat
import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.types.message.abstracts.*
import dev.inmo.tgbotapi.types.message.content.MessageContent
import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.SerialName
data class ChannelPaidPostImpl<T: MessageContent>(
override val messageId: MessageId,
override val chat: PreviewChannelChat,
override val senderChat: PreviewChat,
override val content: T,
override val date: DateTime,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val forwardOrigin: MessageOrigin?,
override val replyInfo: ReplyInfo?,
override val replyMarkup: InlineKeyboardMarkup?,
override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupId?,
override val fromOffline: Boolean,
@SerialName(paidMessageStarCountField)
override val cost: Int? = null,
) : ChannelPaidPost<T> {
@SerialName(isPaidPostField)
@EncodeDefault
override val isPaidPost: Boolean = true
constructor(
messageId: MessageId,
chat: PreviewChannelChat,
senderChat: PreviewChat,
content: T,
date: DateTime,
editDate: DateTime?,
hasProtectedContent: Boolean,
forwardInfo: ForwardInfo,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupId?,
fromOffline: Boolean,
) : this(
messageId, chat, senderChat, content, date, editDate, hasProtectedContent, forwardInfo.messageOrigin(), replyTo ?.let { ReplyInfo.Internal(it) }, replyMarkup, senderBot, authorSignature, mediaGroupId, fromOffline
)
}

View File

@@ -400,24 +400,43 @@ internal data class RawMessage(
} }
when (chat) { when (chat) {
is PreviewPublicChat -> when (chat) { is PreviewPublicChat -> when (chat) {
is PreviewChannelChat -> ChannelContentMessageImpl( is PreviewChannelChat -> if (is_paid_post) {
messageId = messageId, ChannelContentMessageImpl(
chat = chat, messageId = messageId,
senderChat = checkedFrom ?: sender_chat ?: chat, chat = chat,
content = content, senderChat = checkedFrom ?: sender_chat ?: chat,
date = date.asDate, content = content,
editDate = edit_date?.asDate, date = date.asDate,
hasProtectedContent = has_protected_content == true, editDate = edit_date?.asDate,
forwardOrigin = forward_origin, hasProtectedContent = has_protected_content == true,
replyInfo = replyInfo, forwardOrigin = forward_origin,
replyMarkup = reply_markup, replyInfo = replyInfo,
senderBot = via_bot, replyMarkup = reply_markup,
authorSignature = author_signature, senderBot = via_bot,
mediaGroupId = media_group_id, authorSignature = author_signature,
fromOffline = is_from_offline, mediaGroupId = media_group_id,
cost = paid_star_count, fromOffline = is_from_offline,
isPaidPost = is_paid_post, cost = paid_star_count,
) )
} else {
ChannelPaidPostImpl(
messageId = messageId,
chat = chat,
senderChat = checkedFrom ?: sender_chat ?: chat,
content = content,
date = date.asDate,
editDate = edit_date?.asDate,
hasProtectedContent = has_protected_content == true,
forwardOrigin = forward_origin,
replyInfo = replyInfo,
replyMarkup = reply_markup,
senderBot = via_bot,
authorSignature = author_signature,
mediaGroupId = media_group_id,
fromOffline = is_from_offline,
cost = paid_star_count,
)
}
is PreviewForumChat -> when(chat) { is PreviewForumChat -> when(chat) {
is PreviewChannelDirectMessagesChat -> { is PreviewChannelDirectMessagesChat -> {
if (messageThreadId != null) { if (messageThreadId != null) {

View File

@@ -0,0 +1,8 @@
package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.content.MessageContent
interface ChannelPaidPost<T: MessageContent> : ChannelContentMessage<T> {
override val isPaidPost: Boolean
get() = true
}

View File

@@ -20,6 +20,9 @@ inline fun <reified T : MessageContent> PossiblySentViaBotCommonMessage<*>.requi
inline fun <reified T : MessageContent> ChannelContentMessage<*>.withContent() = if (content is T) { this as ChannelContentMessage<T> } else { null } inline fun <reified T : MessageContent> ChannelContentMessage<*>.withContent() = if (content is T) { this as ChannelContentMessage<T> } else { null }
inline fun <reified T : MessageContent> ChannelContentMessage<*>.requireWithContent() = withContent<T>()!! inline fun <reified T : MessageContent> ChannelContentMessage<*>.requireWithContent() = withContent<T>()!!
inline fun <reified T : MessageContent> ChannelPaidPost<*>.withContent() = if (content is T) { this as ChannelPaidPost<T> } else { null }
inline fun <reified T : MessageContent> ChannelPaidPost<*>.requireWithContent() = withContent<T>()!!
inline fun <reified T : MessageContent> PrivateContentMessage<*>.withContent() = if (content is T) { this as PrivateContentMessage<T> } else { null } inline fun <reified T : MessageContent> PrivateContentMessage<*>.withContent() = if (content is T) { this as PrivateContentMessage<T> } else { null }
inline fun <reified T : MessageContent> PrivateContentMessage<*>.requireWithContent() = withContent<T>()!! inline fun <reified T : MessageContent> PrivateContentMessage<*>.requireWithContent() = withContent<T>()!!