Compare commits

..

32 commits

Author SHA1 Message Date
4b46d34f45
chore: improved logging further
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 2m54s
Signed-off-by: moonleay <contact@moonleay.net>
2024-02-13 20:07:50 +01:00
0cd3e4d6a8
fix: fixed issue with cloned embeds not implementing the footer correctly
Signed-off-by: moonleay <contact@moonleay.net>
2024-02-13 20:04:13 +01:00
a7e656bcbe
refactor: renamed ownerID to creatorID
Signed-off-by: moonleay <contact@moonleay.net>
2024-02-13 19:44:09 +01:00
404e043da1
chore: improved logging messages of features
Signed-off-by: moonleay <contact@moonleay.net>
2024-02-13 19:43:09 +01:00
c65e4031d9
chore: update copyright
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 2m55s
Signed-off-by: moonleay <contact@moonleay.net>
2024-02-13 19:24:48 +01:00
ab7016cdb3
feat: added little note at boot
Some checks failed
Build Gradle project / build-gradle-project (push) Failing after 15m48s
fix!: fixed compilation issues on Winblows (This resulted in a new base package.)

Signed-off-by: moonleay <contact@moonleay.net>
2024-02-13 18:47:24 +01:00
d928258028
Merge remote-tracking branch 'origin/master'
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 3m55s
2024-02-13 08:57:32 +01:00
8e1551cd6c
feat: added NewsManager, made bot dm news, when there are any at boot 2024-02-13 08:57:18 +01:00
4dceef6a1f feat!: (temp) dropped the Splatoon3ink api support
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 3m57s
2024-02-01 23:15:04 +01:00
906c41be88
feat: make the bot save a stacktrace, if an error occurs during a command or interaction
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 2m55s
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-31 13:47:14 +01:00
0f399cb58c
chore: bump version
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 2m43s
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-29 16:41:09 +01:00
95321b4895
fix: fixed schedules not being deserialized correctly
Some checks failed
Build Gradle project / build-gradle-project (push) Has been cancelled
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-29 16:40:38 +01:00
d0ae43e420
chore: updated README.md
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 2m53s
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-21 02:03:46 +01:00
46ee799760
fix: fixed ci pipeline 2024-01-21 02:03:37 +01:00
02b29da5fd
chore: bump version
Some checks failed
Build Gradle project / build-gradle-project (push) Failing after 0s
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 22:42:22 +01:00
98cdbebf79
feat: added RotationExtension
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 22:42:14 +01:00
05b4dc39b5
feat: added new JSON time getter
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 22:41:52 +01:00
58f2379f45
fix: make the StatusUpdater Run every 30 seconds instead of 10 to reduce the nr of status updates sent to Discord and avoid issues with updating the status
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 22:41:29 +01:00
39917e4b5a
feat: updated and improved DataGrabber methods
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 22:40:08 +01:00
97d4143cda
chore: fixed wrong class naming
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 22:39:43 +01:00
b65dadd42f
chore: code cleanup
Some checks are pending
Build Gradle project / build-gradle-project (push) Waiting to run
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-19 10:53:49 +01:00
38d61ae862
chore: upgraded dependencies
Some checks failed
Build Gradle project / build-gradle-project (push) Has been cancelled
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-18 18:49:53 +01:00
2182f8751a
chore: upgraded gradle to 8.5
Some checks are pending
Build Gradle project / build-gradle-project (push) Waiting to run
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-18 18:46:34 +01:00
894e03c9c6
feat!: updated rest of the code to use new API system
Some checks are pending
Build Gradle project / build-gradle-project (push) Waiting to run
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-18 18:35:17 +01:00
abd17b3256
chore!: removed unused updater cronjobs
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-18 18:34:53 +01:00
ec92cac2e7
feat!: completely rewrote API code to use KotlinXSerialization instead of pasing it manually (WTF was I thinking when I did that??)
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-18 18:34:11 +01:00
0f2410c7c1
chore: added KotlinxSerialization to project, bumped kotlin version
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-18 18:31:57 +01:00
734ac1b74c
WIP: started working on lilJuddApi implementation
Some checks failed
Build Gradle project / build-gradle-project (push) Has been cancelled
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-01 04:12:23 +01:00
e6803f6474
fix: finished removing useless paths from the refactor
Signed-off-by: moonleay <contact@moonleay.net>
2024-01-01 04:11:49 +01:00
f3b28ac392
refactor: splatoon3ink api
Signed-off-by: moonleay <contact@moonleay.net>
2023-12-31 22:02:59 +01:00
d8753a8c1f
fix: updated Error messages to better fit the HTTP standard
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 4m15s
Signed-off-by: moonleay <contact@moonleay.net>
2023-12-19 10:59:31 +01:00
c1536b259b
chore: bump version
All checks were successful
Build Gradle project / build-gradle-project (push) Successful in 4m22s
Signed-off-by: moonleay <contact@moonleay.net>
2023-12-19 10:37:39 +01:00
113 changed files with 2426 additions and 1247 deletions

View file

@ -5,12 +5,10 @@ on:
jobs: jobs:
build-gradle-project: build-gradle-project:
runs-on: ubuntu-latest runs-on: docker
steps: steps:
- name: apt update - name: apt update
run: apt update run: apt update
- name: apt upgrade
run: apt upgrade -y
- name: install prerequisits - name: install prerequisits
run: apt install openjdk-17-jdk ca-certificates-java ssl-cert openssl ca-certificates -y run: apt install openjdk-17-jdk ca-certificates-java ssl-cert openssl ca-certificates -y
- name: Checkout project sources - name: Checkout project sources

View file

