mirror of
https://github.com/InsanusMokrassar/PlaguPoster.git
synced 2024-12-22 14:07:14 +00:00
Merge pull request #20 from InsanusMokrassar/several_sources
Several sources
This commit is contained in:
commit
39391636ac
@ -1,5 +1,9 @@
|
|||||||
# PlaguPoster
|
# PlaguPoster
|
||||||
|
|
||||||
|
## 0.5.3
|
||||||
|
|
||||||
|
* Dependencies update
|
||||||
|
|
||||||
## 0.5.2
|
## 0.5.2
|
||||||
|
|
||||||
* Dependencies update
|
* Dependencies update
|
||||||
|
@ -18,7 +18,7 @@ allprojects {
|
|||||||
mavenLocal()
|
mavenLocal()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
maven { url "https://git.inmo.dev/api/packages/InsanusMokrassar/maven" }
|
maven { url "https://nexus.inmo.dev/repository/maven-releases/" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,15 +12,20 @@ data class ChatConfig(
|
|||||||
val targetChatId: IdChatIdentifier? = null,
|
val targetChatId: IdChatIdentifier? = null,
|
||||||
@SerialName("sourceChat")
|
@SerialName("sourceChat")
|
||||||
@Serializable(FullChatIdentifierSerializer::class)
|
@Serializable(FullChatIdentifierSerializer::class)
|
||||||
val sourceChatId: IdChatIdentifier,
|
val sourceChatId: IdChatIdentifier?,
|
||||||
@SerialName("cacheChat")
|
@SerialName("cacheChat")
|
||||||
@Serializable(FullChatIdentifierSerializer::class)
|
@Serializable(FullChatIdentifierSerializer::class)
|
||||||
val cacheChatId: IdChatIdentifier,
|
val cacheChatId: IdChatIdentifier,
|
||||||
@SerialName("targetChats")
|
@SerialName("targetChats")
|
||||||
val targetChatIds: List<@Serializable(FullChatIdentifierSerializer::class) IdChatIdentifier> = emptyList(),
|
val targetChatIds: List<@Serializable(FullChatIdentifierSerializer::class) IdChatIdentifier> = emptyList(),
|
||||||
|
@SerialName("sourceChats")
|
||||||
|
val sourceChatIds: List<@Serializable(FullChatIdentifierSerializer::class) IdChatIdentifier> = emptyList(),
|
||||||
) {
|
) {
|
||||||
val allTargetChatIds by lazy {
|
val allTargetChatIds by lazy {
|
||||||
listOfNotNull(targetChatId) + targetChatIds
|
(listOfNotNull(targetChatId) + targetChatIds).toSet()
|
||||||
|
}
|
||||||
|
val allSourceChatIds by lazy {
|
||||||
|
(listOfNotNull(sourceChatId) + sourceChatIds).toSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@ -30,8 +35,8 @@ data class ChatConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun check(chatId: IdChatIdentifier) = when (chatId) {
|
fun check(chatId: IdChatIdentifier) = when (chatId) {
|
||||||
targetChatId,
|
in allTargetChatIds,
|
||||||
sourceChatId,
|
in allSourceChatIds,
|
||||||
cacheChatId -> true
|
cacheChatId -> true
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ object CommonPlugin : Plugin {
|
|||||||
val config = koin.get<ChatConfig>()
|
val config = koin.get<ChatConfig>()
|
||||||
|
|
||||||
Log.iS { "Target chats info: ${config.allTargetChatIds.map { getChat(it) }.joinToString()}" }
|
Log.iS { "Target chats info: ${config.allTargetChatIds.map { getChat(it) }.joinToString()}" }
|
||||||
Log.iS { "Source chat info: ${getChat(config.sourceChatId)}" }
|
Log.iS { "Source chats info: ${config.allSourceChatIds.map { getChat(it) }.joinToString()}" }
|
||||||
Log.iS { "Cache chat info: ${getChat(config.cacheChatId)}" }
|
Log.iS { "Cache chat info: ${getChat(config.cacheChatId)}" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,4 +10,4 @@ android.enableJetifier=true
|
|||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.5.2
|
version=0.5.3
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
kotlin = "1.9.21"
|
kotlin = "1.9.22"
|
||||||
kotlin-serialization = "1.6.2"
|
kotlin-serialization = "1.6.2"
|
||||||
|
|
||||||
plagubot = "7.4.1"
|
plagubot = "8.1.1"
|
||||||
tgbotapi = "9.4.2"
|
tgbotapi = "10.0.1"
|
||||||
microutils = "0.20.19"
|
microutils = "0.20.34"
|
||||||
kslog = "1.3.1"
|
kslog = "1.3.2"
|
||||||
krontab = "2.2.4"
|
krontab = "2.2.7"
|
||||||
plagubot-plugins = "0.17.1"
|
plagubot-plugins = "0.18.1"
|
||||||
|
|
||||||
dokka = "1.9.10"
|
dokka = "1.9.10"
|
||||||
|
|
||||||
|
@ -104,10 +104,12 @@ object Plugin : Plugin {
|
|||||||
return@forEach
|
return@forEach
|
||||||
}
|
}
|
||||||
|
|
||||||
send(
|
runCatching {
|
||||||
chatsConfig.sourceChatId,
|
send(
|
||||||
"Can't find any messages for post $postId. So, deleting it"
|
chatsConfig.cacheChatId,
|
||||||
)
|
"Can't find any messages for post $postId. So, deleting it"
|
||||||
|
)
|
||||||
|
}
|
||||||
runCatching {
|
runCatching {
|
||||||
postsRepo.deleteById(postId)
|
postsRepo.deleteById(postId)
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import dev.inmo.tgbotapi.extensions.utils.types.buttons.dataButton
|
|||||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.flatInlineKeyboard
|
import dev.inmo.tgbotapi.extensions.utils.types.buttons.flatInlineKeyboard
|
||||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||||
import dev.inmo.tgbotapi.types.MessageIdentifier
|
import dev.inmo.tgbotapi.types.MessageIdentifier
|
||||||
|
import dev.inmo.tgbotapi.types.ReplyParameters
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||||
import dev.inmo.tgbotapi.types.message.ParseMode
|
import dev.inmo.tgbotapi.types.message.ParseMode
|
||||||
@ -112,7 +113,7 @@ object Plugin : Plugin {
|
|||||||
firstContent.chatId,
|
firstContent.chatId,
|
||||||
text = config.text,
|
text = config.text,
|
||||||
parseMode = config.parseMode,
|
parseMode = config.parseMode,
|
||||||
replyToMessageId = firstContent.messageId,
|
replyParameters = ReplyParameters(firstContent.chatId, firstContent.messageId),
|
||||||
replyMarkup = InlineKeyboardMarkup(buttons),
|
replyMarkup = InlineKeyboardMarkup(buttons),
|
||||||
disableNotification = true
|
disableNotification = true
|
||||||
).also { sentMessage ->
|
).also { sentMessage ->
|
||||||
@ -146,7 +147,7 @@ object Plugin : Plugin {
|
|||||||
|
|
||||||
onMessageDataCallbackQuery (
|
onMessageDataCallbackQuery (
|
||||||
initialFilter = {
|
initialFilter = {
|
||||||
it.data.startsWith(PanelButtonsAPI.openGlobalMenuDataPrefix) && it.message.chat.id == chatsConfig.sourceChatId
|
it.data.startsWith(PanelButtonsAPI.openGlobalMenuDataPrefix) && it.message.chat.id in chatsConfig.allSourceChatIds
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
val postId = it.data.removePrefix(PanelButtonsAPI.openGlobalMenuDataPrefix).let(::PostId)
|
val postId = it.data.removePrefix(PanelButtonsAPI.openGlobalMenuDataPrefix).let(::PostId)
|
||||||
@ -155,7 +156,7 @@ object Plugin : Plugin {
|
|||||||
}
|
}
|
||||||
onMessageDataCallbackQuery(
|
onMessageDataCallbackQuery(
|
||||||
initialFilter = {
|
initialFilter = {
|
||||||
it.data.startsWith("delete ") && it.message.chat.id == chatsConfig.sourceChatId
|
it.data.startsWith("delete ") && it.message.chat.id in chatsConfig.allSourceChatIds
|
||||||
}
|
}
|
||||||
) { query ->
|
) { query ->
|
||||||
val postId = query.data.removePrefix("delete ").let(::PostId)
|
val postId = query.data.removePrefix("delete ").let(::PostId)
|
||||||
@ -182,7 +183,7 @@ object Plugin : Plugin {
|
|||||||
}
|
}
|
||||||
onMessageDataCallbackQuery(
|
onMessageDataCallbackQuery(
|
||||||
initialFilter = {
|
initialFilter = {
|
||||||
it.data.startsWith("refresh ") && it.message.chat.id == chatsConfig.sourceChatId
|
it.data.startsWith("refresh ") && it.message.chat.id in chatsConfig.allSourceChatIds
|
||||||
}
|
}
|
||||||
) { query ->
|
) { query ->
|
||||||
val postId = query.data.removePrefix("refresh ").let(::PostId)
|
val postId = query.data.removePrefix("refresh ").let(::PostId)
|
||||||
|
@ -58,7 +58,7 @@ object Plugin : Plugin {
|
|||||||
}
|
}
|
||||||
single {
|
single {
|
||||||
val config = get<Config>()
|
val config = get<Config>()
|
||||||
PostPublisher(get(), get(), config.chats.cacheChatId, config.chats.allTargetChatIds, config.deleteAfterPublishing)
|
PostPublisher(get(), get(), config.chats.cacheChatId, config.chats.allTargetChatIds.toList(), config.deleteAfterPublishing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,12 +119,12 @@ object Plugin : Plugin {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
onCommand("start_post", initialFilter = { it.sameChat(config.sourceChatId) }) {
|
onCommand("start_post", initialFilter = { config.allSourceChatIds.any { chatId -> it.sameChat(chatId) } }) {
|
||||||
startChain(RegistrationState.InProcess(it.chat.id, emptyList()))
|
startChain(RegistrationState.InProcess(it.chat.id, emptyList()))
|
||||||
}
|
}
|
||||||
|
|
||||||
onContentMessage(
|
onContentMessage(
|
||||||
initialFilter = { it.sameChat(config.sourceChatId) && !FirstSourceIsCommandsFilter(it) }
|
initialFilter = { config.allSourceChatIds.any { chatId -> it.sameChat(chatId) } && !FirstSourceIsCommandsFilter(it) }
|
||||||
) {
|
) {
|
||||||
startChain(RegistrationState.Finish(it.chat.id, PostContentInfo.fromMessage(it)))
|
startChain(RegistrationState.Finish(it.chat.id, PostContentInfo.fromMessage(it)))
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ import dev.inmo.tgbotapi.extensions.utils.extensions.sameMessage
|
|||||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.dataButton
|
import dev.inmo.tgbotapi.extensions.utils.types.buttons.dataButton
|
||||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.flatInlineKeyboard
|
import dev.inmo.tgbotapi.extensions.utils.types.buttons.flatInlineKeyboard
|
||||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard
|
import dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard
|
||||||
|
import dev.inmo.tgbotapi.types.ReplyParameters
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
|
||||||
import dev.inmo.tgbotapi.types.message.textsources.bold
|
import dev.inmo.tgbotapi.types.message.textsources.bold
|
||||||
import dev.inmo.tgbotapi.types.message.textsources.regular
|
import dev.inmo.tgbotapi.types.message.textsources.regular
|
||||||
@ -129,7 +130,7 @@ object Plugin : Plugin {
|
|||||||
content.chatId,
|
content.chatId,
|
||||||
config.ratingOfferText,
|
config.ratingOfferText,
|
||||||
config.variants.keys.toList(),
|
config.variants.keys.toList(),
|
||||||
replyToMessageId = content.messageId
|
replyParameters = ReplyParameters(content.chatId, content.messageId)
|
||||||
)
|
)
|
||||||
pollsToPostsIdsRepo.set(sent.content.poll.id, postId)
|
pollsToPostsIdsRepo.set(sent.content.poll.id, postId)
|
||||||
pollsToMessageInfoRepo.set(sent.content.poll.id, sent.short())
|
pollsToMessageInfoRepo.set(sent.content.poll.id, sent.short())
|
||||||
@ -242,7 +243,7 @@ object Plugin : Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
onCommand("ratings", requireOnlyCommandInMessage = true) {
|
onCommand("ratings", requireOnlyCommandInMessage = true) {
|
||||||
if (it.chat.id == chatConfig.sourceChatId) {
|
if (it.chat.id in chatConfig.allSourceChatIds) {
|
||||||
val ratings = ratingsRepo.postsByRatings().toList().sortedByDescending { it.first }
|
val ratings = ratingsRepo.postsByRatings().toList().sortedByDescending { it.first }
|
||||||
val textSources = buildEntities {
|
val textSources = buildEntities {
|
||||||
+ "Ratings amount: " + bold("${ratings.sumOf { it.second.size }}") + "\n\n"
|
+ "Ratings amount: " + bold("${ratings.sumOf { it.second.size }}") + "\n\n"
|
||||||
@ -260,8 +261,8 @@ object Plugin : Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
includeRootNavigationButtonsHandler(setOf(chatConfig.sourceChatId), ratingsRepo, postsRepo)
|
includeRootNavigationButtonsHandler(chatConfig.allSourceChatIds, ratingsRepo, postsRepo)
|
||||||
onMessageDataCallbackQuery("ratings_interactive", initialFilter = { it.message.chat.id == chatConfig.sourceChatId }) {
|
onMessageDataCallbackQuery("ratings_interactive", initialFilter = { it.message.chat.id in chatConfig.allSourceChatIds }) {
|
||||||
edit(
|
edit(
|
||||||
it.message,
|
it.message,
|
||||||
ratingsRepo.buildRootButtons()
|
ratingsRepo.buildRootButtons()
|
||||||
|
@ -151,7 +151,7 @@ object Plugin : Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onCommand("autoschedule_panel", initialFilter = { it.sameChat(chatConfig.sourceChatId) }) {
|
onCommand("autoschedule_panel", initialFilter = { chatConfig.allSourceChatIds.any { chatId -> it.sameChat(chatId) } }) {
|
||||||
val keyboard = buildPage()
|
val keyboard = buildPage()
|
||||||
|
|
||||||
runCatchingSafely {
|
runCatchingSafely {
|
||||||
@ -167,7 +167,7 @@ object Plugin : Plugin {
|
|||||||
|
|
||||||
onMessageDataCallbackQuery(
|
onMessageDataCallbackQuery(
|
||||||
Regex("^$pageCallbackDataQueryPrefix\\d+"),
|
Regex("^$pageCallbackDataQueryPrefix\\d+"),
|
||||||
initialFilter = { it.message.sameChat(chatConfig.sourceChatId) }
|
initialFilter = { chatConfig.allSourceChatIds.any { sourceChatId -> it.message.sameChat(sourceChatId) } }
|
||||||
) {
|
) {
|
||||||
val page = it.data.removePrefix(pageCallbackDataQueryPrefix).toIntOrNull() ?: let { _ ->
|
val page = it.data.removePrefix(pageCallbackDataQueryPrefix).toIntOrNull() ?: let { _ ->
|
||||||
answer(it)
|
answer(it)
|
||||||
|
@ -7,6 +7,7 @@ import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
|||||||
import dev.inmo.micro_utils.repos.unset
|
import dev.inmo.micro_utils.repos.unset
|
||||||
import dev.inmo.plaguposter.posts.models.PostId
|
import dev.inmo.plaguposter.posts.models.PostId
|
||||||
import dev.inmo.plaguposter.posts.sending.PostPublisher
|
import dev.inmo.plaguposter.posts.sending.PostPublisher
|
||||||
|
import korlibs.time.millisecondsLong
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
|
Loading…
Reference in New Issue
Block a user