add coloring of inline buttons

This commit is contained in:
2026-03-12 16:31:29 +06:00
parent 18180e67f6
commit 028f1f48e8
7 changed files with 36 additions and 12 deletions

View File

@@ -33,6 +33,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.flatInlineKeyboard
import dev.inmo.tgbotapi.types.MilliSeconds
import dev.inmo.tgbotapi.types.buttons.KeyboardButtonStyle
import dev.inmo.tgbotapi.utils.bold
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.filter
@@ -148,7 +149,7 @@ object Plugin : Plugin {
message,
text = "Are you sure want to trigger posts garbage collecting?",
replyMarkup = flatInlineKeyboard {
dataButton("Sure", yesData)
dataButton("Sure", yesData, style = KeyboardButtonStyle.Primary)
dataButton("No", noData)
}
)

View File

@@ -1,7 +1,9 @@
package dev.inmo.plaguposter.posts.panel
import com.benasher44.uuid.uuid4
import dev.inmo.micro_utils.coroutines.runCatchingLogging
import dev.inmo.micro_utils.coroutines.runCatchingSafely
import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
import dev.inmo.micro_utils.koin.getAllDistinct
import dev.inmo.micro_utils.repos.*
@@ -32,6 +34,7 @@ import dev.inmo.tgbotapi.types.MessageId
import dev.inmo.tgbotapi.types.ReplyParameters
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
import dev.inmo.tgbotapi.types.buttons.KeyboardButtonStyle
import dev.inmo.tgbotapi.types.message.ParseMode
import dev.inmo.tgbotapi.utils.bold
import dev.inmo.tgbotapi.utils.buildEntities
@@ -69,7 +72,8 @@ object Plugin : Plugin {
PanelButtonBuilder {
CallbackDataInlineKeyboardButton(
text,
"refresh ${it.id.string}"
"refresh ${it.id.string}",
style = KeyboardButtonStyle.Primary
)
}
}
@@ -97,7 +101,7 @@ object Plugin : Plugin {
basePostsMessages
}
postsRepo.newObjectsFlow.subscribeSafelyWithoutExceptions(this) {
postsRepo.newObjectsFlow.subscribeLoggingDropExceptions(this) {
val firstContent = it.content.first()
val buttons = api.buttonsBuilders.chunked(config.buttonsPerRow).mapNotNull { row ->
row.mapNotNull { builder ->
@@ -162,7 +166,7 @@ object Plugin : Plugin {
edit(
query.message,
replyMarkup = flatInlineKeyboard {
dataButton("\uD83D\uDDD1", approveData)
dataButton("\uD83D\uDDD1", approveData, style = KeyboardButtonStyle.Danger)
api.RootPanelButtonBuilder.buildButton(post) ?.let(::add)
}
)
@@ -184,7 +188,7 @@ object Plugin : Plugin {
val postId = query.data.removePrefix("refresh ").let(::PostId)
val (chatId, messageId) = postsMessages.get(postId) ?: return@onMessageDataCallbackQuery
runCatchingSafely {
runCatching {
refreshPostMessage(
postId,
chatId,

View File

@@ -22,6 +22,7 @@ import dev.inmo.tgbotapi.extensions.utils.extensions.sameChat
import dev.inmo.tgbotapi.extensions.utils.extensions.sameMessage
import dev.inmo.tgbotapi.extensions.utils.textContentOrNull
import dev.inmo.tgbotapi.extensions.utils.types.buttons.*
import dev.inmo.tgbotapi.types.buttons.KeyboardButtonStyle
import dev.inmo.tgbotapi.utils.regular
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.*
@@ -56,7 +57,8 @@ object Plugin : Plugin {
flatInlineKeyboard {
dataButton(
"Finish",
buttonUuid
buttonUuid,
style = KeyboardButtonStyle.Primary,
)
}
} else {

View File

@@ -43,6 +43,7 @@ import dev.inmo.tgbotapi.extensions.utils.types.buttons.flatInlineKeyboard
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.KeyboardButtonStyle
import dev.inmo.tgbotapi.types.message.textsources.boldTextSource
import dev.inmo.tgbotapi.types.message.textsources.regularTextSource
import dev.inmo.tgbotapi.types.polls.InputPollOption
@@ -67,7 +68,9 @@ object Plugin : Plugin {
val variants: RatingsVariants,
val autoAttach: Boolean,
val ratingOfferText: String,
val panelButtonText: String = "Ratings"
val panelButtonText: String = "Ratings",
val ratingEnabledStyle: KeyboardButtonStyle? = null,
val ratingDisabledStyle: KeyboardButtonStyle? = null
)
override fun Module.setupDI(params: JsonObject) {
@@ -296,13 +299,19 @@ object Plugin : Plugin {
panelApi ?.apply {
add(
PanelButtonBuilder {
val enabled = pollsToPostsIdsRepo.keys(it.id, firstPageWithOneElementPagination).results.any()
CallbackDataInlineKeyboardButton(
config.panelButtonText + if (pollsToPostsIdsRepo.keys(it.id, firstPageWithOneElementPagination).results.any()) {
config.panelButtonText + if (enabled) {
SuccessfulSymbol
} else {
UnsuccessfulSymbol
},
"toggle_ratings ${it.id.string}"
"toggle_ratings ${it.id.string}",
style = if (enabled) {
config.ratingEnabledStyle
} else {
config.ratingDisabledStyle
}
)
}
)

View File

@@ -41,7 +41,9 @@
"Results": 0
},
"autoAttach": true,
"ratingOfferText": "What do you think about it?"
"ratingOfferText": "What do you think about it?",
"ratingEnabledStyle": "success",
"ratingDisabledStyle": "danger"
},
"selector": {
"items": [

View File

@@ -113,7 +113,7 @@ object Plugin : Plugin {
PanelButtonBuilder {
CallbackDataInlineKeyboardButton(
text,
"publish ${it.id.string}"
"publish ${it.id.string}",
)
}
)

View File

@@ -6,6 +6,7 @@ import dev.inmo.plaguposter.posts.models.RegisteredPost
import dev.inmo.plaguposter.posts.panel.PanelButtonBuilder
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.InlineKeyboardButton
import dev.inmo.tgbotapi.types.buttons.KeyboardButtonStyle
class TimerPanelButton(
private val timersRepo: TimersRepo
@@ -18,7 +19,12 @@ class TimerPanelButton(
return CallbackDataInlineKeyboardButton(
"${ if (publishingTime == null) UnsuccessfulSymbol else SuccessfulSymbol }",
"$timerSetPrefix ${post.id}"
"$timerSetPrefix ${post.id}",
style = if (publishingTime == null) {
null
} else {
KeyboardButtonStyle.Success
}
)
}