fix: added try-catch to Splatoon3Api, fixed Statusupdater

Signed-off-by: moonleay <contact@moonleay.net>
This commit is contained in:
moonleay 2023-12-07 08:58:16 +01:00
parent 94149e4272
commit 984bcabd0c
Signed by: moonleay
GPG key ID: 82667543CCD715FB
4 changed files with 357 additions and 301 deletions

View file

@ -32,11 +32,17 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.moonleay.lilJudd.buttons.component.EditButtonManager import net.moonleay.lilJudd.buttons.component.EditButtonManager
import net.moonleay.lilJudd.data.CredentialManager import net.moonleay.lilJudd.data.CredentialManager
import net.moonleay.lilJudd.data.api.Splatoon3ApiCache
import net.moonleay.lilJudd.data.api.type.ApiDataType
import net.moonleay.lilJudd.data.api.type.ApiRequestType
import net.moonleay.lilJudd.data.database.DB import net.moonleay.lilJudd.data.database.DB
import net.moonleay.lilJudd.extensions.* import net.moonleay.lilJudd.extensions.*
import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.lilJudd.features.AvailabilityManager
import net.moonleay.lilJudd.features.MatchManager import net.moonleay.lilJudd.features.MatchManager
import net.moonleay.lilJudd.features.TimeManager import net.moonleay.lilJudd.features.TimeManager
import net.moonleay.lilJudd.jobs.Splatoon3ApiScheduleUpdateScheduler
import net.moonleay.lilJudd.jobs.StatusUpdater
import net.moonleay.lilJudd.jobs.component.JobManager
import net.moonleay.lilJudd.util.EmbedColor import net.moonleay.lilJudd.util.EmbedColor
import net.moonleay.lilJudd.util.Logger import net.moonleay.lilJudd.util.Logger
import net.moonleay.lilJudd.util.MessageUtil import net.moonleay.lilJudd.util.MessageUtil
@ -158,12 +164,12 @@ object Bot {
AvailabilityManager.runThread() // Update Availabilities AvailabilityManager.runThread() // Update Availabilities
MatchManager.update() // Update Matches MatchManager.update() // Update Matches
// Make the bot update the status every 6 seconds // Make the bot update the status every 6 seconds
// JobManager.addJob(StatusUpdater) JobManager.addJob(StatusUpdater)
} }
// Update the Splatoon 3 api data and make sure it stays up-to-date // Update the Splatoon 3 api data and make sure it stays up-to-date
// Splatoon3ApiCache.updateData(ApiDataType.SCHEDULES, ApiRequestType.AUTOMATIC_CACHE_CREATION_AT_STARTUP) Splatoon3ApiCache.updateData(ApiDataType.SCHEDULES, ApiRequestType.AUTOMATIC_CACHE_CREATION_AT_STARTUP)
// JobManager.addJob(Splatoon3ApiScheduleUpdateScheduler) JobManager.addJob(Splatoon3ApiScheduleUpdateScheduler)
/* /*
Other caches will be added when implemented Other caches will be added when implemented
its not used yet in order to reduce load on the api, its not used yet in order to reduce load on the api,

View file

@ -192,17 +192,21 @@ object Splatoon3ApiCache {
Logger.out("Error getting coop data: $apiResponse") Logger.out("Error getting coop data: $apiResponse")
return return
} }
val json = Json.parseToJsonElement(apiResponse) try {
val data = json.jsonObject["data"]!!.jsonObject["coopResult"]!!.jsonObject["monthlyGear"]!!.jsonObject val json = Json.parseToJsonElement(apiResponse)
cachedCoopRewardsData = mutableListOf() val data = json.jsonObject["data"]!!.jsonObject["coopResult"]!!.jsonObject["monthlyGear"]!!.jsonObject
cachedCoopRewardsData.add( cachedCoopRewardsData = mutableListOf()
CoopGearData( cachedCoopRewardsData.add(
data["name"]!!.jsonPrimitive.content, CoopGearData(
Url(data["image"]!!.jsonObject["url"]!!.jsonPrimitive.content), data["name"]!!.jsonPrimitive.content,
data["__typename"]!!.jsonPrimitive.content Url(data["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
data["__typename"]!!.jsonPrimitive.content
)
) )
) Logger.out("Updated COOP data")
Logger.out("Updated COOP data") } catch (e: Exception) {
Logger.out("Error getting coop data: ${e.cause}")
}
} }
private fun updateScheduleCache(uag: String) { private fun updateScheduleCache(uag: String) {
@ -214,205 +218,236 @@ object Splatoon3ApiCache {
val json = Json.decodeFromString(apiResponse) as JsonObject val json = Json.decodeFromString(apiResponse) as JsonObject
val data = json["data"]!!.jsonObject val data = json["data"]!!.jsonObject
val mapList = data["vsStages"]!!.jsonObject["nodes"]!!.jsonArray try {
cachedMapData = mutableMapOf() val mapList = data["vsStages"]!!.jsonObject["nodes"]!!.jsonArray
mapList.forEach { cachedMapData = mutableMapOf()
val obj = it as JsonObject mapList.forEach {
val imageURL = Url(obj.jsonObject["originalImage"]!!.jsonObject["url"]!!.jsonPrimitive.content) val obj = it as JsonObject
val id = obj.jsonObject["vsStageId"]!!.jsonPrimitive.int val imageURL = Url(obj.jsonObject["originalImage"]!!.jsonObject["url"]!!.jsonPrimitive.content)
cachedMapData[id] = MapData( val id = obj.jsonObject["vsStageId"]!!.jsonPrimitive.int
id, cachedMapData[id] = MapData(
imageURL, id,
it.jsonObject["name"]!!.jsonPrimitive.content imageURL,
) it.jsonObject["name"]!!.jsonPrimitive.content
}
Logger.out("Updated maplist data")
val regularMatches = data["regularSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedRegularModeData = mutableListOf()
regularMatches.forEach {
val obj = it as JsonObject
val setting = obj["regularMatchSetting"]!!.jsonObject
cachedRegularModeData.add(
ModeData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
setting["__typename"]!!.jsonPrimitive.content,
cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
cachedMapData[setting["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
setting["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
setting["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
"TURF_WAR"
) )
) }
Logger.out("Updated maplist data")
} catch (e: Exception) {
Logger.out("Error getting maplist data: ${e.cause}")
} }
Logger.out("Updated Regular match data")
val compMatches = data["bankaraSchedules"]!!.jsonObject["nodes"]!!.jsonArray try {
cachedCompetitiveSeriesModeData = mutableListOf() val regularMatches = data["regularSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedCompetitiveOpenModeData = mutableListOf() cachedRegularModeData = mutableListOf()
compMatches.forEach { regularMatches.forEach {
val obj = it as JsonObject val obj = it as JsonObject
val setting = obj["bankaraMatchSettings"]!!.jsonArray val setting = obj["regularMatchSetting"]!!.jsonObject
setting.forEach { cachedRegularModeData.add(
val ob = it as JsonObject ModeData(
val mode = ob["bankaraMode"]!!.jsonPrimitive.content obj["startTime"]!!.jsonPrimitive.content,
if (mode == "CHALLENGE") { obj["endTime"]!!.jsonPrimitive.content,
cachedCompetitiveSeriesModeData.add( setting["__typename"]!!.jsonPrimitive.content,
ModeData( cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
obj["startTime"]!!.jsonPrimitive.content, cachedMapData[setting["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
obj["endTime"]!!.jsonPrimitive.content, setting["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
ob["__typename"]!!.jsonPrimitive.content, setting["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
cachedMapData[ob["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int], "TURF_WAR"
cachedMapData[ob["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
ob["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
ob["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
mode
)
) )
} else if (mode == "OPEN") { )
cachedCompetitiveOpenModeData.add( }
ModeData( Logger.out("Updated Regular match data")
obj["startTime"]!!.jsonPrimitive.content, } catch (e: Exception) {
obj["endTime"]!!.jsonPrimitive.content, Logger.out("Error getting regular match data: ${e.cause}")
ob["__typename"]!!.jsonPrimitive.content, }
cachedMapData[ob["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
cachedMapData[ob["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int], try {
ob["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content, val compMatches = data["bankaraSchedules"]!!.jsonObject["nodes"]!!.jsonArray
ob["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content, cachedCompetitiveSeriesModeData = mutableListOf()
mode cachedCompetitiveOpenModeData = mutableListOf()
compMatches.forEach {
val obj = it as JsonObject
val setting = obj["bankaraMatchSettings"]!!.jsonArray
setting.forEach {
val ob = it as JsonObject
val mode = ob["bankaraMode"]!!.jsonPrimitive.content
if (mode == "CHALLENGE") {
cachedCompetitiveSeriesModeData.add(
ModeData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
ob["__typename"]!!.jsonPrimitive.content,
cachedMapData[ob["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
cachedMapData[ob["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
ob["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
ob["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
mode
)
) )
) } else if (mode == "OPEN") {
cachedCompetitiveOpenModeData.add(
ModeData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
ob["__typename"]!!.jsonPrimitive.content,
cachedMapData[ob["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
cachedMapData[ob["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
ob["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
ob["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
mode
)
)
}
} }
} }
} Logger.out("Updated Competitive match data")
Logger.out("Updated Competitive match data")
val xMatches = data["xSchedules"]!!.jsonObject["nodes"]!!.jsonArray } catch (e: Exception) {
cachedXModeData = mutableListOf() Logger.out("Error getting competitive match data: ${e.cause}")
xMatches.forEach {
val obj = it as JsonObject
val setting = obj["xMatchSetting"]!!.jsonObject
cachedXModeData.add(
ModeData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
setting["__typename"]!!.jsonPrimitive.content,
cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
cachedMapData[setting["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
setting["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
setting["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
"X"
)
)
} }
Logger.out("Updated X match data") try {
val xMatches = data["xSchedules"]!!.jsonObject["nodes"]!!.jsonArray
val challengeData = data["eventSchedules"]!!.jsonObject["nodes"]!!.jsonArray cachedXModeData = mutableListOf()
cachedChallengesData = mutableListOf() xMatches.forEach {
challengeData.forEach { val obj = it as JsonObject
val obj = it as JsonObject val setting = obj["xMatchSetting"]!!.jsonObject
val tpd = obj["timePeriods"]!!.jsonArray cachedXModeData.add(
val setting = obj["leagueMatchSetting"]!!.jsonObject ModeData(
val event = setting["leagueMatchEvent"]!!.jsonObject obj["startTime"]!!.jsonPrimitive.content,
cachedChallengesData.add( obj["endTime"]!!.jsonPrimitive.content,
ChallengeModeData( setting["__typename"]!!.jsonPrimitive.content,
event["leagueMatchEventId"]!!.jsonPrimitive.content, cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
event["name"]!!.jsonPrimitive.content, cachedMapData[setting["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
event["desc"]!!.jsonPrimitive.content, setting["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
event["regulation"]!!.jsonPrimitive.content, setting["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int], "X"
cachedMapData[setting["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
setting["__typename"]!!.jsonPrimitive.content,
setting["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
setting["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
TimePeriodData(
tpd[0].jsonObject["startTime"]!!.jsonPrimitive.content,
tpd[0].jsonObject["endTime"]!!.jsonPrimitive.content
),
TimePeriodData(
tpd[1].jsonObject["startTime"]!!.jsonPrimitive.content,
tpd[1].jsonObject["endTime"]!!.jsonPrimitive.content
),
TimePeriodData(
tpd[2].jsonObject["startTime"]!!.jsonPrimitive.content,
tpd[2].jsonObject["endTime"]!!.jsonPrimitive.content
) )
) )
) }
} Logger.out("Updated X match data")
Logger.out("Updated Challenge data") } catch (e: Exception) {
Logger.out("Error getting X match data: ${e.cause}")
val shiftData = data["coopGroupingSchedule"]!!.jsonObject["regularSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedShiftData = mutableListOf()
shiftData.forEach {
val obj = it as JsonObject
val setting = obj["setting"]!!.jsonObject
val stage = setting["coopStage"]!!.jsonObject
val weapons = setting["weapons"]!!.jsonArray
cachedShiftData.add(
ShiftData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
obj["__splatoon3ink_king_salmonid_guess"]!!.jsonPrimitive.content,
setting["__typename"]!!.jsonPrimitive.content,
stage["name"]!!.jsonPrimitive.content,
Url(stage["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
WeaponData(
weapons[0].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[0].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[1].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[1].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[2].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[2].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[3].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[3].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
)
)
)
} }
val bigRunData = data["coopGroupingSchedule"]!!.jsonObject["bigRunSchedules"]!!.jsonObject["nodes"]!!.jsonArray try {
cachedBigRunShiftData = mutableListOf() val challengeData = data["eventSchedules"]!!.jsonObject["nodes"]!!.jsonArray
bigRunData.forEach { cachedChallengesData = mutableListOf()
val obj = it as JsonObject challengeData.forEach {
val setting = obj["setting"]!!.jsonObject val obj = it as JsonObject
val stage = setting["coopStage"]!!.jsonObject val tpd = obj["timePeriods"]!!.jsonArray
val weapons = setting["weapons"]!!.jsonArray val setting = obj["leagueMatchSetting"]!!.jsonObject
cachedBigRunShiftData.add( val event = setting["leagueMatchEvent"]!!.jsonObject
ShiftData( cachedChallengesData.add(
obj["startTime"]!!.jsonPrimitive.content, ChallengeModeData(
obj["endTime"]!!.jsonPrimitive.content, event["leagueMatchEventId"]!!.jsonPrimitive.content,
obj["__splatoon3ink_king_salmonid_guess"]!!.jsonPrimitive.content, event["name"]!!.jsonPrimitive.content,
setting["__typename"]!!.jsonPrimitive.content, event["desc"]!!.jsonPrimitive.content,
stage["name"]!!.jsonPrimitive.content, event["regulation"]!!.jsonPrimitive.content,
Url(stage["image"]!!.jsonObject["url"]!!.jsonPrimitive.content), cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
WeaponData( cachedMapData[setting["vsStages"]!!.jsonArray[1].jsonObject["vsStageId"]!!.jsonPrimitive.int],
weapons[0].jsonObject["name"]!!.jsonPrimitive.content, setting["__typename"]!!.jsonPrimitive.content,
Url(weapons[0].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) setting["vsRule"]!!.jsonObject["rule"]!!.jsonPrimitive.content,
), setting["vsRule"]!!.jsonObject["name"]!!.jsonPrimitive.content,
WeaponData( TimePeriodData(
weapons[1].jsonObject["name"]!!.jsonPrimitive.content, tpd[0].jsonObject["startTime"]!!.jsonPrimitive.content,
Url(weapons[1].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) tpd[0].jsonObject["endTime"]!!.jsonPrimitive.content
), ),
WeaponData( TimePeriodData(
weapons[2].jsonObject["name"]!!.jsonPrimitive.content, tpd[1].jsonObject["startTime"]!!.jsonPrimitive.content,
Url(weapons[2].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) tpd[1].jsonObject["endTime"]!!.jsonPrimitive.content
), ),
WeaponData( TimePeriodData(
weapons[3].jsonObject["name"]!!.jsonPrimitive.content, tpd[2].jsonObject["startTime"]!!.jsonPrimitive.content,
Url(weapons[3].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) tpd[2].jsonObject["endTime"]!!.jsonPrimitive.content
)
) )
) )
) }
Logger.out("Updated Challenge data")
} catch (e: Exception) {
Logger.out("Error getting Challenge data: ${e.cause}")
}
try {
val shiftData =
data["coopGroupingSchedule"]!!.jsonObject["regularSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedShiftData = mutableListOf()
shiftData.forEach {
val obj = it as JsonObject
val setting = obj["setting"]!!.jsonObject
val stage = setting["coopStage"]!!.jsonObject
val weapons = setting["weapons"]!!.jsonArray
cachedShiftData.add(
ShiftData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
obj["__splatoon3ink_king_salmonid_guess"]!!.jsonPrimitive.content,
setting["__typename"]!!.jsonPrimitive.content,
stage["name"]!!.jsonPrimitive.content,
Url(stage["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
WeaponData(
weapons[0].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[0].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[1].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[1].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[2].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[2].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[3].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[3].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
)
)
)
}
Logger.out("Updated shift data")
} catch (e: Exception) {
Logger.out("Error getting coopGrouping data: ${e.cause}")
}
try {
val bigRunData =
data["coopGroupingSchedule"]!!.jsonObject["bigRunSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedBigRunShiftData = mutableListOf()
bigRunData.forEach {
val obj = it as JsonObject
val setting = obj["setting"]!!.jsonObject
val stage = setting["coopStage"]!!.jsonObject
val weapons = setting["weapons"]!!.jsonArray
cachedBigRunShiftData.add(
ShiftData(
obj["startTime"]!!.jsonPrimitive.content,
obj["endTime"]!!.jsonPrimitive.content,
obj["__splatoon3ink_king_salmonid_guess"]!!.jsonPrimitive.content,
setting["__typename"]!!.jsonPrimitive.content,
stage["name"]!!.jsonPrimitive.content,
Url(stage["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
WeaponData(
weapons[0].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[0].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[1].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[1].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[2].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[2].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
WeaponData(
weapons[3].jsonObject["name"]!!.jsonPrimitive.content,
Url(weapons[3].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
)
)
)
}
Logger.out("Updated big run data")
} catch (e: Exception) {
Logger.out("Error getting big run data: ${e.cause}")
} }
Logger.out("Updated big run data")
Logger.out("Updated all Schedules") Logger.out("Updated all Schedules")
} }
@ -423,113 +458,118 @@ object Splatoon3ApiCache {
Logger.out("Error getting splatfest data: $apiResponse") Logger.out("Error getting splatfest data: $apiResponse")
return return
} }
val json = Json.decodeFromString(apiResponse) as JsonObject try {
val festivals = json["US"]!!.jsonObject["data"]!!.jsonObject["festRecords"]!!.jsonObject["nodes"]!!.jsonArray val json = Json.decodeFromString(apiResponse) as JsonObject
cachedSplatfestData = mutableListOf() val festivals =
festivals.forEach { json["US"]!!.jsonObject["data"]!!.jsonObject["festRecords"]!!.jsonObject["nodes"]!!.jsonArray
val fest = it as JsonObject cachedSplatfestData = mutableListOf()
val teams = fest.jsonObject["teams"]!!.jsonArray festivals.forEach {
val team1 = teams[0].jsonObject val fest = it as JsonObject
val team1Color = team1["color"]!!.jsonObject val teams = fest.jsonObject["teams"]!!.jsonArray
var team1Result: JsonObject? = null val team1 = teams[0].jsonObject
if (team1["result"] !is JsonNull) { val team1Color = team1["color"]!!.jsonObject
team1Result = team1["result"]!!.jsonObject var team1Result: JsonObject? = null
} if (team1["result"] !is JsonNull) {
val team2 = teams[1].jsonObject team1Result = team1["result"]!!.jsonObject
val team2Color = team2["color"]!!.jsonObject }
var team2Result: JsonObject? = null val team2 = teams[1].jsonObject
if (team2["result"] !is JsonNull) { val team2Color = team2["color"]!!.jsonObject
team2Result = team2["result"]!!.jsonObject var team2Result: JsonObject? = null
} if (team2["result"] !is JsonNull) {
val team3 = teams[2].jsonObject team2Result = team2["result"]!!.jsonObject
val team3Color = team3["color"]!!.jsonObject }
var team3Result: JsonObject? = null val team3 = teams[2].jsonObject
if (team3["result"] !is JsonNull) { val team3Color = team3["color"]!!.jsonObject
team3Result = team3["result"]!!.jsonObject var team3Result: JsonObject? = null
} if (team3["result"] !is JsonNull) {
cachedSplatfestData.add( team3Result = team3["result"]!!.jsonObject
SplatfestData( }
fest.jsonObject["id"]!!.jsonPrimitive.content, cachedSplatfestData.add(
fest.jsonObject["state"]!!.jsonPrimitive.content, SplatfestData(
fest.jsonObject["startTime"]!!.jsonPrimitive.content, fest.jsonObject["id"]!!.jsonPrimitive.content,
fest.jsonObject["endTime"]!!.jsonPrimitive.content, fest.jsonObject["state"]!!.jsonPrimitive.content,
fest.jsonObject["title"]!!.jsonPrimitive.content, fest.jsonObject["startTime"]!!.jsonPrimitive.content,
Url(fest.jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content), fest.jsonObject["endTime"]!!.jsonPrimitive.content,
SplatfestTeamData( fest.jsonObject["title"]!!.jsonPrimitive.content,
team1["teamName"]!!.jsonPrimitive.content, Url(fest.jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
SplatfestColor( SplatfestTeamData(
team1Color["a"]!!.jsonPrimitive.int, team1["teamName"]!!.jsonPrimitive.content,
team1Color["b"]!!.jsonPrimitive.double, SplatfestColor(
team1Color["g"]!!.jsonPrimitive.double, team1Color["a"]!!.jsonPrimitive.int,
team1Color["r"]!!.jsonPrimitive.double team1Color["b"]!!.jsonPrimitive.double,
team1Color["g"]!!.jsonPrimitive.double,
team1Color["r"]!!.jsonPrimitive.double
),
if (team1Result.isNullOrEmpty() || team1Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null)
null
else SplatfestTeamResults(
team1Result["isWinner"]!!.jsonPrimitive.boolean,
team1Result["horagaiRatio"]!!.jsonPrimitive.double,
team1Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean,
team1Result["voteRatio"]!!.jsonPrimitive.double,
team1Result["isVoteRatioTop"]!!.jsonPrimitive.boolean,
team1Result["regularContributionRatio"]!!.jsonPrimitive.double,
team1Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean,
team1Result["challengeContributionRatio"]!!.jsonPrimitive.double,
team1Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean,
team1Result["tricolorContributionRatio"]!!.jsonPrimitive.double,
team1Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean,
)
), ),
if (team1Result.isNullOrEmpty() || team1Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null) SplatfestTeamData(
null team2["teamName"]!!.jsonPrimitive.content,
else SplatfestTeamResults( SplatfestColor(
team1Result["isWinner"]!!.jsonPrimitive.boolean, team2Color["a"]!!.jsonPrimitive.int,
team1Result["horagaiRatio"]!!.jsonPrimitive.double, team2Color["b"]!!.jsonPrimitive.double,
team1Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean, team2Color["g"]!!.jsonPrimitive.double,
team1Result["voteRatio"]!!.jsonPrimitive.double, team2Color["r"]!!.jsonPrimitive.double
team1Result["isVoteRatioTop"]!!.jsonPrimitive.boolean, ),
team1Result["regularContributionRatio"]!!.jsonPrimitive.double, if (team2Result.isNullOrEmpty() || team2Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null)
team1Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean, null
team1Result["challengeContributionRatio"]!!.jsonPrimitive.double, else SplatfestTeamResults(
team1Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean, team2Result["isWinner"]!!.jsonPrimitive.boolean,
team1Result["tricolorContributionRatio"]!!.jsonPrimitive.double, team2Result["horagaiRatio"]!!.jsonPrimitive.double,
team1Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean, team2Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean,
) team2Result["voteRatio"]!!.jsonPrimitive.double,
), team2Result["isVoteRatioTop"]!!.jsonPrimitive.boolean,
SplatfestTeamData( team2Result["regularContributionRatio"]!!.jsonPrimitive.double,
team2["teamName"]!!.jsonPrimitive.content, team2Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean,
SplatfestColor( team2Result["challengeContributionRatio"]!!.jsonPrimitive.double,
team2Color["a"]!!.jsonPrimitive.int, team2Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean,
team2Color["b"]!!.jsonPrimitive.double, team2Result["tricolorContributionRatio"]!!.jsonPrimitive.double,
team2Color["g"]!!.jsonPrimitive.double, team2Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean,
team2Color["r"]!!.jsonPrimitive.double )
), ),
if (team2Result.isNullOrEmpty() || team2Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null) SplatfestTeamData(
null team3["teamName"]!!.jsonPrimitive.content,
else SplatfestTeamResults( SplatfestColor(
team2Result["isWinner"]!!.jsonPrimitive.boolean, team3Color["a"]!!.jsonPrimitive.int,
team2Result["horagaiRatio"]!!.jsonPrimitive.double, team3Color["b"]!!.jsonPrimitive.double,
team2Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean, team3Color["g"]!!.jsonPrimitive.double,
team2Result["voteRatio"]!!.jsonPrimitive.double, team3Color["r"]!!.jsonPrimitive.double
team2Result["isVoteRatioTop"]!!.jsonPrimitive.boolean, ),
team2Result["regularContributionRatio"]!!.jsonPrimitive.double, if (team3Result.isNullOrEmpty() || team3Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null)
team2Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean, null
team2Result["challengeContributionRatio"]!!.jsonPrimitive.double, else SplatfestTeamResults(
team2Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean, team3Result["isWinner"]!!.jsonPrimitive.boolean,
team2Result["tricolorContributionRatio"]!!.jsonPrimitive.double, team3Result["horagaiRatio"]!!.jsonPrimitive.double,
team2Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean, team3Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean,
) team3Result["voteRatio"]!!.jsonPrimitive.double,
), team3Result["isVoteRatioTop"]!!.jsonPrimitive.boolean,
SplatfestTeamData( team3Result["regularContributionRatio"]!!.jsonPrimitive.double,
team3["teamName"]!!.jsonPrimitive.content, team3Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean,
SplatfestColor( team3Result["challengeContributionRatio"]!!.jsonPrimitive.double,
team3Color["a"]!!.jsonPrimitive.int, team3Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean,
team3Color["b"]!!.jsonPrimitive.double, team3Result["tricolorContributionRatio"]!!.jsonPrimitive.double,
team3Color["g"]!!.jsonPrimitive.double, team3Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean,
team3Color["r"]!!.jsonPrimitive.double )
), ),
if (team3Result.isNullOrEmpty() || team3Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null) )
null
else SplatfestTeamResults(
team3Result["isWinner"]!!.jsonPrimitive.boolean,
team3Result["horagaiRatio"]!!.jsonPrimitive.double,
team3Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean,
team3Result["voteRatio"]!!.jsonPrimitive.double,
team3Result["isVoteRatioTop"]!!.jsonPrimitive.boolean,
team3Result["regularContributionRatio"]!!.jsonPrimitive.double,
team3Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean,
team3Result["challengeContributionRatio"]!!.jsonPrimitive.double,
team3Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean,
team3Result["tricolorContributionRatio"]!!.jsonPrimitive.double,
team3Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean,
)
),
) )
) }
Logger.out("Updated Splatfest data")
} catch (e: Exception) {
Logger.out("Error getting splatfest data: ${e.cause}")
} }
Logger.out("Updated Splatfest data")
} }
} }

View file

@ -30,7 +30,7 @@ object StatusUpdater : ICronjob {
override val jobName: String override val jobName: String
get() = "StatusUpdater" get() = "StatusUpdater"
override val jobIncoming: String override val jobIncoming: String
get() = "/5 * * * * * 0o *" //Every 5 seconds get() = "/10 * * * * * 0o *" //Every 5 seconds
override val jobType: CronjobType override val jobType: CronjobType
get() = CronjobType.INFINITE get() = CronjobType.INFINITE
override val continueJob: Boolean override val continueJob: Boolean
@ -45,7 +45,7 @@ object StatusUpdater : ICronjob {
refreshStatusList(System.currentTimeMillis()) refreshStatusList(System.currentTimeMillis())
Bot.bot.kordRef.editPresence { Bot.bot.kordRef.editPresence {
this.status = PresenceStatus.DoNotDisturb this.status = PresenceStatus.DoNotDisturb
this.playing(statusList[index]) this.competing(statusList[index])
} }
++index ++index
if (index >= statusList.size) { if (index >= statusList.size) {

View file

@ -145,6 +145,16 @@ object TimeUtil {
.withMinute(0).withSecond(0) .withMinute(0).withSecond(0)
} }
fun validateDateString(input: String): Boolean {
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")
return try {
LocalDateTime.parse(input, formatter)
true
} catch (e: Exception) {
false
}
}
fun getDateFromString(input: String): ZonedDateTime { fun getDateFromString(input: String): ZonedDateTime {
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")
val localDateTime = LocalDateTime.parse(input, formatter) val localDateTime = LocalDateTime.parse(input, formatter)