Compare commits
6 commits
b65dadd42f
...
02b29da5fd
Author | SHA1 | Date | |
---|---|---|---|
02b29da5fd | |||
98cdbebf79 | |||
05b4dc39b5 | |||
58f2379f45 | |||
39917e4b5a | |||
97d4143cda |
10 changed files with 535 additions and 11 deletions
|
@ -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"
|
||||
|
|
|
@ -113,6 +113,7 @@ object Bot {
|
|||
add(::SendPlannerExtension)
|
||||
add(::MatchExtension)
|
||||
add(::UpdateRolesExtension)
|
||||
add(::RotationExtension)
|
||||
}
|
||||
|
||||
this.presence {
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -25,5 +25,5 @@ import kotlinx.serialization.Serializable
|
|||
@Serializable
|
||||
data class BigRunSchedules(
|
||||
@SerialName("nodes")
|
||||
val nodes: List<BigRunScheduleNode>
|
||||
val nodes: List<SalmonRunNode>
|
||||
)
|
||||
|
|
|
@ -25,5 +25,5 @@ import kotlinx.serialization.Serializable
|
|||
@Serializable
|
||||
data class RegularSchedules(
|
||||
@SerialName("nodes")
|
||||
val nodes: List<BigRunScheduleNode>
|
||||
val nodes: List<SalmonRunNode>
|
||||
)
|
||||
|
|
|
@ -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")
|
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<SplatoonOnlineMode> {
|
||||
this.name = "mode"
|
||||
this.description = "The mode you want to check the rotation for"
|
||||
this.typeName = "en_US"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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"),
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue