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

View File

@@ -1,7 +1,9 @@
package dev.inmo.plaguposter.posts.panel package dev.inmo.plaguposter.posts.panel
import com.benasher44.uuid.uuid4 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.runCatchingSafely
import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
import dev.inmo.micro_utils.koin.getAllDistinct import dev.inmo.micro_utils.koin.getAllDistinct
import dev.inmo.micro_utils.repos.* 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.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.buttons.KeyboardButtonStyle
import dev.inmo.tgbotapi.types.message.ParseMode import dev.inmo.tgbotapi.types.message.ParseMode
import dev.inmo.tgbotapi.utils.bold import dev.inmo.tgbotapi.utils.bold
import dev.inmo.tgbotapi.utils.buildEntities import dev.inmo.tgbotapi.utils.buildEntities
@@ -69,7 +72,8 @@ object Plugin : Plugin {
PanelButtonBuilder { PanelButtonBuilder {
CallbackDataInlineKeyboardButton( CallbackDataInlineKeyboardButton(
text, text,
"refresh ${it.id.string}" "refresh ${it.id.string}",
style = KeyboardButtonStyle.Primary
) )
} }
} }
@@ -97,7 +101,7 @@ object Plugin : Plugin {
basePostsMessages basePostsMessages
} }
postsRepo.newObjectsFlow.subscribeSafelyWithoutExceptions(this) { postsRepo.newObjectsFlow.subscribeLoggingDropExceptions(this) {
val firstContent = it.content.first() val firstContent = it.content.first()
val buttons = api.buttonsBuilders.chunked(config.buttonsPerRow).mapNotNull { row -> val buttons = api.buttonsBuilders.chunked(config.buttonsPerRow).mapNotNull { row ->
row.mapNotNull { builder -> row.mapNotNull { builder ->
@@ -162,7 +166,7 @@ object Plugin : Plugin {
edit( edit(
query.message, query.message,
replyMarkup = flatInlineKeyboard { replyMarkup = flatInlineKeyboard {
dataButton("\uD83D\uDDD1", approveData) dataButton("\uD83D\uDDD1", approveData, style = KeyboardButtonStyle.Danger)
api.RootPanelButtonBuilder.buildButton(post) ?.let(::add) api.RootPanelButtonBuilder.buildButton(post) ?.let(::add)
} }
) )
@@ -184,7 +188,7 @@ object Plugin : Plugin {
val postId = query.data.removePrefix("refresh ").let(::PostId) val postId = query.data.removePrefix("refresh ").let(::PostId)
val (chatId, messageId) = postsMessages.get(postId) ?: return@onMessageDataCallbackQuery val (chatId, messageId) = postsMessages.get(postId) ?: return@onMessageDataCallbackQuery
runCatchingSafely { runCatching {
refreshPostMessage( refreshPostMessage(
postId, postId,
chatId, 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.extensions.sameMessage
import dev.inmo.tgbotapi.extensions.utils.textContentOrNull import dev.inmo.tgbotapi.extensions.utils.textContentOrNull
import dev.inmo.tgbotapi.extensions.utils.types.buttons.* import dev.inmo.tgbotapi.extensions.utils.types.buttons.*
import dev.inmo.tgbotapi.types.buttons.KeyboardButtonStyle
import dev.inmo.tgbotapi.utils.regular import dev.inmo.tgbotapi.utils.regular
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
@@ -56,7 +57,8 @@ object Plugin : Plugin {
flatInlineKeyboard { flatInlineKeyboard {
dataButton( dataButton(
"Finish", "Finish",
buttonUuid buttonUuid,
style = KeyboardButtonStyle.Primary,
) )
} }
} else { } 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.extensions.utils.types.buttons.inlineKeyboard
import dev.inmo.tgbotapi.types.ReplyParameters 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.KeyboardButtonStyle
import dev.inmo.tgbotapi.types.message.textsources.boldTextSource import dev.inmo.tgbotapi.types.message.textsources.boldTextSource
import dev.inmo.tgbotapi.types.message.textsources.regularTextSource import dev.inmo.tgbotapi.types.message.textsources.regularTextSource
import dev.inmo.tgbotapi.types.polls.InputPollOption import dev.inmo.tgbotapi.types.polls.InputPollOption
@@ -67,7 +68,9 @@ object Plugin : Plugin {
val variants: RatingsVariants, val variants: RatingsVariants,
val autoAttach: Boolean, val autoAttach: Boolean,
val ratingOfferText: String, 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) { override fun Module.setupDI(params: JsonObject) {
@@ -296,13 +299,19 @@ object Plugin : Plugin {
panelApi ?.apply { panelApi ?.apply {
add( add(
PanelButtonBuilder { PanelButtonBuilder {
val enabled = pollsToPostsIdsRepo.keys(it.id, firstPageWithOneElementPagination).results.any()
CallbackDataInlineKeyboardButton( CallbackDataInlineKeyboardButton(
config.panelButtonText + if (pollsToPostsIdsRepo.keys(it.id, firstPageWithOneElementPagination).results.any()) { config.panelButtonText + if (enabled) {
SuccessfulSymbol SuccessfulSymbol
} else { } else {
UnsuccessfulSymbol 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 "Results": 0
}, },
"autoAttach": true, "autoAttach": true,
"ratingOfferText": "What do you think about it?" "ratingOfferText": "What do you think about it?",
"ratingEnabledStyle": "success",
"ratingDisabledStyle": "danger"
}, },
"selector": { "selector": {
"items": [ "items": [

View File

@@ -113,7 +113,7 @@ object Plugin : Plugin {
PanelButtonBuilder { PanelButtonBuilder {
CallbackDataInlineKeyboardButton( CallbackDataInlineKeyboardButton(
text, 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.plaguposter.posts.panel.PanelButtonBuilder
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.InlineKeyboardButton import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.InlineKeyboardButton
import dev.inmo.tgbotapi.types.buttons.KeyboardButtonStyle
class TimerPanelButton( class TimerPanelButton(
private val timersRepo: TimersRepo private val timersRepo: TimersRepo
@@ -18,7 +19,12 @@ class TimerPanelButton(
return CallbackDataInlineKeyboardButton( return CallbackDataInlineKeyboardButton(
"${ if (publishingTime == null) UnsuccessfulSymbol else SuccessfulSymbol }", "${ if (publishingTime == null) UnsuccessfulSymbol else SuccessfulSymbol }",
"$timerSetPrefix ${post.id}" "$timerSetPrefix ${post.id}",
style = if (publishingTime == null) {
null
} else {
KeyboardButtonStyle.Success
}
) )
} }