diff --git a/build.gradle.kts b/build.gradle.kts index 5b2caaa..2da3144 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,7 +33,7 @@ val ownerID = 372703841151614976L group = "net.moonleay.liljudd" version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_SHORT_SHA")}-prod" } ?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" } - ?: "2.6.8" + ?: "2.7.0" val kordver = "1.7.1-SNAPSHOT" val coroutinesver = "1.7.3" diff --git a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt b/src/main/kotlin/net/moonleay/lilJudd/Bot.kt index 8282212..4196213 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/Bot.kt @@ -113,6 +113,7 @@ object Bot { add(::SendPlannerExtension) add(::MatchExtension) add(::UpdateRolesExtension) + add(::RotationExtension) } this.presence { diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt index 298e943..f24a46f 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,11 +20,12 @@ package net.moonleay.lilJudd.data.api.splatoon3ink import net.moonleay.lilJudd.data.api.splatoon3ink.schedules.BankaraNode import net.moonleay.lilJudd.data.api.splatoon3ink.schedules.RegularNode +import net.moonleay.lilJudd.data.api.splatoon3ink.schedules.SalmonRunNode import net.moonleay.lilJudd.data.api.splatoon3ink.schedules.XNode import net.moonleay.lilJudd.util.TimeUtil object Splatoon3ApiDataGrabber { - private fun getRegularMode(timestamp: Long): RegularNode { + fun getRegularMode(timestamp: Long): RegularNode { Splatoon3Api.schedules!!.data.regularSchedules.nodes.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -35,7 +36,7 @@ object Splatoon3ApiDataGrabber { throw Exception("No current mode found") } - private fun getOpenMode(timestamp: Long): BankaraNode { + fun getOpenMode(timestamp: Long): BankaraNode { Splatoon3Api.schedules!!.data.bankaraSchedules.nodes.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -49,7 +50,7 @@ object Splatoon3ApiDataGrabber { throw Exception("No current mode found") } - private fun getXMode(timestamp: Long): XNode { + fun getXMode(timestamp: Long): XNode { Splatoon3Api.schedules!!.data.xSchedules.nodes.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -60,7 +61,7 @@ object Splatoon3ApiDataGrabber { throw Exception("No current mode found") } - private fun getSeriesMode(timestamp: Long): BankaraNode { + fun getSeriesMode(timestamp: Long): BankaraNode { Splatoon3Api.schedules!!.data.bankaraSchedules.nodes.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -74,6 +75,16 @@ object Splatoon3ApiDataGrabber { throw Exception("No current mode found") } + fun getSalmonRun(timestamp: Long): SalmonRunNode { + Splatoon3Api.schedules!!.data.coopGroupingSchedule.regularSchedules.nodes.map { modeData -> + val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") + val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + if (timestamp in startTime..endTime) { + return modeData + } + } + throw Exception("No current mode found") + } fun getRotationTime(timestamp: Long): String { val modeData = getRegularMode(timestamp) val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt index f6ff9f0..47b5890 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt @@ -25,5 +25,5 @@ import kotlinx.serialization.Serializable @Serializable data class BigRunSchedules( @SerialName("nodes") - val nodes: List + val nodes: List ) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/RegularSchedules.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/RegularSchedules.kt index 4b96d47..ab2ccd8 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/RegularSchedules.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/RegularSchedules.kt @@ -25,5 +25,5 @@ import kotlinx.serialization.Serializable @Serializable data class RegularSchedules( @SerialName("nodes") - val nodes: List + val nodes: List ) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunScheduleNode.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt similarity index 97% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunScheduleNode.kt rename to src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt index 583e7c4..85c4c8a 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/BigRunScheduleNode.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt @@ -23,7 +23,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class BigRunScheduleNode( +data class SalmonRunNode( @SerialName("endTime") val endTime: String, @SerialName("setting") diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/RotationExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/RotationExtension.kt new file mode 100644 index 0000000..9c458b5 --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/RotationExtension.kt @@ -0,0 +1,464 @@ +/* + * lilJudd + * Copyright (C) 2024 moonleay + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.moonleay.lilJudd.extensions + +import com.kotlindiscord.kord.extensions.commands.Arguments +import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.enumChoice +import com.kotlindiscord.kord.extensions.extensions.Extension +import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import dev.kord.common.Color +import dev.kord.rest.builder.message.embed +import kotlinx.datetime.Clock +import net.moonleay.lilJudd.data.api.splatoon3ink.Splatoon3ApiDataGrabber +import net.moonleay.lilJudd.extensions.component.SplatoonOnlineMode +import net.moonleay.lilJudd.util.TimeUtil + +class RotationExtension : Extension() { + + override val name = "rotation" + override val allowApplicationCommandInDMs: Boolean + get() = false + + + override suspend fun setup() { + publicSlashCommand(::RotationArguments) { + name = "rotation" + description = "Check the current rotations" + this.action { + val mode = this.arguments.mode + when (mode) { + SplatoonOnlineMode.ALL -> { + val regSched = Splatoon3ApiDataGrabber.getRegularMode(System.currentTimeMillis()) + val regMaps = regSched.regularMatchSetting.vsStages + val regMap1 = regMaps[0] + val regMap2 = regMaps[1] + + val serSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val serMaps = serSched.bankaraMatchSettings!!.first().vsStages + val serMap1 = serMaps[0] + val serMap2 = serMaps[1] + + val opnSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val opnMaps = opnSched.bankaraMatchSettings!!.last().vsStages + val opnMap1 = opnMaps[0] + val opnMap2 = opnMaps[1] + + val xSched = Splatoon3ApiDataGrabber.getXMode(System.currentTimeMillis()) + val xMaps = xSched.xMatchSetting.vsStages + val xMap1 = xMaps[0] + val xMap2 = xMaps[1] + + val salSched = Splatoon3ApiDataGrabber.getSalmonRun(System.currentTimeMillis()) + val salMap = salSched.setting.coopStage.name + val salBoss = salSched.setting.boss.name + val salWeapons = salSched.setting.weapons + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "All Modes" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0x1437FF) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/deepcut.png" + } + + this.field { + this.name = "Regular (${ + TimeUtil.getTimeFromJSONTime( + regSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(regSched.endTime, "UTC")})" + this.value = + "${regSched.regularMatchSetting.vsRule.name} on ${regMap1.name} & ${regMap2.name}" + this.inline = false + } + + this.field { + this.name = "Series (${ + TimeUtil.getTimeFromJSONTime( + serSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(serSched.endTime, "UTC")})" + this.value = + "${serSched.bankaraMatchSettings.first().vsRule.name} on ${serMap1.name} & ${serMap2.name}" + this.inline = false + } + + this.field { + this.name = "Open (${ + TimeUtil.getTimeFromJSONTime( + opnSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(opnSched.endTime, "UTC")})" + this.value = + "${opnSched.bankaraMatchSettings.last().vsRule.name} on ${opnMap1.name} & ${opnMap2.name}" + this.inline = false + } + + this.field { + this.name = "X (${ + TimeUtil.getTimeFromJSONTime( + xSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(xSched.endTime, "UTC")})" + this.value = "${xSched.xMatchSetting.vsRule.name} on ${xMap1.name} & ${xMap2.name}" + this.inline = false + } + + this.field { + this.name = "Salmon Run (${ + TimeUtil.getTimeFromJSONTimeLong( + salSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTimeLong(salSched.endTime, "UTC")})" + this.value = + "${salBoss} on ${salMap} with ${salWeapons[0].name}, ${salWeapons[1].name}, ${salWeapons[2].name} & ${salWeapons[3].name}" + this.inline = false + } + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.REGULAR -> { + val regSched = Splatoon3ApiDataGrabber.getRegularMode(System.currentTimeMillis()) + val regMaps = regSched.regularMatchSetting.vsStages + val regMap1 = regMaps[0] + val regMap2 = regMaps[1] + + val regSched2 = + Splatoon3ApiDataGrabber.getRegularMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val regMaps2 = regSched2.regularMatchSetting.vsStages + val regMap12 = regMaps2[0] + val regMap22 = regMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Regular Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0x18c81b) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/regular.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + regSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(regSched.endTime, "UTC")})" + this.value = + "${regSched.regularMatchSetting.vsRule.name} on ${regMap1.name} & ${regMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + regSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(regSched2.endTime, "UTC")}" + this.value = + "${regSched2.regularMatchSetting.vsRule.name} on ${regMap12.name} & ${regMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.SERIES -> { + val serSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val serMaps = serSched.bankaraMatchSettings!!.first().vsStages + val serMap1 = serMaps[0] + val serMap2 = serMaps[1] + + val serSched2 = + Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val serMaps2 = serSched2.bankaraMatchSettings!!.first().vsStages + val serMap12 = serMaps2[0] + val serMap22 = serMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Ranked Series Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0xE14412) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/bankara.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + serSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(serSched.endTime, "UTC")})" + this.value = + "${serSched.bankaraMatchSettings.first().vsRule.name} on ${serMap1.name} & ${serMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + serSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(serSched2.endTime, "UTC")}" + this.value = + "${serSched2.bankaraMatchSettings.first().vsRule.name} on ${serMap12.name} & ${serMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.OPEN -> { + val opnSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val opnMaps = opnSched.bankaraMatchSettings!!.last().vsStages + val opnMap1 = opnMaps[0] + val opnMap2 = opnMaps[1] + + val opnSched2 = + Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val opnMaps2 = opnSched2.bankaraMatchSettings!!.last().vsStages + val opnMap12 = opnMaps2[0] + val opnMap22 = opnMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Ranked Open Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0xE14412) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/bankara.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + opnSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(opnSched.endTime, "UTC")})" + this.value = + "${opnSched.bankaraMatchSettings.last().vsRule.name} on ${opnMap1.name} & ${opnMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + opnSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(opnSched2.endTime, "UTC")}" + this.value = + "${opnSched2.bankaraMatchSettings.last().vsRule.name} on ${opnMap12.name} & ${opnMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.X -> { + val xSched = Splatoon3ApiDataGrabber.getXMode(System.currentTimeMillis()) + val xMaps = xSched.xMatchSetting.vsStages + val xMap1 = xMaps[0] + val xMap2 = xMaps[1] + + val xSched2 = Splatoon3ApiDataGrabber.getXMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val xMaps2 = xSched2.xMatchSetting.vsStages + val xMap12 = xMaps2[0] + val xMap22 = xMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "X Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0x0ECB93) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/x.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + xSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(xSched.endTime, "UTC")})" + this.value = "${xSched.xMatchSetting.vsRule.name} on ${xMap1.name} & ${xMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + xSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(xSched2.endTime, "UTC")}" + this.value = + "${xSched2.xMatchSetting.vsRule.name} on ${xMap12.name} & ${xMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.SALMON_RUN -> { + val salSched = Splatoon3ApiDataGrabber.getSalmonRun(System.currentTimeMillis()) + val salMap = salSched.setting.coopStage.name + val salBoss = salSched.setting.boss.name + val salWeapons = salSched.setting.weapons + + val salSched2 = + Splatoon3ApiDataGrabber.getSalmonRun(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 2) + val salMap2 = salSched2.setting.coopStage.name + val salBoss2 = salSched2.setting.boss.name + val salWeapons2 = salSched2.setting.weapons + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Salmon Run" + this.description = "[[Open on website](https://splatoon3.ink/salmonrun)]" + this.color = Color(0xEA4F03) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/grizz.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTimeLong( + salSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTimeLong(salSched.endTime, "UTC")})" + this.value = + "${salBoss} on ${salMap} with ${salWeapons[0].name}, ${salWeapons[1].name}, ${salWeapons[2].name} & ${salWeapons[3].name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTimeLong( + salSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTimeLong(salSched2.endTime, "UTC")}" + this.value = + "${salBoss2} on ${salMap2} with ${salWeapons2[0].name}, ${salWeapons2[1].name}, ${salWeapons2[2].name} & ${salWeapons2[3].name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + } + } + } + } + } + } + } + + inner class RotationArguments : Arguments() { + + val mode by enumChoice { + this.name = "mode" + this.description = "The mode you want to check the rotation for" + this.typeName = "en_US" + } + } + +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/component/SplatoonOnlineMode.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/component/SplatoonOnlineMode.kt new file mode 100644 index 0000000..c6ae569 --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/component/SplatoonOnlineMode.kt @@ -0,0 +1,30 @@ +/* + * lilJudd + * Copyright (C) 2024 moonleay + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.moonleay.lilJudd.extensions.component + +import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum + +enum class SplatoonOnlineMode(override val readableName: String) : ChoiceEnum { + ALL("All Modes"), + REGULAR("Regular Battle"), + SERIES("Ranked Battle (Series)"), + OPEN("Ranked Battle (Open)"), + X("X Battle"), + SALMON_RUN("Salmon Run"), +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt b/src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt index 4aa8fb3..7fed538 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt @@ -30,7 +30,7 @@ object StatusUpdater : ICronjob { override val jobName: String get() = "StatusUpdater" override val jobIncoming: String - get() = "/10 * * * * * 0o *" //Every 5 seconds + get() = "/30 * * * * * 0o *" //Every 30 seconds override val jobType: CronjobType get() = CronjobType.INFINITE override val continueJob: Boolean diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt b/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt index dba203c..acf0da8 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -177,6 +177,24 @@ object TimeUtil { return ZonedDateTime.of(localDateTime, zoneId).toEpochSecond() * 1000 } + fun getTimeFromJSONTime(inp: String, zone: String): String { + // 2023-10-05T08:00:00Z + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") + val localDateTime = LocalDateTime.parse(inp, formatter) + val zoneId = ZoneId.of(zone) // TODO: Add the possibility to set your timezone + val returnFormat = DateTimeFormatter.ofPattern("HH:mm") + return ZonedDateTime.of(localDateTime, zoneId).format(returnFormat) + } + + fun getTimeFromJSONTimeLong(inp: String, zone: String): String { + // 2023-10-05T08:00:00Z + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") + val localDateTime = LocalDateTime.parse(inp, formatter) + val zoneId = ZoneId.of(zone) // TODO: Add the possibility to set your timezone + val returnFormat = DateTimeFormatter.ofPattern("dd'/'MM',' HH:mm") + return ZonedDateTime.of(localDateTime, zoneId).format(returnFormat) + } + fun getTimeDifferenceFormatted(start: Long, end: Long): String { val diff = end - start return getTimeFormatedShortend(diff, false)