PlaguPoster/posts/src/commonMain/kotlin/models/PostContentInfo.kt

40 lines
1.3 KiB
Kotlin
Raw Normal View History

2022-08-18 12:59:05 +00:00
package dev.inmo.plaguposter.posts.models
2022-11-17 09:09:10 +00:00
import dev.inmo.tgbotapi.extensions.utils.possiblyMediaGroupMessageOrNull
2022-08-18 12:59:05 +00:00
import dev.inmo.tgbotapi.types.ChatId
2022-11-17 09:09:10 +00:00
import dev.inmo.tgbotapi.types.FullChatIdentifierSerializer
import dev.inmo.tgbotapi.types.IdChatIdentifier
2022-08-18 12:59:05 +00:00
import dev.inmo.tgbotapi.types.MessageIdentifier
2022-08-19 18:24:00 +00:00
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
2022-11-17 09:09:10 +00:00
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
2022-08-18 12:59:05 +00:00
import kotlinx.serialization.Serializable
@Serializable
data class PostContentInfo(
2022-11-17 09:09:10 +00:00
@Serializable(FullChatIdentifierSerializer::class)
val chatId: IdChatIdentifier,
2022-08-18 12:59:05 +00:00
val messageId: MessageIdentifier,
val group: String?,
val order: Int
2022-08-19 18:24:00 +00:00
) {
companion object {
2022-11-17 09:09:10 +00:00
private fun fromMessage(message: ContentMessage<*>, order: Int) = PostContentInfo(
2022-08-19 18:24:00 +00:00
message.chat.id,
message.messageId,
2022-11-17 09:09:10 +00:00
message.possiblyMediaGroupMessageOrNull() ?.mediaGroupId,
2022-08-19 18:24:00 +00:00
order
)
2022-11-17 09:09:10 +00:00
fun fromMessage(message: ContentMessage<*>): List<PostContentInfo> {
val content = message.content
return if (content is MediaGroupContent<*>) {
content.group.mapIndexed { i, it ->
fromMessage(it.sourceMessage, i)
}
} else {
listOf(fromMessage(message, 0))
}
}
2022-08-19 18:24:00 +00:00
}
}