@ -4,15 +4,13 @@
A Discord Bot for Splatoon Teams. A Discord Bot for Splatoon Teams.
More information can be found on the [Homepage](https://liljudd.ink).
## Contributors ## Contributors
[![Developer](https://img.shields.io/badge/moonleay-Developer-red)](https://gitlab.com/moonleay) [![Developer](https://img.shields.io/badge/moonleay-Developer-red)](https://gitlab.com/moonleay)
## Known issues ## Known issues
##### If you encounter any bugs, message me on Discord (@moonleay) or send me a mail (issues@moonleay.net). You can also open a ticket [on the support server](https://discord.gg/HTZRktfH4A). ##### If you encounter any bugs, message me on Discord (@moonleay) or email me (issues@moonleay.net). You can also open a ticket [on the support server](https://discord.gg/HTZRktfH4A).
## Commands & Features ## Commands & Features
@ -22,12 +20,13 @@ More information can be found on the [Homepage](https://liljudd.ink).
- match -- Create a new match - match -- Create a new match
- updateroles -- Update the roles of all users - updateroles -- Update the roles of all users
- sendplanner -- Send the planner message - sendplanner -- Send the planner message
- rotation -- See the current rotation
- Features - Features
- Time Planner -- Make the bot send messages and reactions into a selected channel in order to make planning easier - Time Planner -- Make the bot send messages and reactions into a selected channel in order to make planning easier
- Availability Manager -- Make the bot assign users roles every day, so it is possible to notify available people - Availability Manager -- Make the bot assign users roles every day, so it is possible to notify available people
- Match Planner -- Make a match, for which players can sign up and the bot will assign teams and roles to them - Match Planner -- Make a match, for which players can sign up and the bot will assign teams and roles to them
## (Maybe) upcoming features ## The todo list
##### See the [todo list](https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban) for more information. ##### See the [todo list](https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban) for more information.

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -21,25 +21,27 @@ import org.jetbrains.gradle.ext.TaskTriggersConfig
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins { plugins {
kotlin("jvm") version "1.9.10" kotlin("jvm") version "1.9.22"
kotlin("plugin.serialization") version "1.9.22"
id("com.github.johnrengelman.shadow") version "8.1.1" id("com.github.johnrengelman.shadow") version "8.1.1"
id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.7" id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.7"
`maven-publish` `maven-publish`
} }
//lilJudd version 2 //lilJudd version 2
val ownerID = 372703841151614976L val creatorID = 372703841151614976L
group = "net.moonleay.liljudd" group = "net.moonleay.liljudd"
version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_SHORT_SHA")}-prod" } version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_SHORT_SHA")}-prod" }
?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" } ?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" }
?: "2.6.7" ?: "2.7.2"
val kordver = "1.7.1-SNAPSHOT" val kordver = "1.7.1-SNAPSHOT"
val coroutinesver = "1.7.3" val coroutinesver = "1.7.3"
val ktorver = "2.3.7" val ktorver = "2.3.7"
val exposedver = "0.45.0" val exposedver = "0.46.0"
val postgresver = "42.7.1" val postgresver = "42.7.1"
val krontabver = "2.2.4" val krontabver = "2.2.6"
val kotlinxserializationver = "1.6.0"
val mavenArtifact = "lilJudd" val mavenArtifact = "lilJudd"
project.base.archivesName.set(mavenArtifact) project.base.archivesName.set(mavenArtifact)
@ -93,6 +95,9 @@ dependencies {
//Coroutines //Coroutines
shadow("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesver") shadow("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesver")
//JSON Stuff
shadow("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxserializationver")
//Logging //Logging
shadow("org.slf4j:slf4j-api:2.0.3") shadow("org.slf4j:slf4j-api:2.0.3")
shadow("org.slf4j:slf4j-simple:2.0.3") shadow("org.slf4j:slf4j-simple:2.0.3")
@ -115,13 +120,14 @@ val templateSrc = project.rootDir.resolve("src/main/templates")
val templateDest = project.projectDir.resolve("build/generated/templates") val templateDest = project.projectDir.resolve("build/generated/templates")
val templateProps = mapOf( val templateProps = mapOf(
"version" to project.version as String, "version" to project.version as String,
"ownerID" to ownerID, "creatorID" to creatorID,
"kordversion" to kordver, "kordversion" to kordver,
"coroutinesversion" to coroutinesver, "coroutinesversion" to coroutinesver,
"ktorversion" to ktorver, "ktorversion" to ktorver,
"exposedversion" to exposedver, "exposedversion" to exposedver,
"postgresversion" to postgresver, "postgresversion" to postgresver,
"krontabversion" to krontabver "krontabversion" to krontabver,
"kotlinxserializationversion" to kotlinxserializationver
) )

Binary file not shown.

View file

@ -1,6 +1,6 @@
# #
# lilJudd # lilJudd
# Copyright (C) 2023 moonleay # Copyright (C) 2024 moonleay
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by

16
gradlew vendored
View file

@ -2,7 +2,7 @@
# #
# lilJudd # lilJudd
# Copyright (C) 2023 moonleay # Copyright (C) 2024 moonleay
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -147,7 +147,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045 # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
@ -155,7 +155,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045 # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@ -204,11 +204,11 @@ fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command; # Collect all arguments for the java command:
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# shell script including quotes and variable substitutions, so put them in # and any embedded shellness will be escaped.
# double quotes to make sure that they get re-expanded; and # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# * put everything else in single quotes, so that it's not re-expanded. # treated as '${Hostname}' itself on the command line.
set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \

View file

@ -1,575 +0,0 @@
/*
* lilJudd
* Copyright (C) 2023 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.data.api
import io.ktor.http.*
import kotlinx.serialization.json.*
import net.moonleay.lilJudd.data.api.entry.coop.CoopGearData
import net.moonleay.lilJudd.data.api.entry.schedule.*
import net.moonleay.lilJudd.data.api.entry.splatfest.SplatfestColor
import net.moonleay.lilJudd.data.api.entry.splatfest.SplatfestData
import net.moonleay.lilJudd.data.api.entry.splatfest.SplatfestTeamData
import net.moonleay.lilJudd.data.api.entry.splatfest.SplatfestTeamResults
import net.moonleay.lilJudd.data.api.entry.splatnet.BrandData
import net.moonleay.lilJudd.data.api.entry.splatnet.GearAbilityData
import net.moonleay.lilJudd.data.api.entry.splatnet.SplatnetItemData
import net.moonleay.lilJudd.data.api.type.ApiDataType
import net.moonleay.lilJudd.data.api.type.ApiRequestType
import net.moonleay.lilJudd.util.Logger
import net.moonleay.lilJudd.util.NetUtil
import net.moonleay.liljudd.build.BuildConstants
object Splatoon3ApiCache {
private val user_agent =
"lilJudd/${BuildConstants.version} (${System.getProperty("os.name")}/${System.getProperty("os.version")}) [contact@moonleay.net]"
private val base_url = "https://splatoon3.ink/data/" // Thank god there is an API
internal var cachedSplatfestData = mutableListOf<SplatfestData>()
internal var cachedMapData = mutableMapOf<Int, MapData>()
internal var cachedRegularModeData = mutableListOf<ModeData>()
internal var cachedCompetitiveSeriesModeData = mutableListOf<ModeData>()
internal var cachedCompetitiveOpenModeData = mutableListOf<ModeData>()
internal var cachedXModeData = mutableListOf<ModeData>()
internal var cachedChallengesData = mutableListOf<ChallengeModeData>()
internal var cachedShiftData = mutableListOf<ShiftData>()
internal var cachedBigRunShiftData = mutableListOf<ShiftData>()
internal var cachedCoopRewardsData = mutableListOf<CoopGearData>()
internal var cachedSplatnetItemData = mutableListOf<SplatnetItemData>()
internal var cachedSplatnetLimitedItemData = mutableListOf<SplatnetItemData>()
internal lateinit var splatnetShopBrandData: BrandData
internal lateinit var splatnetShopNextBrandData: BrandData
fun updateData(dataType: ApiDataType, requestType: ApiRequestType) {
Logger.out("Updating data for $dataType with USER-AGENT: $user_agent")
Logger.out("Reason for update: $requestType")
when (dataType) {
ApiDataType.SCHEDULES -> {
updateScheduleCache(user_agent)
}
ApiDataType.SPLATNETGEAR -> {
updateSplatnetGearCache(user_agent)
}
ApiDataType.COOP -> {
updateCOOPCache(user_agent)
}
ApiDataType.SPLATFESTS -> {
updateSplatfestCache(user_agent)
}
ApiDataType.ALL -> {
updateScheduleCache(user_agent)
updateSplatnetGearCache(user_agent)
updateSplatfestCache(user_agent)
updateCOOPCache(user_agent)
}
}
Logger.out("Finished updating data for $dataType")
}
private fun updateSplatnetGearCache(uag: String) {
val apiResponse = NetUtil.GETJsonData("${base_url}gear.json", uag)
if (apiResponse.startsWith("Error")) {
Logger.out("Error getting splatnet data: $apiResponse")
return
}
val json = Json.parseToJsonElement(apiResponse)
val pickupBrandData = json.jsonObject["data"]!!.jsonObject["gesotown"]!!.jsonObject["pickupBrand"]!!.jsonObject
val brand = pickupBrandData["brand"]!!.jsonObject
splatnetShopBrandData =
BrandData(
brand["name"]!!.jsonPrimitive.content,
Url(pickupBrandData["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
GearAbilityData(
brand["usualGearPower"]!!.jsonObject["name"]!!.jsonPrimitive.content,
brand["usualGearPower"]!!.jsonObject["desc"]!!.jsonPrimitive.content,
Url(brand["usualGearPower"]!!.jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
pickupBrandData["saleEndTime"]!!.jsonPrimitive.content
)
val nextBrand = pickupBrandData["nextBrand"]!!.jsonObject
splatnetShopNextBrandData =
BrandData(
nextBrand["name"]!!.jsonPrimitive.content,
Url(pickupBrandData["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
null,
null
)
cachedSplatnetItemData = mutableListOf()
val items = pickupBrandData["brandGears"]!!.jsonArray
items.forEach {
val obj = it as JsonObject
val gear = it["gear"]!!.jsonObject
val primaryGearPower = gear["primaryGearPower"]!!.jsonObject
val additionalGearPowers = gear["additionalGearPowers"]!!.jsonArray
val additionalGearPowersList = mutableListOf<GearAbilityData>()
additionalGearPowers.forEach {
val ob = it as JsonObject
additionalGearPowersList.add(
GearAbilityData(
ob["name"]!!.jsonPrimitive.content,
null,
Url(ob["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
)
)
}
cachedSplatnetItemData.add(
SplatnetItemData(
obj["saleEndTime"]!!.jsonPrimitive.content,
obj["price"]!!.jsonPrimitive.int,
gear["__typename"]!!.jsonPrimitive.content,
gear["name"]!!.jsonPrimitive.content,
GearAbilityData(
primaryGearPower["name"]!!.jsonPrimitive.content,
null,
Url(primaryGearPower["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
additionalGearPowersList,
Url(gear["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
splatnetShopBrandData
)
)
}
Logger.out("Updated gear data")
val limitedItemData = json.jsonObject["data"]!!.jsonObject["gesotown"]!!.jsonObject["limitedGears"]!!.jsonArray
cachedSplatnetLimitedItemData = mutableListOf()
limitedItemData.forEach {
val obj = it as JsonObject
val gear = obj["gear"]!!.jsonObject
val additionalGearPowers = gear["additionalGearPowers"]!!.jsonArray
val additionalGearPowersList = mutableListOf<GearAbilityData>()
additionalGearPowers.forEach {
val ob = it as JsonObject
additionalGearPowersList.add(
GearAbilityData(
ob["name"]!!.jsonPrimitive.content,
null,
Url(ob["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
)
)
}
cachedSplatnetLimitedItemData.add(
SplatnetItemData(
obj["saleEndTime"]!!.jsonPrimitive.content,
obj["price"]!!.jsonPrimitive.int,
gear["__typename"]!!.jsonPrimitive.content,
gear["name"]!!.jsonPrimitive.content,
GearAbilityData(
gear["primaryGearPower"]!!.jsonObject["name"]!!.jsonPrimitive.content,
null,
Url(gear["primaryGearPower"]!!.jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content)
),
additionalGearPowersList,
Url(gear["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
splatnetShopBrandData
)
)
}
}
private fun updateCOOPCache(uag: String) {
val apiResponse = NetUtil.GETJsonData("${base_url}coop.json", uag)
if (apiResponse.startsWith("Error")) {
Logger.out("Error getting coop data: $apiResponse")
return
}
try {
val json = Json.parseToJsonElement(apiResponse)
val data = json.jsonObject["data"]!!.jsonObject["coopResult"]!!.jsonObject["monthlyGear"]!!.jsonObject
cachedCoopRewardsData = mutableListOf()
cachedCoopRewardsData.add(
CoopGearData(
data["name"]!!.jsonPrimitive.content,
Url(data["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
data["__typename"]!!.jsonPrimitive.content
)
)
Logger.out("Updated COOP data")
} catch (e: Exception) {
Logger.out("Error getting coop data: ${e.cause}")
}
}
private fun updateScheduleCache(uag: String) {
val apiResponse = NetUtil.GETJsonData("${base_url}schedules.json", uag)
if (apiResponse.startsWith("Error")) {
Logger.out("Error getting schedule data: $apiResponse")
return
}
val json = Json.decodeFromString(apiResponse) as JsonObject
val data = json["data"]!!.jsonObject
try {
val mapList = data["vsStages"]!!.jsonObject["nodes"]!!.jsonArray
cachedMapData = mutableMapOf()
mapList.forEach {
val obj = it as JsonObject
val imageURL = Url(obj.jsonObject["originalImage"]!!.jsonObject["url"]!!.jsonPrimitive.content)
val id = obj.jsonObject["vsStageId"]!!.jsonPrimitive.int
cachedMapData[id] = MapData(
id,
imageURL,
it.jsonObject["name"]!!.jsonPrimitive.content
)
}
Logger.out("Updated maplist data")
} catch (e: Exception) {
Logger.out("Error getting maplist data: ${e.cause}")
}
try {
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 Regular match data")
} catch (e: Exception) {
Logger.out("Error getting regular match data: ${e.cause}")
}
try {
val compMatches = data["bankaraSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedCompetitiveSeriesModeData = mutableListOf()
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")
} catch (e: Exception) {
Logger.out("Error getting competitive match data: ${e.cause}")
}
try {
val xMatches = data["xSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedXModeData = mutableListOf()
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")
} catch (e: Exception) {
Logger.out("Error getting X match data: ${e.cause}")
}
try {
val challengeData = data["eventSchedules"]!!.jsonObject["nodes"]!!.jsonArray
cachedChallengesData = mutableListOf()
challengeData.forEach {
val obj = it as JsonObject
val tpd = obj["timePeriods"]!!.jsonArray
val setting = obj["leagueMatchSetting"]!!.jsonObject
val event = setting["leagueMatchEvent"]!!.jsonObject
cachedChallengesData.add(
ChallengeModeData(
event["leagueMatchEventId"]!!.jsonPrimitive.content,
event["name"]!!.jsonPrimitive.content,
event["desc"]!!.jsonPrimitive.content,
event["regulation"]!!.jsonPrimitive.content,
cachedMapData[setting["vsStages"]!!.jsonArray[0].jsonObject["vsStageId"]!!.jsonPrimitive.int],
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 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 all Schedules")
}
private fun updateSplatfestCache(uag: String) {
val apiResponse = NetUtil.GETJsonData("${base_url}festivals.json", uag)
if (apiResponse.startsWith("Error")) {
Logger.out("Error getting splatfest data: $apiResponse")
return
}
try {
val json = Json.decodeFromString(apiResponse) as JsonObject
val festivals =
json["US"]!!.jsonObject["data"]!!.jsonObject["festRecords"]!!.jsonObject["nodes"]!!.jsonArray
cachedSplatfestData = mutableListOf()
festivals.forEach {
val fest = it as JsonObject
val teams = fest.jsonObject["teams"]!!.jsonArray
val team1 = teams[0].jsonObject
val team1Color = team1["color"]!!.jsonObject
var team1Result: JsonObject? = null
if (team1["result"] !is JsonNull) {
team1Result = team1["result"]!!.jsonObject
}
val team2 = teams[1].jsonObject
val team2Color = team2["color"]!!.jsonObject
var team2Result: JsonObject? = null
if (team2["result"] !is JsonNull) {
team2Result = team2["result"]!!.jsonObject
}
val team3 = teams[2].jsonObject
val team3Color = team3["color"]!!.jsonObject
var team3Result: JsonObject? = null
if (team3["result"] !is JsonNull) {
team3Result = team3["result"]!!.jsonObject
}
cachedSplatfestData.add(
SplatfestData(
fest.jsonObject["id"]!!.jsonPrimitive.content,
fest.jsonObject["state"]!!.jsonPrimitive.content,
fest.jsonObject["startTime"]!!.jsonPrimitive.content,
fest.jsonObject["endTime"]!!.jsonPrimitive.content,
fest.jsonObject["title"]!!.jsonPrimitive.content,
Url(fest.jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content),
SplatfestTeamData(
team1["teamName"]!!.jsonPrimitive.content,
SplatfestColor(
team1Color["a"]!!.jsonPrimitive.int,
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,
)
),
SplatfestTeamData(
team2["teamName"]!!.jsonPrimitive.content,
SplatfestColor(
team2Color["a"]!!.jsonPrimitive.int,
team2Color["b"]!!.jsonPrimitive.double,
team2Color["g"]!!.jsonPrimitive.double,
team2Color["r"]!!.jsonPrimitive.double
),
if (team2Result.isNullOrEmpty() || team2Result["tricolorContributionRatio"]!!.jsonPrimitive.doubleOrNull == null)
null
else SplatfestTeamResults(
team2Result["isWinner"]!!.jsonPrimitive.boolean,
team2Result["horagaiRatio"]!!.jsonPrimitive.double,
team2Result["isHoragaiRatioTop"]!!.jsonPrimitive.boolean,
team2Result["voteRatio"]!!.jsonPrimitive.double,
team2Result["isVoteRatioTop"]!!.jsonPrimitive.boolean,
team2Result["regularContributionRatio"]!!.jsonPrimitive.double,
team2Result["isRegularContributionRatioTop"]!!.jsonPrimitive.boolean,
team2Result["challengeContributionRatio"]!!.jsonPrimitive.double,
team2Result["isChallengeContributionRatioTop"]!!.jsonPrimitive.boolean,
team2Result["tricolorContributionRatio"]!!.jsonPrimitive.double,
team2Result["isTricolorContributionRatioTop"]!!.jsonPrimitive.boolean,
)
),
SplatfestTeamData(
team3["teamName"]!!.jsonPrimitive.content,
SplatfestColor(
team3Color["a"]!!.jsonPrimitive.int,
team3Color["b"]!!.jsonPrimitive.double,
team3Color["g"]!!.jsonPrimitive.double,
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}")
}
}
}

View file

@ -1,25 +0,0 @@
/*
* lilJudd
* Copyright (C) 2023 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.data.api.entry.splatfest
data class SplatfestTeamData(
val teamName: String,
val color: SplatfestColor,
val results: SplatfestTeamResults?,
)

View file

@ -1,33 +0,0 @@
/*
* lilJudd
* Copyright (C) 2023 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.data.api.entry.splatfest
data class SplatfestTeamResults(
val isWinner: Boolean,
val horagaiRatio: Double,
val horagaiRatioTop: Boolean,
val voteRatio: Double,
val voteRatioTop: Boolean,
val regularRatio: Double,
val regularRatioTop: Boolean,
val challengeRatio: Double,
val challengeRatioTop: Boolean,
val tricolorRatio: Double,
val tricolorRatioTop: Boolean,
)

View file

@ -1,32 +0,0 @@
/*
* lilJudd
* Copyright (C) 2023 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.data.api.entry.splatnet
import io.ktor.http.*
data class SplatnetItemData(
val saleEndTime: String,
val price: Int,
val typeName: String,
val name: String,
val primaryGearPower: GearAbilityData,
val additionalGearPowers: List<GearAbilityData>,
val image: Url,
val brand: BrandData,
)

View file

@ -1,50 +0,0 @@
/*
* lilJudd
* Copyright (C) 2023 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.jobs
import dev.inmo.krontab.KronScheduler
import kotlinx.coroutines.Job
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.jobs.component.CronjobType
import net.moonleay.lilJudd.jobs.component.ICronjob
import net.moonleay.lilJudd.util.Logger
object Splatoon3ApiFestivalAndCoopUpdateScheduler : ICronjob {
override val jobName: String
get() = "Splatoon3ApiFestivalAndCoopUpdateScheduler"
override val jobIncoming: String
get() = "0 0 0 /1 * * 0o *" // once a day
override val jobType: CronjobType
get() = CronjobType.INFINITE
override val continueJob: Boolean
get() = true
override lateinit var cronjobJob: Job
override lateinit var scheduler: KronScheduler
override suspend fun jobFunction() {
Logger.out("Running Splatoon3ApiFestivalUpdateScheduler.")
Splatoon3ApiCache.updateData(ApiDataType.SPLATFESTS, ApiRequestType.AUTOMATIC_CACHE_UPDATE)
Logger.out("Splatoon3ApiFestivalUpdateScheduler finished.")
Logger.out("Running Splatoon3ApiCoopUpdateScheduler.")
Splatoon3ApiCache.updateData(ApiDataType.COOP, ApiRequestType.AUTOMATIC_CACHE_UPDATE)
Logger.out("Splatoon3ApiCoopUpdateScheduler finished.")
}
}

View file

@ -1,47 +0,0 @@
/*
* lilJudd
* Copyright (C) 2023 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.jobs
import dev.inmo.krontab.KronScheduler
import kotlinx.coroutines.Job
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.jobs.component.CronjobType
import net.moonleay.lilJudd.jobs.component.ICronjob
import net.moonleay.lilJudd.util.Logger
object Splatoon3ApiSplatnetGearUpdateScheduler : ICronjob {
override val jobName: String
get() = "Splatoon3ApiSplatnetGearUpdateScheduler"
override val jobIncoming: String
get() = "0 0 /6 * * * 0o *" //Every 6 hours
override val jobType: CronjobType
get() = CronjobType.INFINITE
override val continueJob: Boolean
get() = true
override lateinit var cronjobJob: Job
override lateinit var scheduler: KronScheduler
override suspend fun jobFunction() {
Logger.out("Running Splatoon3ApiSplatnetGearUpdateScheduler.")
Splatoon3ApiCache.updateData(ApiDataType.SPLATNETGEAR, ApiRequestType.AUTOMATIC_CACHE_UPDATE)
Logger.out("Splatoon3ApiSplatnetGearUpdateScheduler finished.")
}
}

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,9 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd package net.moonleay.liljudd
import com.kotlindiscord.kord.extensions.ExtensibleBot import com.kotlindiscord.kord.extensions.ExtensibleBot
import com.kotlindiscord.kord.extensions.utils.dm
import dev.kord.common.entity.PresenceStatus import dev.kord.common.entity.PresenceStatus
import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.behavior.interaction.response.respond
import dev.kord.core.event.gateway.ReadyEvent import dev.kord.core.event.gateway.ReadyEvent
@ -26,29 +27,28 @@ import dev.kord.core.event.interaction.ButtonInteractionCreateEvent
import dev.kord.core.on import dev.kord.core.on
import dev.kord.gateway.Intent import dev.kord.gateway.Intent
import dev.kord.gateway.PrivilegedIntent import dev.kord.gateway.PrivilegedIntent
import dev.kord.gateway.builder.Shards
import dev.kord.rest.builder.message.embed
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.moonleay.lilJudd.buttons.component.EditButtonManager
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.extensions.*
import net.moonleay.lilJudd.features.AvailabilityManager
import net.moonleay.lilJudd.features.MatchManager
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.Logger
import net.moonleay.lilJudd.util.MessageUtil
import net.moonleay.liljudd.build.BuildConstants import net.moonleay.liljudd.build.BuildConstants
import net.moonleay.liljudd.buttons.component.EditButtonManager
import net.moonleay.liljudd.data.CredentialManager
import net.moonleay.liljudd.data.NewsManager
import net.moonleay.liljudd.data.StacktraceSaver
import net.moonleay.liljudd.data.database.DB
import net.moonleay.liljudd.extensions.*
import net.moonleay.liljudd.features.AvailabilityManager
import net.moonleay.liljudd.features.MatchManager
import net.moonleay.liljudd.features.TimeManager
import net.moonleay.liljudd.util.EmbedColor
import net.moonleay.liljudd.util.Logger
import net.moonleay.liljudd.util.MessageUtil
import kotlin.system.exitProcess import kotlin.system.exitProcess
object Bot { object Bot {
//The kord object gets set at app launch //The kord object gets set at app launch
lateinit var bot: ExtensibleBot lateinit var bot: ExtensibleBot
@ -74,6 +74,12 @@ object Bot {
exitProcess(3) exitProcess(3)
} }
// Check if there are api credentials
if (CredentialManager.apiDomain == "empty" || CredentialManager.apiToken == "empty") {
Logger.out("The config does not contain the whole API credentials.")
exitProcess(3)
}
// Connect to the database // Connect to the database
DB.connect( DB.connect(
CredentialManager.dbDomain, CredentialManager.dbDomain,
@ -110,6 +116,7 @@ object Bot {
add(::SendPlannerExtension) add(::SendPlannerExtension)
add(::MatchExtension) add(::MatchExtension)
add(::UpdateRolesExtension) add(::UpdateRolesExtension)
add(::RotationExtension)
} }
this.presence { this.presence {
@ -121,11 +128,26 @@ object Bot {
+Intent.GuildMembers +Intent.GuildMembers
} }
// Will add Sharding someday, I promise errorResponse { _, type ->
/* val stamp = System.currentTimeMillis()
sharding { recommended -> this.embed {
this.title = "Oops. Something went wrong."
this.description = "The bot encountered an error during execution.\n" +
"Please report this to <@${BuildConstants.creatorID}>.\n" +
"The errorid is \"$stamp.stk\""
this.field {
this.name = "Error message:"
this.value = type.error.message.toString()
this.inline = false
}
}
StacktraceSaver.saveStacktrace(type.error, stamp)
}
this.sharding { recommended ->
Shards(recommended) Shards(recommended)
} */ }
} }
// Register button presses // Register button presses
@ -163,13 +185,39 @@ object Bot {
bot.kordRef.on<ReadyEvent> { bot.kordRef.on<ReadyEvent> {
AvailabilityManager.runThread() // Update Availabilities AvailabilityManager.runThread() // Update Availabilities
MatchManager.update() // Update Matches MatchManager.update() // Update Matches
// Load news
NewsManager.load()
if(NewsManager.shouldPost == "yes"){
val contactedOwners = mutableListOf<ULong>()
bot.kordRef.guilds.collect {
val owner = it.owner.asUser()
if (!contactedOwners.contains(owner.id.value)) {
Logger.out("Sent News to ${owner.username} from ${it.name}")
owner.dm {
this.embed {
this.title = NewsManager.title
this.description = NewsManager.news
this.footer {
this.icon = bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter()
}
}
}
contactedOwners.add(owner.id.value)
}
}
NewsManager.shouldPost = "no"
NewsManager.update()
}
// 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) // Splatoon3Api.updateSchedule()
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,
@ -178,10 +226,6 @@ object Bot {
// Had to disable bc of an error. // Had to disable bc of an error.
// Will fix when I have time // Will fix when I have time
//JobManager.addJob(Splatoon3ApiFestivalAndCoopUpdateScheduler)
//JobManager.addJob(Splatoon3ApiSplatnetGearUpdateScheduler)
//Start the bot //Start the bot
bot.start() bot.start()
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -15,9 +15,10 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd package net.moonleay.liljudd
import net.moonleay.liljudd.build.BuildConstants import net.moonleay.liljudd.build.BuildConstants
import net.moonleay.liljudd.util.Logger
suspend fun main() { suspend fun main() {
@ -27,9 +28,11 @@ suspend fun main() {
"| |_| |__| |_ _ _| |_| |\n" + "| |_| |__| |_ _ _| |_| |\n" +
"| | | | | | | | . | . |\n" + "| | | | | | | | . | . |\n" +
"|_|_|_|_____|___|___|___|\n" + "|_|_|_|_____|___|___|___|\n" +
" " "v.${BuildConstants.version}\n"
) )
println("v.${BuildConstants.version}")
Logger.out("li'l Judd made by moonleay (https://moonleay.net). Web UI made by aronmal (https://mal-noh.de).")
Logger.out("For more information check out https://liljudd.ink and https://git.moonleay.net/DiscordBots/lilJudd")
Bot.start() Bot.start()
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.component package net.moonleay.liljudd.buttons.component
import net.moonleay.lilJudd.buttons.matchplanner.AcceptEditButton import net.moonleay.liljudd.buttons.matchplanner.AcceptEditButton
import net.moonleay.lilJudd.buttons.matchplanner.CancelEditButton import net.moonleay.liljudd.buttons.matchplanner.CancelEditButton
import net.moonleay.lilJudd.buttons.matchplanner.DeclineEditButton import net.moonleay.liljudd.buttons.matchplanner.DeclineEditButton
import net.moonleay.lilJudd.buttons.timeplanner.IsAvailableEditButton import net.moonleay.liljudd.buttons.timeplanner.IsAvailableEditButton
import net.moonleay.lilJudd.buttons.timeplanner.MaybeAvailableEditButton import net.moonleay.liljudd.buttons.timeplanner.MaybeAvailableEditButton
import net.moonleay.lilJudd.buttons.timeplanner.NotAvailableEditButton import net.moonleay.liljudd.buttons.timeplanner.NotAvailableEditButton
object EditButtonManager { object EditButtonManager {
val buttons = listOf( val buttons = listOf(

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.component package net.moonleay.liljudd.buttons.component
import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior
import dev.kord.core.entity.Guild import dev.kord.core.entity.Guild

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.matchplanner package net.moonleay.liljudd.buttons.matchplanner
import dev.kord.common.entity.Snowflake import dev.kord.common.entity.Snowflake
import dev.kord.core.behavior.edit import dev.kord.core.behavior.edit
@ -27,14 +27,14 @@ import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.EmbedBuilder import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.liljudd.buttons.component.IEditButton
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
import net.moonleay.lilJudd.util.Logger import net.moonleay.liljudd.util.Logger
import net.moonleay.lilJudd.util.MessageUtil import net.moonleay.liljudd.util.MessageUtil
class AcceptEditButton() : IEditButton { class AcceptEditButton : IEditButton {
override val id: String = "public.edit.btn.matchmanagement.accept" override val id: String = "public.edit.btn.matchmanagement.accept"
override suspend fun onInteraction( override suspend fun onInteraction(
@ -60,7 +60,7 @@ class AcceptEditButton() : IEditButton {
Logger.out("role is null") Logger.out("role is null")
return return
} }
val member = interaction.user.asMember(guild.id) ?: return val member = interaction.user.asMember(guild.id)
// do the checks and update // do the checks and update
if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) { if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) {
if (member.roleIds.contains(Snowflake(mpdd.roleID))) { if (member.roleIds.contains(Snowflake(mpdd.roleID))) {

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.matchplanner package net.moonleay.liljudd.buttons.matchplanner
import dev.kord.common.entity.Snowflake import dev.kord.common.entity.Snowflake
import dev.kord.core.behavior.edit import dev.kord.core.behavior.edit
@ -27,11 +27,11 @@ import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.EmbedBuilder import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.liljudd.buttons.component.IEditButton
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
import net.moonleay.lilJudd.util.Logger import net.moonleay.liljudd.util.Logger
class CancelEditButton : IEditButton { class CancelEditButton : IEditButton {
override val id: String = "public.edit.btn.matchmanagement.cancel" override val id: String = "public.edit.btn.matchmanagement.cancel"

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.matchplanner package net.moonleay.liljudd.buttons.matchplanner
import dev.kord.common.entity.Snowflake import dev.kord.common.entity.Snowflake
import dev.kord.core.behavior.edit import dev.kord.core.behavior.edit
@ -27,12 +27,12 @@ import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.EmbedBuilder import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.liljudd.buttons.component.IEditButton
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
import net.moonleay.lilJudd.util.Logger import net.moonleay.liljudd.util.Logger
import net.moonleay.lilJudd.util.MessageUtil import net.moonleay.liljudd.util.MessageUtil
class DeclineEditButton : IEditButton { class DeclineEditButton : IEditButton {
override val id: String = "public.edit.btn.matchmanagement.decline" override val id: String = "public.edit.btn.matchmanagement.decline"
@ -60,7 +60,7 @@ class DeclineEditButton : IEditButton {
Logger.out("role is null") Logger.out("role is null")
return return
} }
val member = interaction.user.asMember(guild.id) ?: return val member = interaction.user.asMember(guild.id)
if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) { if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) {
if (member.roleIds.contains(Snowflake(mpdd.roleID))) { if (member.roleIds.contains(Snowflake(mpdd.roleID))) {
Logger.out("Removing role from ${member.username}") Logger.out("Removing role from ${member.username}")

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.timeplanner package net.moonleay.liljudd.buttons.timeplanner
import dev.kord.core.behavior.edit import dev.kord.core.behavior.edit
import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior
@ -25,10 +25,10 @@ import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.liljudd.buttons.component.IEditButton
import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.liljudd.features.AvailabilityManager
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
class IsAvailableEditButton : IEditButton { class IsAvailableEditButton : IEditButton {
override val id: String = "public.edit.btn.timemanagement.available" override val id: String = "public.edit.btn.timemanagement.available"

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.timeplanner package net.moonleay.liljudd.buttons.timeplanner
import dev.kord.core.behavior.edit import dev.kord.core.behavior.edit
import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior
@ -25,10 +25,10 @@ import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.liljudd.buttons.component.IEditButton
import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.liljudd.features.AvailabilityManager
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
class MaybeAvailableEditButton : IEditButton { class MaybeAvailableEditButton : IEditButton {
override val id: String = "public.edit.btn.timemanagement.maybeavailable" override val id: String = "public.edit.btn.timemanagement.maybeavailable"

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.buttons.timeplanner package net.moonleay.liljudd.buttons.timeplanner
import dev.kord.core.behavior.edit import dev.kord.core.behavior.edit
import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior
@ -25,10 +25,10 @@ import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.liljudd.buttons.component.IEditButton
import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.liljudd.features.AvailabilityManager
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
class NotAvailableEditButton : IEditButton { class NotAvailableEditButton : IEditButton {
override val id: String = "public.edit.btn.timemanagement.notavailable" override val id: String = "public.edit.btn.timemanagement.notavailable"

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data package net.moonleay.liljudd.data
import java.io.* import java.io.*
import java.util.* import java.util.*
@ -29,6 +29,8 @@ object CredentialManager {
lateinit var dbName: String lateinit var dbName: String
lateinit var dbUser: String lateinit var dbUser: String
lateinit var dbPassword: String lateinit var dbPassword: String
lateinit var apiDomain: String
lateinit var apiToken: String
///Load the needed credentials, generate a config if there is none ///Load the needed credentials, generate a config if there is none
fun load() { fun load() {
@ -51,6 +53,8 @@ object CredentialManager {
dbName = prop.getProperty("dbName") dbName = prop.getProperty("dbName")
dbUser = prop.getProperty("dbUser") dbUser = prop.getProperty("dbUser")
dbPassword = prop.getProperty("dbPassword") dbPassword = prop.getProperty("dbPassword")
apiDomain = prop.getProperty("apiDomain")
apiToken = prop.getProperty("apiToken")
input.close() input.close()
} catch (e: IOException) { } catch (e: IOException) {
e.printStackTrace() e.printStackTrace()
@ -83,6 +87,8 @@ object CredentialManager {
prop.setProperty("dbName", "empty") prop.setProperty("dbName", "empty")
prop.setProperty("dbUser", "empty") prop.setProperty("dbUser", "empty")
prop.setProperty("dbPassword", "empty") prop.setProperty("dbPassword", "empty")
prop.setProperty("apiDomain", "empty")
prop.setProperty("apiToken", "empty")
prop.store(output, null) prop.store(output, null)
output.close() output.close()

View file

@ -0,0 +1,120 @@
/*
* 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.data
import java.io.*
import java.util.*
object NewsManager {
private const val foldername = "data"
private const val filename = "news.nick"
lateinit var shouldPost: String
lateinit var title: String
lateinit var news: String
///Load the needed credentials, generate a config if there is none
fun load() {
val folder = File(foldername)
if (!folder.exists()) {
save()
return
}
val configFile = File(folder, filename)
if (!configFile.exists()) {
save()
return
}
try {
val input: InputStream = FileInputStream(foldername + File.separator + filename)
val prop = Properties()
prop.load(input)
shouldPost = prop.getProperty("shouldPost")
title = prop.getProperty("title")
news = prop.getProperty("news")
input.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
fun update(){
val folder = File(foldername)
if (!folder.exists()) {
try {
folder.mkdirs()
} catch (e: IOException) {
e.printStackTrace()
}
}
val configFile = File(foldername + File.separator + filename)
if (!configFile.exists()) {
try {
configFile.createNewFile()
} catch (e: IOException) {
e.printStackTrace()
}
}
try {
val output: OutputStream = FileOutputStream(foldername + File.separator + filename)
val prop = Properties()
prop.setProperty("shouldPost", shouldPost)
prop.setProperty("title", title)
prop.setProperty("news", news)
prop.store(output, null)
output.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
///generate a new sample config
private fun save() {
val folder = File(foldername)
if (!folder.exists()) {
try {
folder.mkdirs()
} catch (e: IOException) {
e.printStackTrace()
}
}
val configFile = File(foldername + File.separator + filename)
if (!configFile.exists()) {
try {
configFile.createNewFile()
} catch (e: IOException) {
e.printStackTrace()
}
}
try {
val output: OutputStream = FileOutputStream(foldername + File.separator + filename)
val prop = Properties()
prop.setProperty("shouldPost", "no")
prop.setProperty("title", "empty")
prop.setProperty("news", "empty")
prop.store(output, null)
output.close()
shouldPost = "no"
title = "empty"
news = "empty"
} catch (e: IOException) {
e.printStackTrace()
}
}
}

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,13 +16,22 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.coop package net.moonleay.liljudd.data
import io.ktor.http.* import java.io.File
data class CoopGearData( object StacktraceSaver {
val name: String, fun saveStacktrace(stacktrace: Throwable, timestamp: Long) {
val image: Url, createFolder()
val __typename: String, val dir = File("data", "stacktraces")
File(dir, "$timestamp.stk").bufferedWriter().use { out ->
out.write(stacktrace.stackTraceToString())
}
}
) private fun createFolder() {
val dir = File("data", "stacktraces")
if (!dir.exists())
dir.mkdir()
}
}

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,11 +16,23 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.type package net.moonleay.liljudd.data.api.splatoon3ink
enum class ApiRequestType(val nameToDisplay: String) { import kotlinx.serialization.json.Json
AUTOMATIC_CACHE_UPDATE("automatic request to update the cache"), import net.moonleay.liljudd.build.BuildConstants
AUTOMATIC_CACHE_CREATION_AT_STARTUP("automatic request to create cache at startup"), import net.moonleay.liljudd.data.api.splatoon3ink.schedules.Schedules
MANUAL("manual request"), import net.moonleay.liljudd.util.NetUtil
DEBUG("debug request")
object Splatoon3Api {
var schedules: Schedules? = null
fun updateSchedule() {
val response = NetUtil.GETJsonData("https://splatoon3.ink/data/schedules.json", "lilJudd/${BuildConstants.version}")
if (response.startsWith("error")){
println("Error: $response")
return
}
schedules = Json.decodeFromString(response)
}
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,14 +16,17 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api package net.moonleay.liljudd.data.api.splatoon3ink
import net.moonleay.lilJudd.data.api.entry.schedule.ModeData import net.moonleay.liljudd.data.api.splatoon3ink.schedules.BankaraNode
import net.moonleay.lilJudd.util.TimeUtil 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 Splatoon3Api { object Splatoon3ApiDataGrabber {
private fun getRegularMode(timestamp: Long): ModeData { fun getRegularMode(timestamp: Long): RegularNode {
Splatoon3ApiCache.cachedRegularModeData.map { modeData -> Splatoon3Api.schedules!!.data.regularSchedules.nodes.map { modeData ->
val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC")
val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC")
if (timestamp in startTime..endTime) { if (timestamp in startTime..endTime) {
@ -33,8 +36,22 @@ object Splatoon3Api {
throw Exception("No current mode found") throw Exception("No current mode found")
} }
private fun getOpenMode(timestamp: Long): ModeData { fun getOpenMode(timestamp: Long): BankaraNode {
Splatoon3ApiCache.cachedCompetitiveOpenModeData.map { modeData -> Splatoon3Api.schedules!!.data.bankaraSchedules.nodes.map { modeData ->
val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC")
val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC")
if (timestamp in startTime..endTime) {
modeData.bankaraMatchSettings!!.map { matchSetting ->
if (matchSetting.bankaraMode == "OPEN")
return modeData
}
}
}
throw Exception("No current mode found")
}
fun getXMode(timestamp: Long): XNode {
Splatoon3Api.schedules!!.data.xSchedules.nodes.map { modeData ->
val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC")
val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC")
if (timestamp in startTime..endTime) { if (timestamp in startTime..endTime) {
@ -44,8 +61,22 @@ object Splatoon3Api {
throw Exception("No current mode found") throw Exception("No current mode found")
} }
private fun getXMode(timestamp: Long): ModeData { fun getSeriesMode(timestamp: Long): BankaraNode {
Splatoon3ApiCache.cachedXModeData.map { modeData -> Splatoon3Api.schedules!!.data.bankaraSchedules.nodes.map { modeData ->
val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC")
val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC")
if (timestamp in startTime..endTime) {
modeData.bankaraMatchSettings!!.map { matchSetting ->
if (matchSetting.bankaraMode == "CHALLENGE")
return modeData
}
}
}
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 startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC")
val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC")
if (timestamp in startTime..endTime) { if (timestamp in startTime..endTime) {
@ -54,18 +85,6 @@ object Splatoon3Api {
} }
throw Exception("No current mode found") throw Exception("No current mode found")
} }
private fun getSeriesMode(timestamp: Long): ModeData {
Splatoon3ApiCache.cachedCompetitiveSeriesModeData.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 { fun getRotationTime(timestamp: Long): String {
val modeData = getRegularMode(timestamp) val modeData = getRegularMode(timestamp)
val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC")
@ -75,16 +94,20 @@ object Splatoon3Api {
fun getRegularMapsFormatted(timestamp: Long): String { fun getRegularMapsFormatted(timestamp: Long): String {
val modeData = getRegularMode(timestamp) val modeData = getRegularMode(timestamp)
val map1 = modeData.map1!!.name.split(" ")[0] val map1 = modeData.regularMatchSetting.vsStages[0].name.split(" ")[0]
val map2 = modeData.map2!!.name.split(" ")[0] val map2 = modeData.regularMatchSetting.vsStages[1].name.split(" ")[0]
return "R: $map1, $map2" return "R: $map1, $map2"
} }
fun getOpenMapFormatted(timestamp: Long): String { fun getOpenMapFormatted(timestamp: Long): String {
val modeData = getOpenMode(timestamp) val modeData = getOpenMode(timestamp)
val map1 = modeData.map1!!.name.split(" ")[0] // FIXME: This may cause issues if there is a Splatfest going on
val map2 = modeData.map2!!.name.split(" ")[0] // TODO: Check if this works during splatfest
return "O: ${modeData.ruleSetName}: $map1, $map2" // The Open Mode should always be the second mode in the list
// FIXME: Add check if 2nd itm in list is open mode
val map1 = modeData.bankaraMatchSettings!![1].vsStages[0].name.split(" ")[0]
val map2 = modeData.bankaraMatchSettings[1].vsStages[1].name.split(" ")[0]
return "O: ${modeData.bankaraMatchSettings[1].vsRule.name}: $map1, $map2"
.replace("Rainmaker", "RMK") .replace("Rainmaker", "RMK")
.replace("Tower Control", "TC") .replace("Tower Control", "TC")
.replace("Splat Zones", "SZ") .replace("Splat Zones", "SZ")
@ -93,9 +116,11 @@ object Splatoon3Api {
fun getSeriesMapsFormatted(timestamp: Long): String { fun getSeriesMapsFormatted(timestamp: Long): String {
val modeData = getSeriesMode(timestamp) val modeData = getSeriesMode(timestamp)
val map1 = modeData.map1!!.name.split(" ")[0] // FIXME: This may cause issues if there is a Splatfest going on
val map2 = modeData.map2!!.name.split(" ")[0] // TODO: Check all the same things as in getOpenMapFormatted
return "S: ${modeData.ruleSetName}: $map1, $map2" val map1 = modeData.bankaraMatchSettings!![0].vsStages[0].name.split(" ")[0]
val map2 = modeData.bankaraMatchSettings[0].vsStages[1].name.split(" ")[0]
return "S: ${modeData.bankaraMatchSettings[0].vsRule.name}: $map1, $map2"
.replace("Rainmaker", "RMK") .replace("Rainmaker", "RMK")
.replace("Tower Control", "TC") .replace("Tower Control", "TC")
.replace("Splat Zones", "SZ") .replace("Splat Zones", "SZ")
@ -104,9 +129,9 @@ object Splatoon3Api {
fun getXMapFormatted(timestamp: Long): String { fun getXMapFormatted(timestamp: Long): String {
val modeData = getXMode(timestamp) val modeData = getXMode(timestamp)
val map1 = modeData.map1!!.name.split(" ")[0] val map1 = modeData.xMatchSetting.vsStages[0].name.split(" ")[0]
val map2 = modeData.map2!!.name.split(" ")[0] val map2 = modeData.xMatchSetting.vsStages[1].name.split(" ")[0]
return "X: ${modeData.ruleSetName}: $map1, $map2" return "X: ${modeData.xMatchSetting.vsRule.name}: $map1, $map2"
.replace("Rainmaker", "RMK") .replace("Rainmaker", "RMK")
.replace("Tower Control", "TC") .replace("Tower Control", "TC")
.replace("Splat Zones", "SZ") .replace("Splat Zones", "SZ")

View file

@ -0,0 +1,37 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class BankaraMatchSetting(
@SerialName("bankaraMode")
val bankaraMode: String,
@SerialName("__isVsSetting")
val isVsSetting: String,
@SerialName("__typename")
val typename: String,
@SerialName("vsRule")
val vsRule: VsRule,
@SerialName("vsStages")
val vsStages: List<VsStage>
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class BankaraNode(
@SerialName("bankaraMatchSettings")
val bankaraMatchSettings: List<BankaraMatchSetting>?,
@SerialName("endTime")
val endTime: String,
@SerialName("festMatchSettings")
val festMatchSettings: List<FestMatchSettingX>?,
@SerialName("startTime")
val startTime: String
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class BankaraSchedules(
@SerialName("nodes")
val nodes: List<BankaraNode>
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.schedule package net.moonleay.liljudd.data.api.splatoon3ink.schedules
import io.ktor.http.*
data class MapData( import kotlinx.serialization.SerialName
val stageID: Int, import kotlinx.serialization.Serializable
val image: Url,
val name: String, @Serializable
data class BannerImage(
@SerialName("url")
val url: String,
) )

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class BigRunSchedules(
@SerialName("nodes")
val nodes: List<SalmonRunNode>
)

View file

@ -0,0 +1,31 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Boss(
@SerialName("id")
val id: String,
@SerialName("name")
val name: String
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,11 +16,20 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.splatfest package net.moonleay.liljudd.data.api.splatoon3ink.schedules
data class SplatfestColor(
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Color(
@SerialName("a")
val a: Int, val a: Int,
@SerialName("b")
val b: Double, val b: Double,
@SerialName("g")
val g: Double, val g: Double,
val r: Double, @SerialName("r")
val r: Double
) )

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CoopGroupingSchedule(
@SerialName("bannerImage")
val bannerImage: BannerImage?, // is null
@SerialName("bigRunSchedules")
val bigRunSchedules: BigRunSchedules,
@SerialName("regularSchedules")
val regularSchedules: RegularSchedules,
@SerialName("teamContestSchedules")
val teamContestSchedules: TeamContestSchedules?
)

View file

@ -0,0 +1,39 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CoopSetting(
@SerialName("boss")
val boss: String?, // Not really String, but idk
@SerialName("coopStage")
val coopStage: CoopStage,
@SerialName("__isCoopSetting")
val isCoopSetting: String,
@SerialName("rule")
val rule: String,
@SerialName("__typename")
val typename: String,
@SerialName("weapons")
val weapons: List<Weapon>
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CoopStage(
@SerialName("id")
val id: String,
@SerialName("image")
val image: Image,
@SerialName("name")
val name: String,
@SerialName("thumbnailImage")
val thumbnailImage: ThumbnailImage
)

View file

@ -0,0 +1,43 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CurrentFest(
@SerialName("endTime")
val endTime: String,
@SerialName("id")
val id: String,
@SerialName("midtermTime")
val midtermTime: String,
@SerialName("startTime")
val startTime: String,
@SerialName("state")
val state: String,
@SerialName("teams")
val teams: List<Team>,
@SerialName("title")
val title: String,
@SerialName("tricolorStage")
val tricolorStage: TricolorStage
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CurrentPlayer(
@SerialName("userIcon")
val userIcon: UserIcon
)

View file

@ -0,0 +1,31 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class EventNode(
@SerialName("leagueMatchSetting")
val leagueMatchSetting: LeagueMatchSetting,
@SerialName("timePeriods")
val timePeriods: List<TimePeriod>
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class EventSchedules(
@SerialName("nodes")
val nodes: List<EventNode>
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class FestMatchSettingX(
@SerialName("__isVsSetting")
val isVsSetting: String,
@SerialName("__typename")
val typename: String,
@SerialName("vsRule")
val vsRule: VsRule,
@SerialName("vsStages")
val vsStages: List<VsStage>
)

View file

@ -0,0 +1,28 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class FestMatchSettingXX(
@SerialName("__typename")
val typename: String
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,19 +16,18 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.schedule package net.moonleay.liljudd.data.api.splatoon3ink.schedules
import io.ktor.http.*
data class ShiftData( import kotlinx.serialization.SerialName
val startTime: String, import kotlinx.serialization.Serializable
@Serializable
data class FestNode(
@SerialName("endTime")
val endTime: String, val endTime: String,
val __splatoon3ink_king_salmonid_guess: String, @SerialName("festMatchSettings")
val __typename: String, val festMatchSettings: FestMatchSettingX?,
val stageName: String, @SerialName("startTime")
val image: Url, val startTime: String
val weapon1: WeaponData,
val weapon2: WeaponData,
val weapon3: WeaponData,
val weapon4: WeaponData,
) )

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class FestSchedules(
@SerialName("nodes")
val nodes: List<FestNode>
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,13 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.splatnet package net.moonleay.liljudd.data.api.splatoon3ink.schedules
import io.ktor.http.*
data class BrandData( import kotlinx.serialization.SerialName
val name: String, import kotlinx.serialization.Serializable
val image: Url,
val usualGearPower: GearAbilityData?, @Serializable
val saleEndTime: String?, data class Image(
@SerialName("url")
val url: String
) )

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,19 +16,24 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.schedule package net.moonleay.liljudd.data.api.splatoon3ink.schedules
data class ChallengeModeData(
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class LeagueMatchEvent(
@SerialName("desc")
val desc: String,
@SerialName("id")
val id: String,
@SerialName("leagueMatchEventId")
val leagueMatchEventId: String, val leagueMatchEventId: String,
@SerialName("name")
val name: String, val name: String,
val description: String, @SerialName("regulation")
val regulation: String, val regulation: String,
val map1: MapData?, @SerialName("regulationUrl")
val map2: MapData?, val regulationUrl: String? // is null
val __typename: String,
val ruleSet: String,
val ruleSetName: String,
val timePeriod1: TimePeriodData,
val timePeriod2: TimePeriodData,
val timePeriod3: TimePeriodData,
) )

View file

@ -0,0 +1,37 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class LeagueMatchSetting(
@SerialName("__isVsSetting")
val isVsSetting: String,
@SerialName("leagueMatchEvent")
val leagueMatchEvent: LeagueMatchEvent,
@SerialName("__typename")
val typename: String,
@SerialName("vsRule")
val vsRule: VsRule,
@SerialName("vsStages")
val vsStages: List<VsStage>
)

View file

@ -0,0 +1,37 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class MapNode(
@SerialName("id")
val id: String,
@SerialName("name")
val name: String,
@SerialName("originalImage")
val originalImage: OriginalImage,
@SerialName("stats")
val stats: String?, // is null
@SerialName("vsStageId")
val vsStageId: Int
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.splatnet package net.moonleay.liljudd.data.api.splatoon3ink.schedules
import io.ktor.http.*
data class GearAbilityData( import kotlinx.serialization.SerialName
val name: String, import kotlinx.serialization.Serializable
val description: String?,
val image: Url, @Serializable
data class OriginalImage(
@SerialName("url")
val url: String
) )

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class RegularMatchSetting(
@SerialName("__isVsSetting")
val isVsSetting: String,
@SerialName("__typename")
val typename: String,
@SerialName("vsRule")
val vsRule: VsRule,
@SerialName("vsStages")
val vsStages: List<VsStage>
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class RegularNode(
@SerialName("endTime")
val endTime: String,
@SerialName("festMatchSettings")
val festMatchSettings: FestMatchSettingXX?,
@SerialName("regularMatchSetting")
val regularMatchSetting: RegularMatchSetting,
@SerialName("startTime")
val startTime: String
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class RegularSchedules(
@SerialName("nodes")
val nodes: List<SalmonRunNode>
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class RegularSchedulesX(
@SerialName("nodes")
val nodes: List<RegularNode>
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class SalmonRunNode(
@SerialName("endTime")
val endTime: String,
@SerialName("setting")
val setting: Setting,
@SerialName("__splatoon3ink_king_salmonid_guess")
val splatoon3inkKingSalmonidGuess: String,
@SerialName("startTime")
val startTime: String
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Schedules(
@SerialName("data")
val data: SchedulesData
)

View file

@ -0,0 +1,45 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class SchedulesData(
@SerialName("bankaraSchedules")
val bankaraSchedules: BankaraSchedules,
@SerialName("coopGroupingSchedule")
val coopGroupingSchedule: CoopGroupingSchedule,
@SerialName("currentFest")
val currentFest: CurrentFest?,
@SerialName("currentPlayer")
val currentPlayer: CurrentPlayer,
@SerialName("eventSchedules")
val eventSchedules: EventSchedules,
@SerialName("festSchedules")
val festSchedules: FestSchedules,
@SerialName("regularSchedules")
val regularSchedules: RegularSchedulesX,
@SerialName("vsStages")
val vsStages: VsStages,
@SerialName("xSchedules")
val xSchedules: XSchedules
)

View file

@ -0,0 +1,37 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Setting(
@SerialName("boss")
val boss: Boss,
@SerialName("coopStage")
val coopStage: CoopStage,
@SerialName("__isCoopSetting")
val isCoopSetting: String,
@SerialName("__typename")
val typename: String,
@SerialName("weapons")
val weapons: List<Weapon>
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,18 +16,18 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.splatfest package net.moonleay.liljudd.data.api.splatoon3ink.schedules
import io.ktor.http.*
data class SplatfestData( import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Team(
@SerialName("color")
val color: Color,
@SerialName("id")
val id: String, val id: String,
val state: String, // @SerialName("myVoteState")
val startTime: String, // val myVoteState: Any?
val endTime: String,
val title: String,
val image: Url,
val team1: SplatfestTeamData,
val team2: SplatfestTeamData,
val team3: SplatfestTeamData,
) )

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,9 +16,18 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.schedule package net.moonleay.liljudd.data.api.splatoon3ink.schedules
data class TimePeriodData(
val startTime: String, import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class TeamContestNode(
@SerialName("endTime")
val endTime: String, val endTime: String,
@SerialName("setting")
val setting: CoopSetting,
@SerialName("startTime")
val startTime: String
) )

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class TeamContestSchedules(
@SerialName("nodes")
val nodes: List<TeamContestNode> // This is a placeholder.
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class ThumbnailImage(
@SerialName("url")
val url: String
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,15 +16,16 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.schedule package net.moonleay.liljudd.data.api.splatoon3ink.schedules
data class ModeData(
val startTime: String, import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class TimePeriod(
@SerialName("endTime")
val endTime: String, val endTime: String,
val matchType: String, @SerialName("startTime")
val map1: MapData?, val startTime: String
val map2: MapData?,
val ruleSetName: String,
val ruleSet: String,
val mode: String,
) )

View file

@ -0,0 +1,33 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class TricolorStage(
@SerialName("id")
val id: String,
@SerialName("image")
val image: Image,
@SerialName("name")
val name: String
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,11 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.entry.schedule package net.moonleay.liljudd.data.api.splatoon3ink.schedules
import io.ktor.http.*
data class WeaponData( import kotlinx.serialization.SerialName
val name: String, import kotlinx.serialization.Serializable
val image: Url,
@Serializable
data class UserIcon(
@SerialName("url")
val url: String
) )

View file

@ -0,0 +1,33 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class VsRule(
@SerialName("id")
val id: String,
@SerialName("name")
val name: String,
@SerialName("rule")
val rule: String
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class VsStage(
@SerialName("id")
val id: String,
@SerialName("image")
val image: Image,
@SerialName("name")
val name: String,
@SerialName("vsStageId")
val vsStageId: Int
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class VsStages(
@SerialName("nodes")
val nodes: List<MapNode>
)

View file

@ -0,0 +1,33 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Weapon(
@SerialName("image")
val image: Image,
@SerialName("name")
val name: String,
@SerialName("__splatoon3ink_id")
val splatoon3inkId: String
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class XMatchSetting(
@SerialName("__isVsSetting")
val isVsSetting: String,
@SerialName("__typename")
val typename: String,
@SerialName("vsRule")
val vsRule: VsRule,
@SerialName("vsStages")
val vsStages: List<VsStage>
)

View file

@ -0,0 +1,35 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class XNode(
@SerialName("endTime")
val endTime: String,
@SerialName("festMatchSettings")
val festMatchSettings: FestMatchSettingXX?,
@SerialName("startTime")
val startTime: String,
@SerialName("xMatchSetting")
val xMatchSetting: XMatchSetting
)

View file

@ -0,0 +1,29 @@
/*
* 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.data.api.splatoon3ink.schedules
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class XSchedules(
@SerialName("nodes")
val nodes: List<XNode>
)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,13 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database package net.moonleay.liljudd.data.database
import net.moonleay.lilJudd.data.database.tables.MatchPlanningData import net.moonleay.liljudd.data.database.tables.MatchPlanningData
import net.moonleay.lilJudd.data.database.tables.PlanningNotifierRoles import net.moonleay.liljudd.data.database.tables.PlanningNotifierRoles
import net.moonleay.lilJudd.data.database.tables.TimePlanningChannels import net.moonleay.liljudd.data.database.tables.TimePlanningChannels
import net.moonleay.lilJudd.data.database.tables.TimePlanningMessages import net.moonleay.liljudd.data.database.tables.TimePlanningMessages
import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.transactions.transaction

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.entry package net.moonleay.liljudd.data.database.entry
data class MatchPlanningDataData( data class MatchPlanningDataData(
val id: Int, val id: Int,

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.entry package net.moonleay.liljudd.data.database.entry
data class PlanningNotifierRolesData( data class PlanningNotifierRolesData(
val id: Int, // The id of the entry val id: Int, // The id of the entry

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.entry package net.moonleay.liljudd.data.database.entry
data class TimePlanningChannelsData( data class TimePlanningChannelsData(
val id: Int, val id: Int,

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.entry package net.moonleay.liljudd.data.database.entry
data class TimePlanningMessagesData( data class TimePlanningMessagesData(
val id: Int, // The id of the entry val id: Int, // The id of the entry

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.repository package net.moonleay.liljudd.data.database.repository
import net.moonleay.lilJudd.data.database.entry.MatchPlanningDataData import net.moonleay.liljudd.data.database.entry.MatchPlanningDataData
import net.moonleay.lilJudd.data.database.tables.MatchPlanningData import net.moonleay.liljudd.data.database.tables.MatchPlanningData
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.transactions.transaction
object MatchPlanningDataRepository { object MatchPlanningDataRepository {
@ -51,7 +54,7 @@ object MatchPlanningDataRepository {
fun get(id: Int): MatchPlanningDataData? = fun get(id: Int): MatchPlanningDataData? =
transaction { transaction {
MatchPlanningData.select { MatchPlanningData.id eq id }.firstOrNull()?.let { MatchPlanningData.selectAll().where { MatchPlanningData.id eq id }.firstOrNull()?.let {
MatchPlanningDataData( MatchPlanningDataData(
it[MatchPlanningData.id], it[MatchPlanningData.id],
it[MatchPlanningData.serverid], it[MatchPlanningData.serverid],
@ -69,7 +72,7 @@ object MatchPlanningDataRepository {
fun getFromMessageInChannelInServer(messageID: Long, channelID: Long, serverID: Long): MatchPlanningDataData? = fun getFromMessageInChannelInServer(messageID: Long, channelID: Long, serverID: Long): MatchPlanningDataData? =
transaction { transaction {
MatchPlanningData.select { MatchPlanningData.selectAll().where {
MatchPlanningData.messageid eq (messageID) and ( MatchPlanningData.messageid eq (messageID) and (
MatchPlanningData.serverid eq (serverID)) and ( MatchPlanningData.serverid eq (serverID)) and (
MatchPlanningData.channelid eq (channelID)) MatchPlanningData.channelid eq (channelID))
@ -98,15 +101,15 @@ object MatchPlanningDataRepository {
fun write(data: MatchPlanningDataData): Int = fun write(data: MatchPlanningDataData): Int =
transaction { transaction {
MatchPlanningData.insert { MatchPlanningData.insert {
it[MatchPlanningData.serverid] = data.serverID it[serverid] = data.serverID
it[MatchPlanningData.channelid] = data.channelID it[channelid] = data.channelID
it[MatchPlanningData.matchtype] = data.matchType it[matchtype] = data.matchType
it[MatchPlanningData.registererid] = data.registererID it[registererid] = data.registererID
it[MatchPlanningData.roleid] = data.roleID it[roleid] = data.roleID
it[MatchPlanningData.opponentName] = data.opponentName it[opponentName] = data.opponentName
it[MatchPlanningData.messageid] = data.messageID it[messageid] = data.messageID
it[MatchPlanningData.timestamp] = data.timestamp it[timestamp] = data.timestamp
it[MatchPlanningData.jobstr] = data.jobString it[jobstr] = data.jobString
} get MatchPlanningData.id } get MatchPlanningData.id
} }
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.repository package net.moonleay.liljudd.data.database.repository
import net.moonleay.lilJudd.data.database.entry.PlanningNotifierRolesData import net.moonleay.liljudd.data.database.entry.PlanningNotifierRolesData
import net.moonleay.lilJudd.data.database.tables.PlanningNotifierRoles import net.moonleay.liljudd.data.database.tables.PlanningNotifierRoles
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.transactions.transaction
object PlanningNotifierRolesRepository { object PlanningNotifierRolesRepository {
@ -46,9 +49,7 @@ object PlanningNotifierRolesRepository {
fun getForChannel(channelID: Long): PlanningNotifierRolesData? = fun getForChannel(channelID: Long): PlanningNotifierRolesData? =
transaction { transaction {
PlanningNotifierRoles.select { PlanningNotifierRoles.selectAll().where { PlanningNotifierRoles.channelid eq channelID }.firstOrNull()?.let {
PlanningNotifierRoles.channelid eq channelID
}.firstOrNull()?.let {
PlanningNotifierRolesData( PlanningNotifierRolesData(
it[PlanningNotifierRoles.id], it[PlanningNotifierRoles.id],
it[PlanningNotifierRoles.serverid], it[PlanningNotifierRoles.serverid],
@ -61,9 +62,9 @@ object PlanningNotifierRolesRepository {
fun getForChannelInServer(channelID: Long, serverID: Long): PlanningNotifierRolesData? = fun getForChannelInServer(channelID: Long, serverID: Long): PlanningNotifierRolesData? =
transaction { transaction {
PlanningNotifierRoles.select { PlanningNotifierRoles.selectAll()
PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) .where { PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) }
}.firstOrNull()?.let { .firstOrNull()?.let {
PlanningNotifierRolesData( PlanningNotifierRolesData(
it[PlanningNotifierRoles.id], it[PlanningNotifierRoles.id],
it[PlanningNotifierRoles.serverid], it[PlanningNotifierRoles.serverid],
@ -76,22 +77,23 @@ object PlanningNotifierRolesRepository {
fun existsInChannel(channelID: Long): Boolean = fun existsInChannel(channelID: Long): Boolean =
transaction { transaction {
PlanningNotifierRoles.select { PlanningNotifierRoles.channelid eq channelID }.count() > 0 PlanningNotifierRoles.selectAll().where { PlanningNotifierRoles.channelid eq channelID }.count() > 0
} }
fun existsInChannelFromSever(channelID: Long, serverID: Long): Boolean = fun existsInChannelFromSever(channelID: Long, serverID: Long): Boolean =
transaction { transaction {
PlanningNotifierRoles.select { PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) } PlanningNotifierRoles.selectAll()
.where { PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) }
.count() > 0 .count() > 0
} }
fun write(data: PlanningNotifierRolesData) { fun write(data: PlanningNotifierRolesData) {
transaction { transaction {
PlanningNotifierRoles.insert { PlanningNotifierRoles.insert {
it[PlanningNotifierRoles.serverid] = data.serverID it[serverid] = data.serverID
it[PlanningNotifierRoles.channelid] = data.channelID it[channelid] = data.channelID
it[PlanningNotifierRoles.hastimeroleid] = data.hasTimeRoleID it[hastimeroleid] = data.hasTimeRoleID
it[PlanningNotifierRoles.wantstobenotifiedid] = data.wantsToBeNotifiedID it[wantstobenotifiedid] = data.wantsToBeNotifiedID
} get PlanningNotifierRoles.id } get PlanningNotifierRoles.id
} }
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.repository package net.moonleay.liljudd.data.database.repository
import net.moonleay.lilJudd.data.database.entry.TimePlanningChannelsData import net.moonleay.liljudd.data.database.entry.TimePlanningChannelsData
import net.moonleay.lilJudd.data.database.tables.TimePlanningChannels import net.moonleay.liljudd.data.database.tables.TimePlanningChannels
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.transactions.transaction
object TimePlanningChannelsRepository { object TimePlanningChannelsRepository {
@ -43,7 +46,8 @@ object TimePlanningChannelsRepository {
fun exists(channelID: Long, serverID: Long): Boolean = fun exists(channelID: Long, serverID: Long): Boolean =
transaction { transaction {
TimePlanningChannels.select { TimePlanningChannels.channelid eq channelID and (TimePlanningChannels.serverid eq serverID) } TimePlanningChannels.selectAll()
.where { TimePlanningChannels.channelid eq channelID and (TimePlanningChannels.serverid eq serverID) }
.firstOrNull() != null .firstOrNull() != null
} }
@ -55,15 +59,15 @@ object TimePlanningChannelsRepository {
fun deleteFromChannelInServer(channelID: Long, serverID: Long) { fun deleteFromChannelInServer(channelID: Long, serverID: Long) {
transaction { transaction {
TimePlanningChannels.deleteWhere { TimePlanningChannels.channelid eq channelID and (TimePlanningChannels.serverid eq serverID) } TimePlanningChannels.deleteWhere { channelid eq channelID and (serverid eq serverID) }
} }
} }
fun write(data: TimePlanningChannelsData): Int = fun write(data: TimePlanningChannelsData): Int =
transaction { transaction {
TimePlanningChannels.insert { TimePlanningChannels.insert {
it[TimePlanningChannels.serverid] = data.serverID it[serverid] = data.serverID
it[TimePlanningChannels.channelid] = data.channelID it[channelid] = data.channelID
} get TimePlanningChannels.id } get TimePlanningChannels.id
} }
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,13 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.repository package net.moonleay.liljudd.data.database.repository
import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData
import net.moonleay.lilJudd.data.database.tables.TimePlanningMessages import net.moonleay.liljudd.data.database.tables.TimePlanningMessages
import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.transactions.transaction
object TimePlanningMessagesRepository { object TimePlanningMessagesRepository {
@ -40,9 +40,7 @@ object TimePlanningMessagesRepository {
fun getWeek(stamp: Long): List<TimePlanningMessagesData> { fun getWeek(stamp: Long): List<TimePlanningMessagesData> {
val dataList = mutableListOf<TimePlanningMessagesData>() val dataList = mutableListOf<TimePlanningMessagesData>()
transaction { transaction {
for (pnr in TimePlanningMessages.select { for (pnr in TimePlanningMessages.selectAll().where { TimePlanningMessages.weekstamp eq (stamp) }) {
TimePlanningMessages.weekstamp eq (stamp)
}) {
dataList.add( dataList.add(
TimePlanningMessagesData( TimePlanningMessagesData(
pnr[TimePlanningMessages.id], pnr[TimePlanningMessages.id],
@ -59,9 +57,8 @@ object TimePlanningMessagesRepository {
fun getWeekInChannel(stamp: Long, channelID: Long): TimePlanningMessagesData? = fun getWeekInChannel(stamp: Long, channelID: Long): TimePlanningMessagesData? =
transaction { transaction {
TimePlanningMessages.select { TimePlanningMessages.selectAll()
TimePlanningMessages.weekstamp eq (stamp) and (TimePlanningMessages.channelid eq channelID) .where { TimePlanningMessages.weekstamp eq (stamp) and (TimePlanningMessages.channelid eq channelID) }.firstOrNull()?.let {
}.firstOrNull()?.let {
TimePlanningMessagesData( TimePlanningMessagesData(
it[TimePlanningMessages.id], it[TimePlanningMessages.id],
it[TimePlanningMessages.serverid], it[TimePlanningMessages.serverid],

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.tables package net.moonleay.liljudd.data.database.tables
import org.jetbrains.exposed.sql.Table import org.jetbrains.exposed.sql.Table

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.tables package net.moonleay.liljudd.data.database.tables
import org.jetbrains.exposed.sql.Table import org.jetbrains.exposed.sql.Table

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.tables package net.moonleay.liljudd.data.database.tables
import org.jetbrains.exposed.sql.Table import org.jetbrains.exposed.sql.Table

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.database.tables package net.moonleay.liljudd.data.database.tables
import org.jetbrains.exposed.sql.Table import org.jetbrains.exposed.sql.Table

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions package net.moonleay.liljudd.extensions
import com.kotlindiscord.kord.extensions.commands.Arguments import com.kotlindiscord.kord.extensions.commands.Arguments
import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.enumChoice import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.enumChoice
@ -26,12 +26,12 @@ import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import com.kotlindiscord.kord.extensions.utils.hasPermission import com.kotlindiscord.kord.extensions.utils.hasPermission
import dev.kord.common.entity.Permission import dev.kord.common.entity.Permission
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.extensions.component.EnableOrDisable import net.moonleay.liljudd.extensions.component.EnableOrDisable
import net.moonleay.lilJudd.features.component.FeatureEnum import net.moonleay.liljudd.features.component.FeatureEnum
import net.moonleay.lilJudd.features.component.FeatureManager import net.moonleay.liljudd.features.component.FeatureManager
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
class FeatureManageExtension : Extension() { class FeatureManageExtension : Extension() {
@ -51,7 +51,7 @@ class FeatureManageExtension : Extension() {
this.respond { this.respond {
this.embed { this.embed {
this.color = EmbedColor.ERROR.color this.color = EmbedColor.ERROR.color
this.title = "403: Forbidden" this.title = "401: Not Authorized"
this.description = this.description =
"You cannot edit features, as you don't have the Administrator permission." "You cannot edit features, as you don't have the Administrator permission."
this.footer { this.footer {

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,13 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions package net.moonleay.liljudd.extensions
import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.util.EmbedColor
import net.moonleay.liljudd.build.BuildConstants import net.moonleay.liljudd.build.BuildConstants
import net.moonleay.liljudd.util.EmbedColor
class InfoExtension : Extension() { class InfoExtension : Extension() {
override val name = "info" override val name = "info"

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions package net.moonleay.liljudd.extensions
import com.kotlindiscord.kord.extensions.commands.Arguments import com.kotlindiscord.kord.extensions.commands.Arguments
import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.enumChoice import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.enumChoice
@ -26,15 +26,15 @@ import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import dev.kord.core.behavior.createRole import dev.kord.core.behavior.createRole
import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.actionRow
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.data.database.entry.MatchPlanningDataData import net.moonleay.liljudd.data.database.entry.MatchPlanningDataData
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository
import net.moonleay.lilJudd.extensions.component.MatchTypes import net.moonleay.liljudd.extensions.component.MatchTypes
import net.moonleay.lilJudd.jobs.MatchJob import net.moonleay.liljudd.jobs.MatchJob
import net.moonleay.lilJudd.jobs.component.JobManager import net.moonleay.liljudd.jobs.component.JobManager
import net.moonleay.lilJudd.util.EmbedColor import net.moonleay.liljudd.util.EmbedColor
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
import net.moonleay.lilJudd.util.MessageUtil import net.moonleay.liljudd.util.MessageUtil
import net.moonleay.lilJudd.util.TimeUtil import net.moonleay.liljudd.util.TimeUtil
class MatchExtension : Extension() { class MatchExtension : Extension() {

View file

@ -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"
}
}
}

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions package net.moonleay.liljudd.extensions
import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
@ -26,10 +26,10 @@ import dev.kord.core.behavior.channel.createMessage
import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.actionRow
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData
import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository import net.moonleay.liljudd.data.database.repository.TimePlanningMessagesRepository
import net.moonleay.lilJudd.util.* import net.moonleay.liljudd.util.*
import java.time.ZoneId import java.time.ZoneId
import java.time.ZonedDateTime import java.time.ZonedDateTime
@ -41,7 +41,7 @@ class SendPlannerExtension : Extension() {
get() = false get() = false
override suspend fun setup() { override suspend fun setup() {
publicSlashCommand() { publicSlashCommand {
name = "sendplanner" name = "sendplanner"
description = "Send the planner for the current week" description = "Send the planner for the current week"
this.action { this.action {
@ -49,13 +49,31 @@ class SendPlannerExtension : Extension() {
.hasPermission(Permission.Administrator) .hasPermission(Permission.Administrator)
) { ) {
val res = this.respond { val res = this.respond {
this.content = "You need to be an administrator to use this command." this.embed {
this.color = EmbedColor.ERROR.color
this.title = "401: Not Authorized"
this.description =
"You need the Administrator permission to use this command."
this.footer {
this.icon = user.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(user)
}
}
} }
res.delete() res.delete()
return@action return@action
} }
val res = this.respond { val res = this.respond {
this.content = "OK." this.embed {
this.color = EmbedColor.INFO.color
this.title = "200: Success"
this.description = "Sending the planner.\n" +
"This may take a while, please be patient."
this.footer {
this.icon = user.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(user)
}
}
} }
res.delete() // Delete the response res.delete() // Delete the response
val c = this.getChannel().asChannel() val c = this.getChannel().asChannel()

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,17 +16,17 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions package net.moonleay.liljudd.extensions
import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import com.kotlindiscord.kord.extensions.utils.hasPermission import com.kotlindiscord.kord.extensions.utils.hasPermission
import dev.kord.common.entity.Permission import dev.kord.common.entity.Permission
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.liljudd.features.AvailabilityManager
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
class UpdateRolesExtension : Extension() { class UpdateRolesExtension : Extension() {
override val name = "updateroles" override val name = "updateroles"
@ -34,7 +34,7 @@ class UpdateRolesExtension : Extension() {
get() = false get() = false
override suspend fun setup() { override suspend fun setup() {
publicSlashCommand() { publicSlashCommand {
name = "updateroles" name = "updateroles"
description = "Update the roles of the members in the current server" description = "Update the roles of the members in the current server"
this.action { this.action {
@ -44,9 +44,9 @@ class UpdateRolesExtension : Extension() {
this.respond { this.respond {
this.embed { this.embed {
this.color = EmbedColor.ERROR.color this.color = EmbedColor.ERROR.color
this.title = "403: Forbidden" this.title = "401: Not Authorized"
this.description = this.description =
"You cannot update roles, as you don't have the Administrator permission." "You need the Administrator permission to use this command."
this.footer { this.footer {
this.icon = user.asUser().avatar?.cdnUrl?.toUrl() this.icon = user.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(user) this.text = MessageUtil.getFooter(user)

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions.component package net.moonleay.liljudd.extensions.component
import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.extensions.component package net.moonleay.liljudd.extensions.component
import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.data.api.type package net.moonleay.liljudd.extensions.component
enum class ApiDataType { import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum
SCHEDULES,
SPLATNETGEAR, enum class SplatoonOnlineMode(override val readableName: String) : ChoiceEnum {
COOP, ALL("All Modes"),
SPLATFESTS, REGULAR("Regular Battle"),
ALL SERIES("Ranked Battle (Series)"),
OPEN("Ranked Battle (Open)"),
X("X Battle"),
SALMON_RUN("Salmon Run"),
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.features package net.moonleay.liljudd.features
import com.kotlindiscord.kord.extensions.utils.isNullOrBot import com.kotlindiscord.kord.extensions.utils.isNullOrBot
import dev.inmo.krontab.buildSchedule import dev.inmo.krontab.buildSchedule
@ -29,22 +29,22 @@ import dev.kord.core.entity.channel.Channel
import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.channel.MessageChannel
import dev.kord.gateway.PrivilegedIntent import dev.kord.gateway.PrivilegedIntent
import dev.kord.rest.builder.message.EmbedBuilder import dev.kord.rest.builder.message.EmbedBuilder
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.data.database.entry.PlanningNotifierRolesData import net.moonleay.liljudd.data.database.entry.PlanningNotifierRolesData
import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData
import net.moonleay.lilJudd.data.database.repository.PlanningNotifierRolesRepository import net.moonleay.liljudd.data.database.repository.PlanningNotifierRolesRepository
import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository import net.moonleay.liljudd.data.database.repository.TimePlanningMessagesRepository
import net.moonleay.lilJudd.extensions.FeatureManageExtension import net.moonleay.liljudd.extensions.FeatureManageExtension
import net.moonleay.lilJudd.features.component.FeatureEnum import net.moonleay.liljudd.features.component.FeatureEnum
import net.moonleay.lilJudd.features.component.IFeature import net.moonleay.liljudd.features.component.IFeature
import net.moonleay.lilJudd.util.* import net.moonleay.liljudd.util.*
import java.time.ZonedDateTime import java.time.ZonedDateTime
object AvailabilityManager : IFeature { object AvailabilityManager : IFeature {
// This runs during the cronjob. // This runs during the cronjob.
suspend fun runThread() { suspend fun runThread() {
Logger.out("Starting to update roles...") Logger.out("Updating match roles")
// ChannelID, Data // ChannelID, Data
val messages = TimePlanningMessagesRepository.getWeek(TimeUtil.getWeekStamp().toEpochSecond()) val messages = TimePlanningMessagesRepository.getWeek(TimeUtil.getWeekStamp().toEpochSecond())
@ -70,7 +70,7 @@ object AvailabilityManager : IFeature {
} }
this.updateInChannel(snf, data, roleData) this.updateInChannel(snf, data, roleData)
} }
Logger.out("Done! Until tomorrow! <3 ") Logger.out("Finished updating roles")
} }
suspend fun updateInChannel(snf: Snowflake) { suspend fun updateInChannel(snf: Snowflake) {
@ -162,7 +162,7 @@ object AvailabilityManager : IFeature {
// Register the cronjob to run at 1AM UTC every day // Register the cronjob to run at 1AM UTC every day
override suspend fun registerThread() { override suspend fun registerThread() {
Logger.out("Adding availability scheduler...") Logger.out("Registering daily planning message role update coroutine")
val scheduler = buildSchedule("0 0 2 * * *") // 0 0 4 * * * 0o 1w // 0o is UTC val scheduler = buildSchedule("0 0 2 * * *") // 0 0 4 * * * 0o 1w // 0o is UTC
scheduler.doInfinity { scheduler.doInfinity {
this.runThread() this.runThread()
@ -176,7 +176,7 @@ object AvailabilityManager : IFeature {
ch: Channel, ch: Channel,
args: FeatureManageExtension.FeatureManagerArgs args: FeatureManageExtension.FeatureManagerArgs
): EmbedBuilder { ): EmbedBuilder {
var alreadyExists = PlanningNotifierRolesRepository.existsInChannel(cID) val alreadyExists = PlanningNotifierRolesRepository.existsInChannel(cID)
// Check if the channel and guild already exist in the db // Check if the channel and guild already exist in the db
if (!alreadyExists) { if (!alreadyExists) {
// Create the roles in Discord // Create the roles in Discord

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,19 +16,19 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.features package net.moonleay.liljudd.features
import dev.kord.common.entity.Snowflake import dev.kord.common.entity.Snowflake
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.data.database.entry.MatchPlanningDataData import net.moonleay.liljudd.data.database.entry.MatchPlanningDataData
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository
import net.moonleay.lilJudd.jobs.MatchJob import net.moonleay.liljudd.jobs.MatchJob
import net.moonleay.lilJudd.jobs.component.JobManager import net.moonleay.liljudd.jobs.component.JobManager
import net.moonleay.lilJudd.util.Logger import net.moonleay.liljudd.util.Logger
object MatchManager { object MatchManager {
suspend fun update() { suspend fun update() {
Logger.out("Updating match roles...") Logger.out("Updating matches")
val dataList = MatchPlanningDataRepository.getAll() val dataList = MatchPlanningDataRepository.getAll()
for (data in dataList) { for (data in dataList) {
@ -41,7 +41,7 @@ object MatchManager {
} }
this.registerJob(data) this.registerJob(data)
} }
Logger.out("Done. Until next time! <3 ") Logger.out("Finished updating matches")
} }
private fun registerJob(data: MatchPlanningDataData) { private fun registerJob(data: MatchPlanningDataData) {

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.features package net.moonleay.liljudd.features
import dev.inmo.krontab.buildSchedule import dev.inmo.krontab.buildSchedule
import dev.inmo.krontab.doInfinity import dev.inmo.krontab.doInfinity
@ -29,19 +29,19 @@ import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.actionRow
import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.embed
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import net.moonleay.lilJudd.Bot import net.moonleay.liljudd.Bot
import net.moonleay.lilJudd.data.database.entry.TimePlanningChannelsData import net.moonleay.liljudd.data.database.entry.TimePlanningChannelsData
import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData
import net.moonleay.lilJudd.data.database.repository.PlanningNotifierRolesRepository import net.moonleay.liljudd.data.database.repository.PlanningNotifierRolesRepository
import net.moonleay.lilJudd.data.database.repository.TimePlanningChannelsRepository import net.moonleay.liljudd.data.database.repository.TimePlanningChannelsRepository
import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository import net.moonleay.liljudd.data.database.repository.TimePlanningMessagesRepository
import net.moonleay.lilJudd.extensions.FeatureManageExtension import net.moonleay.liljudd.extensions.FeatureManageExtension
import net.moonleay.lilJudd.features.component.FeatureEnum import net.moonleay.liljudd.features.component.FeatureEnum
import net.moonleay.lilJudd.features.component.IFeature import net.moonleay.liljudd.features.component.IFeature
import net.moonleay.lilJudd.util.EmbedColor import net.moonleay.liljudd.util.EmbedColor
import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.liljudd.util.EmbedUtil
import net.moonleay.lilJudd.util.Logger import net.moonleay.liljudd.util.Logger
import net.moonleay.lilJudd.util.MessageUtil import net.moonleay.liljudd.util.MessageUtil
import java.time.ZoneId import java.time.ZoneId
import java.time.ZonedDateTime import java.time.ZonedDateTime
@ -52,7 +52,7 @@ object TimeManager : IFeature {
// Register the cronjob to run at 0:01 AM UTC every Monday // Register the cronjob to run at 0:01 AM UTC every Monday
override suspend fun registerThread() { override suspend fun registerThread() {
Logger.out("Adding message scheduler...") Logger.out("Registering weekly planning message posting coroutine")
val scheduler = buildSchedule("0 0 1 * * * 0o 1w") // 0 0 4 * * * 0o 1w // 0o is UTC val scheduler = buildSchedule("0 0 1 * * * 0o 1w") // 0 0 4 * * * 0o 1w // 0o is UTC
scheduler.doInfinity { scheduler.doInfinity {
this.runThread() this.runThread()
@ -60,7 +60,7 @@ object TimeManager : IFeature {
} }
private suspend fun runThread() { private suspend fun runThread() {
Logger.out("Starting to notify...") Logger.out("Starting to send out weekly planning messages")
// ChannelID -> Data // ChannelID -> Data
val targetedChannels = TimePlanningChannelsRepository.getAll().associateBy { it.channelID } val targetedChannels = TimePlanningChannelsRepository.getAll().associateBy { it.channelID }
@ -72,7 +72,7 @@ object TimeManager : IFeature {
for (ch2 in targetedChannels.keys) { for (ch2 in targetedChannels.keys) {
val ch = Snowflake(ch2) val ch = Snowflake(ch2)
if (Bot.bot.kordRef.getChannel(ch) == null) if (Bot.bot.kordRef.getChannel(ch) == null)
continue // TODO: Check if the channel is valid in another shard continue
val c = Bot.bot.kordRef.getChannelOf<MessageChannel>(ch)!! val c = Bot.bot.kordRef.getChannelOf<MessageChannel>(ch)!!
msgStr = "" msgStr = ""
if (targetedRoles != null && targetedRoles.keys.contains(ch2) && targetedRoles[ch2] != null) { if (targetedRoles != null && targetedRoles.keys.contains(ch2) && targetedRoles[ch2] != null) {
@ -133,7 +133,7 @@ object TimeManager : IFeature {
} }
msgStr += "${it}:${msg.id.value};" msgStr += "${it}:${msg.id.value};"
then = then.plusDays(1).withHour(4).withMinute(0).withSecond(0) then = then.plusDays(1).withHour(4).withMinute(0).withSecond(0)
Logger.out("Finished sending day $it") Logger.out("Finished sending day $it in $ch")
delay(1000) delay(1000)
} }
@ -166,14 +166,14 @@ object TimeManager : IFeature {
EmbedColor.SUCCESS, EmbedColor.SUCCESS,
"200: Success", "200: Success",
"The feature was enabled in channel ${args.channel.data.name.value}", "The feature was enabled in channel ${args.channel.data.name.value}",
u.asUser().username + "#" + u.asUser().discriminator u.asUser().username
) )
} }
return MessageUtil.getEmbed( return MessageUtil.getEmbed(
EmbedColor.ERROR, EmbedColor.ERROR,
"403: Forbidden", "409: Conflict",
"The feature is already enabled in this channel.", "The feature is already enabled in this channel.",
u.asUser().username + "#" + u.asUser().discriminator u.asUser().username
) )
} }
@ -186,21 +186,21 @@ object TimeManager : IFeature {
): EmbedBuilder { ): EmbedBuilder {
// Check if entry exists in db // Check if entry exists in db
if (TimePlanningChannelsRepository.exists(cID, gID)) { if (TimePlanningChannelsRepository.exists(cID, gID)) {
// delete all entrys for this channel // delete all entries for this channel
TimePlanningChannelsRepository.deleteFromChannelInServer(cID, gID) TimePlanningChannelsRepository.deleteFromChannelInServer(cID, gID)
return MessageUtil.getEmbed( return MessageUtil.getEmbed(
EmbedColor.SUCCESS, EmbedColor.SUCCESS,
"200: Success", "200: Success",
"The feature was disabled.", "The feature was disabled.",
u.asUser().username + "#" + u.asUser().discriminator u.asUser().username
) )
} }
// Do nothing; not in db // Do nothing; not in db
return MessageUtil.getEmbed( return MessageUtil.getEmbed(
EmbedColor.ERROR, EmbedColor.ERROR,
"403: Forbidden", "409: Conflict",
"The feature is already disabled in this channel.", "The feature is already disabled in this channel.",
u.asUser().username + "#" + u.asUser().discriminator u.asUser().username
) )
} }
} }

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.features.component package net.moonleay.liljudd.features.component
import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.features.component package net.moonleay.liljudd.features.component
import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.liljudd.features.AvailabilityManager
import net.moonleay.lilJudd.features.TimeManager import net.moonleay.liljudd.features.TimeManager
object FeatureManager { object FeatureManager {
val features = mutableListOf(AvailabilityManager, TimeManager) // Stores all features val features = mutableListOf(AvailabilityManager, TimeManager) // Stores all features

View file

@ -1,6 +1,6 @@
/* /*
* lilJudd * lilJudd
* Copyright (C) 2023 moonleay * Copyright (C) 2024 moonleay
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -16,12 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.moonleay.lilJudd.features.component package net.moonleay.liljudd.features.component
import dev.kord.core.behavior.UserBehavior import dev.kord.core.behavior.UserBehavior
import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.Channel
import dev.kord.rest.builder.message.EmbedBuilder import dev.kord.rest.builder.message.EmbedBuilder
import net.moonleay.lilJudd.extensions.FeatureManageExtension import net.moonleay.liljudd.extensions.FeatureManageExtension
interface IFeature { interface IFeature {
val feat: FeatureEnum val feat: FeatureEnum

Some files were not shown because too many files have changed in this diff Show more