mirror of
https://github.com/InsanusMokrassar/PlaguPoster.git
synced 2026-07-06 09:34:51 +00:00
updates and fixes
This commit is contained in:
@@ -1,25 +1,39 @@
|
||||
package dev.inmo.plaguposter.posts.models
|
||||
|
||||
import dev.inmo.tgbotapi.extensions.utils.mediaGroupMessageOrNull
|
||||
import dev.inmo.tgbotapi.extensions.utils.possiblyMediaGroupMessageOrNull
|
||||
import dev.inmo.tgbotapi.types.ChatId
|
||||
import dev.inmo.tgbotapi.types.FullChatIdentifierSerializer
|
||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class PostContentInfo(
|
||||
val chatId: ChatId,
|
||||
@Serializable(FullChatIdentifierSerializer::class)
|
||||
val chatId: IdChatIdentifier,
|
||||
val messageId: MessageIdentifier,
|
||||
val group: String?,
|
||||
val order: Int
|
||||
) {
|
||||
companion object {
|
||||
fun fromMessage(message: ContentMessage<*>, order: Int) = PostContentInfo(
|
||||
private fun fromMessage(message: ContentMessage<*>, order: Int) = PostContentInfo(
|
||||
message.chat.id,
|
||||
message.messageId,
|
||||
message.mediaGroupMessageOrNull() ?.mediaGroupId,
|
||||
message.possiblyMediaGroupMessageOrNull() ?.mediaGroupId,
|
||||
order
|
||||
)
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,10 @@ import com.soywiz.klock.DateTime
|
||||
import dev.inmo.micro_utils.repos.ReadCRUDRepo
|
||||
import dev.inmo.plaguposter.posts.models.*
|
||||
import dev.inmo.tgbotapi.types.ChatId
|
||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageIdentifier
|
||||
|
||||
interface ReadPostsRepo : ReadCRUDRepo<RegisteredPost, PostId> {
|
||||
suspend fun getIdByChatAndMessage(chatId: ChatId, messageId: MessageIdentifier): PostId?
|
||||
suspend fun getIdByChatAndMessage(chatId: IdChatIdentifier, messageId: MessageIdentifier): PostId?
|
||||
suspend fun getPostCreationTime(postId: PostId): DateTime?
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import dev.inmo.tgbotapi.extensions.api.send.send
|
||||
import dev.inmo.tgbotapi.extensions.utils.*
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
|
||||
class PostPublisher(
|
||||
private val bot: TelegramBot,
|
||||
@@ -37,14 +38,26 @@ class PostPublisher(
|
||||
|
||||
sortedMessagesContents.forEach { (_, contents) ->
|
||||
contents.singleOrNull() ?.also {
|
||||
bot.copyMessage(targetChatId, it.chatId, it.messageId)
|
||||
runCatching {
|
||||
bot.copyMessage(targetChatId, it.chatId, it.messageId)
|
||||
}.onFailure { _ ->
|
||||
runCatching {
|
||||
bot.forwardMessage(
|
||||
it.chatId,
|
||||
targetChatId,
|
||||
it.messageId
|
||||
)
|
||||
}.onSuccess {
|
||||
bot.copyMessage(targetChatId, it)
|
||||
}
|
||||
}
|
||||
return@forEach
|
||||
}
|
||||
val resultContents = contents.mapNotNull {
|
||||
it.order to (bot.forwardMessage(toChatId = cachingChatId, fromChatId = it.chatId, messageId = it.messageId).contentMessageOrNull() ?: return@mapNotNull null)
|
||||
}.sortedBy { it.first }.mapNotNull { (_, it) ->
|
||||
it.withContentOrNull<MediaGroupContent>() ?: null.also { _ ->
|
||||
bot.copyMessage(targetChatId, it)
|
||||
}.sortedBy { it.first }.mapNotNull { (_, forwardedMessage) ->
|
||||
forwardedMessage.withContentOrNull<MediaGroupPartContent>() ?: null.also { _ ->
|
||||
bot.copyMessage(targetChatId, forwardedMessage)
|
||||
}
|
||||
}
|
||||
resultContents.singleOrNull() ?.also {
|
||||
|
||||
Reference in New Issue
Block a user