mirror of
https://github.com/InsanusMokrassar/PlaguPoster.git
synced 2024-11-17 13:33:47 +00:00
fixes
This commit is contained in:
parent
74f3503413
commit
00803fa933
@ -15,6 +15,7 @@ dependencies {
|
|||||||
api project(":plaguposter.posts_registrar")
|
api project(":plaguposter.posts_registrar")
|
||||||
api project(":plaguposter.triggers.command")
|
api project(":plaguposter.triggers.command")
|
||||||
api project(":plaguposter.triggers.selector_with_timer")
|
api project(":plaguposter.triggers.selector_with_timer")
|
||||||
|
api project(":plaguposter.triggers.timer")
|
||||||
api project(":plaguposter.ratings")
|
api project(":plaguposter.ratings")
|
||||||
api project(":plaguposter.ratings.source")
|
api project(":plaguposter.ratings.source")
|
||||||
api project(":plaguposter.ratings.selector")
|
api project(":plaguposter.ratings.selector")
|
||||||
|
@ -6,42 +6,34 @@ import com.soywiz.klock.Month
|
|||||||
import com.soywiz.klock.Year
|
import com.soywiz.klock.Year
|
||||||
import dev.inmo.plaguposter.common.SuccessfulSymbol
|
import dev.inmo.plaguposter.common.SuccessfulSymbol
|
||||||
import dev.inmo.plaguposter.posts.models.PostId
|
import dev.inmo.plaguposter.posts.models.PostId
|
||||||
import dev.inmo.tgbotapi.extensions.api.answers.answer
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.edit.edit
|
import dev.inmo.tgbotapi.extensions.api.edit.edit
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onMessageDataCallbackQuery
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onMessageDataCallbackQuery
|
||||||
import dev.inmo.tgbotapi.extensions.utils.commonMessageOrNull
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.extensions.raw.reply_markup
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.ifCallbackDataInlineKeyboardButton
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.ifCommonMessage
|
|
||||||
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.extensions.utils.withContent
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||||
import dev.inmo.tgbotapi.types.queries.callback.MessageDataCallbackQuery
|
|
||||||
import dev.inmo.tgbotapi.utils.row
|
import dev.inmo.tgbotapi.utils.row
|
||||||
|
|
||||||
object ButtonsBuilder {
|
object ButtonsBuilder {
|
||||||
private const val changeHoursDataPrefix = "timer_hours"
|
private const val changeHoursDataPrefix = "timer_h"
|
||||||
private const val changeMinutesDataPrefix = "timer_minutes"
|
private const val changeMinutesDataPrefix = "timer_m"
|
||||||
private const val changeDayDataPrefix = "timer_day"
|
private const val changeDayDataPrefix = "timer_d"
|
||||||
private const val changeMonthDataPrefix = "timer_month"
|
private const val changeMonthDataPrefix = "timer_M"
|
||||||
private const val changeYearDataPrefix = "timer_year"
|
private const val changeYearDataPrefix = "timer_y"
|
||||||
private const val changeDateDataPrefix = "timer_set"
|
private const val changeDateDataPrefix = "timer_s"
|
||||||
|
|
||||||
private fun buildTimerButtons(
|
fun buildTimerButtons(
|
||||||
postId: PostId,
|
postId: PostId,
|
||||||
dateTime: DateTime
|
dateTime: DateTimeTz
|
||||||
) = flatInlineKeyboard {
|
) = flatInlineKeyboard {
|
||||||
val unixMillis = dateTime.unixMillisLong
|
val unixMillis = dateTime.utc.unixMillisLong
|
||||||
val local = dateTime.local
|
dataButton(dateTime.hours.toString(), "$changeHoursDataPrefix $postId $unixMillis")
|
||||||
dataButton(local.hours.toString(), "$changeHoursDataPrefix $postId $unixMillis")
|
dataButton(":${dateTime.minutes}", "$changeMinutesDataPrefix $postId $unixMillis")
|
||||||
dataButton(":${local.minutes}", "$changeMinutesDataPrefix $postId $unixMillis")
|
|
||||||
|
|
||||||
dataButton(local.dayOfMonth.toString(), "$changeDayDataPrefix $postId $unixMillis")
|
dataButton(dateTime.dayOfMonth.toString(), "$changeDayDataPrefix $postId $unixMillis")
|
||||||
dataButton(".${local.month1}", "$changeMonthDataPrefix $postId $unixMillis")
|
dataButton(".${dateTime.month1}", "$changeMonthDataPrefix $postId $unixMillis")
|
||||||
dataButton(".${local.yearInt}", "$changeYearDataPrefix $postId $unixMillis")
|
dataButton(".${dateTime.yearInt}", "$changeYearDataPrefix $postId $unixMillis")
|
||||||
|
|
||||||
dataButton(SuccessfulSymbol, "$changeDateDataPrefix $postId $unixMillis")
|
dataButton(SuccessfulSymbol, "$changeDateDataPrefix $postId $unixMillis")
|
||||||
}
|
}
|
||||||
@ -51,13 +43,14 @@ object ButtonsBuilder {
|
|||||||
prefix: String,
|
prefix: String,
|
||||||
postId: PostId,
|
postId: PostId,
|
||||||
values: Iterable<Int>,
|
values: Iterable<Int>,
|
||||||
dateConverter: (Int) -> DateTime
|
min: DateTime = DateTime.now(),
|
||||||
|
dateConverter: (Int) -> DateTimeTz
|
||||||
): InlineKeyboardMarkup {
|
): InlineKeyboardMarkup {
|
||||||
return inlineKeyboard {
|
return inlineKeyboard {
|
||||||
values.chunked(5).forEach {
|
values.chunked(5).forEach {
|
||||||
row {
|
row {
|
||||||
it.forEach {
|
it.forEach {
|
||||||
dataButton(it.toString(), "$prefix $postId ${dateConverter(it).unixMillisLong}")
|
dataButton(it.toString(), "$prefix $postId ${dateConverter(it).utc.unixMillisLong.coerceAtLeast(min.unixMillisLong)}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,21 +59,21 @@ object ButtonsBuilder {
|
|||||||
|
|
||||||
suspend fun buildStandardDataCallbackQuery(
|
suspend fun buildStandardDataCallbackQuery(
|
||||||
prefix: String,
|
prefix: String,
|
||||||
possibleValues: (DateTime) -> Iterable<Int>,
|
possibleValues: (DateTimeTz) -> Iterable<Int>,
|
||||||
dateTimeConverter: (Int, DateTime) -> DateTime
|
dateTimeConverter: (Int, DateTimeTz) -> DateTimeTz
|
||||||
) {
|
) {
|
||||||
val setPrefix = "${prefix}_set"
|
val setPrefix = "${prefix}s"
|
||||||
onMessageDataCallbackQuery(Regex("$prefix .+")) {
|
onMessageDataCallbackQuery(Regex("$prefix .+")) {
|
||||||
val (_, rawPostId, rawDateTimeMillis) = it.data.split(" ")
|
val (_, rawPostId, rawDateTimeMillis) = it.data.split(" ")
|
||||||
val currentMillis = rawDateTimeMillis.toLongOrNull() ?: return@onMessageDataCallbackQuery
|
val currentMillis = rawDateTimeMillis.toLongOrNull() ?: return@onMessageDataCallbackQuery
|
||||||
val currentDateTime = DateTime(currentMillis)
|
val currentDateTime = DateTime(currentMillis).local
|
||||||
|
|
||||||
edit (
|
edit (
|
||||||
it.message,
|
it.message,
|
||||||
replyMarkup = buildKeyboard(
|
replyMarkup = buildKeyboard(
|
||||||
setPrefix,
|
setPrefix,
|
||||||
PostId(rawPostId),
|
PostId(rawPostId),
|
||||||
possibleValues(DateTime(currentMillis))
|
possibleValues(currentDateTime)
|
||||||
) {
|
) {
|
||||||
dateTimeConverter(it, currentDateTime)
|
dateTimeConverter(it, currentDateTime)
|
||||||
}
|
}
|
||||||
@ -96,7 +89,7 @@ object ButtonsBuilder {
|
|||||||
it.message,
|
it.message,
|
||||||
buildTimerButtons(
|
buildTimerButtons(
|
||||||
PostId(rawPostId),
|
PostId(rawPostId),
|
||||||
currentDateTime
|
currentDateTime.local
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -108,64 +101,72 @@ object ButtonsBuilder {
|
|||||||
changeHoursDataPrefix,
|
changeHoursDataPrefix,
|
||||||
{
|
{
|
||||||
val now = DateTime.now().local
|
val now = DateTime.now().local
|
||||||
val local = it.local
|
|
||||||
|
|
||||||
if (now.dateEq(local)) {
|
if (now.dateEq(it)) {
|
||||||
now.hours .. 23
|
now.hours .. 23
|
||||||
} else {
|
} else {
|
||||||
0 .. 23
|
0 .. 23
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { newValue, oldDateTime ->
|
) { newValue, oldDateTime ->
|
||||||
oldDateTime.copyDayOfMonth(hours = newValue) // TODO::Fix issue in case of local and utc diff
|
DateTimeTz.local(
|
||||||
|
oldDateTime.local.copyDayOfMonth(hours = newValue),
|
||||||
|
oldDateTime.offset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildStandardDataCallbackQuery(
|
buildStandardDataCallbackQuery(
|
||||||
changeMinutesDataPrefix,
|
changeMinutesDataPrefix,
|
||||||
{
|
{
|
||||||
val now = DateTime.now().local
|
val now = DateTime.now().local
|
||||||
val local = it.local
|
|
||||||
|
|
||||||
if (now.dateEq(local)) {
|
if (now.dateEq(it) && now.hours >= it.hours) {
|
||||||
now.minutes .. 60
|
now.minutes until 60
|
||||||
} else {
|
} else {
|
||||||
0 .. 60
|
0 until 60
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { newValue, oldDateTime ->
|
) { newValue, oldDateTime ->
|
||||||
oldDateTime.copyDayOfMonth(minutes = newValue) // TODO::Fix issue in case of local and utc diff
|
DateTimeTz.local(
|
||||||
|
oldDateTime.local.copyDayOfMonth(minutes = newValue),
|
||||||
|
oldDateTime.offset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildStandardDataCallbackQuery(
|
buildStandardDataCallbackQuery(
|
||||||
changeDayDataPrefix,
|
changeDayDataPrefix,
|
||||||
{
|
{
|
||||||
val now = DateTime.now().local
|
val now = DateTime.now().local
|
||||||
val local = it.local
|
|
||||||
|
|
||||||
if (now.dateEq(local)) {
|
if (now.yearInt == it.yearInt && now.month0 == it.month0) {
|
||||||
now.dayOfMonth .. it.month.days(it.year)
|
now.dayOfMonth .. it.month.days(it.year)
|
||||||
} else {
|
} else {
|
||||||
1 .. it.month.days(it.year)
|
1 .. it.month.days(it.year)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { newValue, oldDateTime ->
|
) { newValue, oldDateTime ->
|
||||||
oldDateTime.copyDayOfMonth(dayOfMonth = newValue) // TODO::Fix issue in case of local and utc diff
|
DateTimeTz.local(
|
||||||
|
oldDateTime.local.copyDayOfMonth(dayOfMonth = newValue),
|
||||||
|
oldDateTime.offset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildStandardDataCallbackQuery(
|
buildStandardDataCallbackQuery(
|
||||||
changeMonthDataPrefix,
|
changeMonthDataPrefix,
|
||||||
{
|
{
|
||||||
val now = DateTime.now().local
|
val now = DateTime.now().local
|
||||||
val local = it.local
|
|
||||||
|
|
||||||
if (now.year == local.year) {
|
if (now.year == it.year) {
|
||||||
now.month1 .. 12
|
now.month1 .. 12
|
||||||
} else {
|
} else {
|
||||||
1 .. 12
|
1 .. 12
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { newValue, oldDateTime ->
|
) { newValue, oldDateTime ->
|
||||||
oldDateTime.copyDayOfMonth(month = Month(newValue)) // TODO::Fix issue in case of local and utc diff
|
DateTimeTz.local(
|
||||||
|
oldDateTime.local.copyDayOfMonth(month = Month(newValue)),
|
||||||
|
oldDateTime.offset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildStandardDataCallbackQuery(
|
buildStandardDataCallbackQuery(
|
||||||
@ -174,7 +175,10 @@ object ButtonsBuilder {
|
|||||||
(it.year.year .. (it.year.year + 5))
|
(it.year.year .. (it.year.year + 5))
|
||||||
}
|
}
|
||||||
) { newValue, oldDateTime ->
|
) { newValue, oldDateTime ->
|
||||||
oldDateTime.copyDayOfMonth(year = Year(newValue)) // TODO::Fix issue in case of local and utc diff
|
DateTimeTz.local(
|
||||||
|
oldDateTime.local.copyDayOfMonth(year = Year(newValue)),
|
||||||
|
oldDateTime.offset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,49 @@
|
|||||||
package dev.inmo.plaguposter.triggers.timer
|
package dev.inmo.plaguposter.triggers.timer
|
||||||
|
|
||||||
|
import com.soywiz.klock.DateTime
|
||||||
|
import dev.inmo.micro_utils.coroutines.runCatchingSafely
|
||||||
import dev.inmo.plagubot.Plugin
|
import dev.inmo.plagubot.Plugin
|
||||||
|
import dev.inmo.plaguposter.posts.repo.ReadPostsRepo
|
||||||
|
import dev.inmo.tgbotapi.extensions.api.edit.edit
|
||||||
|
import dev.inmo.tgbotapi.extensions.api.send.send
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
import org.jetbrains.exposed.sql.Database
|
import org.jetbrains.exposed.sql.Database
|
||||||
|
import org.koin.core.Koin
|
||||||
import org.koin.core.module.Module
|
import org.koin.core.module.Module
|
||||||
|
|
||||||
object Plugin : Plugin {
|
object Plugin : Plugin {
|
||||||
override fun Module.setupDI(database: Database, params: JsonObject) {
|
override fun Module.setupDI(database: Database, params: JsonObject) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) {
|
||||||
|
val postsRepo = koin.get<ReadPostsRepo>()
|
||||||
|
with(ButtonsBuilder) {
|
||||||
|
includeKeyboardHandling()
|
||||||
|
}
|
||||||
|
onCommand("test") {
|
||||||
|
val reply = it.replyTo ?: return@onCommand
|
||||||
|
val postId = postsRepo.getIdByChatAndMessage(
|
||||||
|
reply.chat.id,
|
||||||
|
reply.messageId
|
||||||
|
) ?: return@onCommand
|
||||||
|
val buttons = ButtonsBuilder.buildTimerButtons(
|
||||||
|
postId,
|
||||||
|
DateTime.nowLocal()
|
||||||
|
)
|
||||||
|
runCatchingSafely {
|
||||||
|
edit(
|
||||||
|
it,
|
||||||
|
buttons
|
||||||
|
)
|
||||||
|
}.onFailure { _ ->
|
||||||
|
send(
|
||||||
|
it.chat,
|
||||||
|
"Buttons",
|
||||||
|
replyMarkup = buttons
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user