diff --git a/.dockerignore b/.dockerignore index 0b6a882..1c7ce56 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ **.nils /run /run/ +docker-compose.yml diff --git a/.forgejo/workflows/action.yml b/.forgejo/workflows/action.yml index 8418c1c..4eff152 100644 --- a/.forgejo/workflows/action.yml +++ b/.forgejo/workflows/action.yml @@ -5,12 +5,10 @@ on: jobs: build-gradle-project: - runs-on: ubuntu-latest + runs-on: docker steps: - name: apt update run: apt update - - name: apt upgrade - run: apt upgrade -y - name: install prerequisits run: apt install openjdk-17-jdk ca-certificates-java ssl-cert openssl ca-certificates -y - name: Checkout project sources diff --git a/README.md b/README.md index 6d87924..e1768f6 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,13 @@ A Discord Bot for Splatoon Teams. -More information can be found on the [Homepage](https://liljudd.ink). - ## Contributors [![Developer](https://img.shields.io/badge/moonleay-Developer-red)](https://gitlab.com/moonleay) ## 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 @@ -22,23 +20,34 @@ More information can be found on the [Homepage](https://liljudd.ink). - match -- Create a new match - updateroles -- Update the roles of all users - sendplanner -- Send the planner message + - rotation -- See the current rotation - Features - 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 - 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. ## How to self-host (using the Docker container) -1. Pull the container from [Docker Hub](https://hub.docker.com/repository/docker/limiteddev/liljudd/general) -2. Map /data/ to a folder on disk -3. Run the Bot once -4. follow step 4 and 5 from the JAR section -5. Run the Bot again -6. Profit. +1. Copy the docker-compose.yml file from the repository. +2. Install docker and docker-compose. +3. Create a directory called "data" in the same directory as the docker-compose.yml file. +4. Create a directory called "config" in the same directory as the docker-compose.yml file. +5. Start the bot once. +6. After 10 seconds, stop the bot. +7. Open the config file "credentials.nils" in the config directory. +8. Put in your credentials. + 1. token: your Discord bot token + 2. dbDomain: the domain and port of your postgresql database (e.g.: "postgresql", when using the docker-compose.yml + file) + 3. dbName: the name of the database + 4. dbUser: the username of the database + 5. dbPassword: the password to the db user +9. Start the bot again. +10. The bot should now be up and running. ## How to self-host (using the JAR) diff --git a/build.gradle.kts b/build.gradle.kts index 48416b1..0ad11dc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,25 +21,27 @@ import org.jetbrains.gradle.ext.TaskTriggersConfig import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 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("org.jetbrains.gradle.plugin.idea-ext") version "1.1.7" `maven-publish` } //lilJudd version 2 -val ownerID = 372703841151614976L +val creatorID = 372703841151614976L group = "net.moonleay.liljudd" version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_SHORT_SHA")}-prod" } ?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" } - ?: "2.6.5" + ?: "2.7.2" -val kordver = "1.5.9-SNAPSHOT" +val kordver = "1.7.1-SNAPSHOT" val coroutinesver = "1.7.3" -val ktorver = "2.3.5" -val exposedver = "0.43.0" -val postgresver = "42.6.0" -val krontabver = "2.2.1" +val ktorver = "2.3.7" +val exposedver = "0.46.0" +val postgresver = "42.7.1" +val krontabver = "2.2.6" +val kotlinxserializationver = "1.6.0" val mavenArtifact = "lilJudd" project.base.archivesName.set(mavenArtifact) @@ -93,6 +95,9 @@ dependencies { //Coroutines shadow("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesver") + //JSON Stuff + shadow("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxserializationver") + //Logging shadow("org.slf4j:slf4j-api:2.0.3") shadow("org.slf4j:slf4j-simple:2.0.3") @@ -105,8 +110,8 @@ dependencies { //Krontab shadow("dev.inmo:krontab:$krontabver") - shadow("io.ktor:ktor-client-core-jvm:2.3.5") - shadow("io.ktor:ktor-client-cio-jvm:2.3.5") + shadow("io.ktor:ktor-client-core-jvm:$ktorver") + shadow("io.ktor:ktor-client-cio-jvm:$ktorver") } @@ -115,13 +120,14 @@ val templateSrc = project.rootDir.resolve("src/main/templates") val templateDest = project.projectDir.resolve("build/generated/templates") val templateProps = mapOf( "version" to project.version as String, - "ownerID" to ownerID, + "creatorID" to creatorID, "kordversion" to kordver, "coroutinesversion" to coroutinesver, "ktorversion" to ktorver, "exposedversion" to exposedver, "postgresversion" to postgresver, - "krontabversion" to krontabver + "krontabversion" to krontabver, + "kotlinxserializationversion" to kotlinxserializationver ) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..af8faef --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +version: "3" +services: + lilJudd: + container_name: liljudd + image: limiteddev/liljudd:x.x.x + deploy: + resources: + limits: + cpus: "1" + memory: 1G + networks: + - traefik + restart: unless-stopped + volumes: + - ./config/liljudd/:/data/ + postgresql: + container_name: postgresql + image: postgres:13.3-alpine + deploy: + resources: + limits: + cpus: "1" + memory: 1G + environment: + - POSTGRES_USER=liljudd + - POSTGRES_PASSWORD=changeme + - POSTGRES_DB=liljudd + networks: + - traefik + restart: unless-stopped + volumes: + - ./data/postgresql/:/var/lib/postgresql/data/ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927..d64cd49 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 14cf480..3ba58b0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ # # lilJudd -# Copyright (C) 2023 moonleay +# Copyright (C) 2024 moonleay # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 99d219e..bf6021c 100755 --- a/gradlew +++ b/gradlew @@ -2,7 +2,7 @@ # # lilJudd -# Copyright (C) 2023 moonleay +# Copyright (C) 2024 moonleay # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -82,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# 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"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -135,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -195,11 +200,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -207,6 +216,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt deleted file mode 100644 index b0192e5..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt +++ /dev/null @@ -1,117 +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 . - */ - -package net.moonleay.lilJudd.data.api - -import net.moonleay.lilJudd.data.api.entry.schedule.ModeData -import net.moonleay.lilJudd.util.TimeUtil - -object Splatoon3Api { - private fun getRegularMode(timestamp: Long): ModeData { - Splatoon3ApiCache.cachedRegularModeData.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") - } - - private fun getOpenMode(timestamp: Long): ModeData { - Splatoon3ApiCache.cachedCompetitiveOpenModeData.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") - } - - private fun getXMode(timestamp: Long): ModeData { - Splatoon3ApiCache.cachedXModeData.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") - } - - 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 getRegularMapsFormatted(timestamp: Long): String { - val modeData = getRegularMode(timestamp) - val map1 = modeData.map1!!.name.split(" ")[0] - val map2 = modeData.map2!!.name.split(" ")[0] - return "R: $map1 & $map2" - } - - fun getOpenModeFormatted(timestamp: Long): String { - val modeData = getOpenMode(timestamp) - val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") - val diffStamp = TimeUtil.getTimeDifferenceFormatted(System.currentTimeMillis(), endTime) - return "O: ${modeData.ruleSetName} $diffStamp left" - } - - fun getOpenMapFormatted(timestamp: Long): String { - val modeData = getOpenMode(timestamp) - val map1 = modeData.map1!!.name.split(" ")[0] - val map2 = modeData.map2!!.name.split(" ")[0] - return "O: $map1 & $map2" - } - - fun getSeriesModeFormatted(timestamp: Long): String { - val modeData = getSeriesMode(timestamp) - val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") - val diffStamp = TimeUtil.getTimeDifferenceFormatted(System.currentTimeMillis(), endTime) - return "S: ${modeData.ruleSetName} $diffStamp left" - } - - fun getSeriesMapsFormatted(timestamp: Long): String { - val modeData = getSeriesMode(timestamp) - val map1 = modeData.map1!!.name.split(" ")[0] - val map2 = modeData.map2!!.name.split(" ")[0] - return "S: $map1 & $map2" - } - - fun getXModeFormatted(timestamp: Long): String { - val modeData = getXMode(timestamp) - val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") - val diffStamp = TimeUtil.getTimeDifferenceFormatted(System.currentTimeMillis(), endTime) - return "X: ${modeData.ruleSetName} $diffStamp left" - } - - fun getXMapFormatted(timestamp: Long): String { - val modeData = getXMode(timestamp) - val map1 = modeData.map1!!.name.split(" ")[0] - val map2 = modeData.map2!!.name.split(" ")[0] - return "X: $map1 & $map2" - } -} diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt deleted file mode 100644 index 714ff1e..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt +++ /dev/null @@ -1,535 +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 . - */ - -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() - internal var cachedMapData = mutableMapOf() - internal var cachedRegularModeData = mutableListOf() - internal var cachedCompetitiveSeriesModeData = mutableListOf() - internal var cachedCompetitiveOpenModeData = mutableListOf() - internal var cachedXModeData = mutableListOf() - internal var cachedChallengesData = mutableListOf() - internal var cachedShiftData = mutableListOf() - internal var cachedBigRunShiftData = mutableListOf() - internal var cachedCoopRewardsData = mutableListOf() - internal var cachedSplatnetItemData = mutableListOf() - internal var cachedSplatnetLimitedItemData = mutableListOf() - 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() - 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() - 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 - } - 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") - } - - 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 - - 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") - - 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") - - 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") - - 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") - - 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") - - val shiftData = data["coopGroupingSchedule"]!!.jsonObject["regularSchedules"]!!.jsonObject["nodes"]!!.jsonArray - cachedShiftData = mutableListOf() - shiftData.forEach { - val obj = it as JsonObject - val setting = obj["setting"]!!.jsonObject - val stage = setting["coopStage"]!!.jsonObject - val weapons = setting["weapons"]!!.jsonArray - cachedShiftData.add( - ShiftData( - obj["startTime"]!!.jsonPrimitive.content, - obj["endTime"]!!.jsonPrimitive.content, - obj["__splatoon3ink_king_salmonid_guess"]!!.jsonPrimitive.content, - setting["__typename"]!!.jsonPrimitive.content, - stage["name"]!!.jsonPrimitive.content, - Url(stage["image"]!!.jsonObject["url"]!!.jsonPrimitive.content), - WeaponData( - weapons[0].jsonObject["name"]!!.jsonPrimitive.content, - Url(weapons[0].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) - ), - WeaponData( - weapons[1].jsonObject["name"]!!.jsonPrimitive.content, - Url(weapons[1].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) - ), - WeaponData( - weapons[2].jsonObject["name"]!!.jsonPrimitive.content, - Url(weapons[2].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) - ), - WeaponData( - weapons[3].jsonObject["name"]!!.jsonPrimitive.content, - Url(weapons[3].jsonObject["image"]!!.jsonObject["url"]!!.jsonPrimitive.content) - ) - ) - ) - } - - val bigRunData = data["coopGroupingSchedule"]!!.jsonObject["bigRunSchedules"]!!.jsonObject["nodes"]!!.jsonArray - 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") - - 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 - } - 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") - } -} diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestTeamData.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestTeamData.kt deleted file mode 100644 index 9ea2e72..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestTeamData.kt +++ /dev/null @@ -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 . - */ - -package net.moonleay.lilJudd.data.api.entry.splatfest - -data class SplatfestTeamData( - val teamName: String, - val color: SplatfestColor, - val results: SplatfestTeamResults?, -) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestTeamResults.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestTeamResults.kt deleted file mode 100644 index 4888adc..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestTeamResults.kt +++ /dev/null @@ -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 . - */ - -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, -) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/SplatnetItemData.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/SplatnetItemData.kt deleted file mode 100644 index 43df20b..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/SplatnetItemData.kt +++ /dev/null @@ -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 . - */ - -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, - val image: Url, - val brand: BrandData, -) diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiFestivalAndCoopUpdateScheduler.kt b/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiFestivalAndCoopUpdateScheduler.kt deleted file mode 100644 index ff299fc..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiFestivalAndCoopUpdateScheduler.kt +++ /dev/null @@ -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 . - */ - -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.") - } -} diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiSplatnetGearUpdateScheduler.kt b/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiSplatnetGearUpdateScheduler.kt deleted file mode 100644 index 51048f2..0000000 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiSplatnetGearUpdateScheduler.kt +++ /dev/null @@ -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 . - */ - -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.") - } -} diff --git a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt b/src/main/kotlin/net/moonleay/liljudd/Bot.kt similarity index 64% rename from src/main/kotlin/net/moonleay/lilJudd/Bot.kt rename to src/main/kotlin/net/moonleay/liljudd/Bot.kt index 05f7ba8..2e5e5aa 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt +++ b/src/main/kotlin/net/moonleay/liljudd/Bot.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +16,10 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd +package net.moonleay.liljudd import com.kotlindiscord.kord.extensions.ExtensibleBot +import com.kotlindiscord.kord.extensions.utils.dm import dev.kord.common.entity.PresenceStatus import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.event.gateway.ReadyEvent @@ -26,23 +27,28 @@ import dev.kord.core.event.interaction.ButtonInteractionCreateEvent import dev.kord.core.on import dev.kord.gateway.Intent 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.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch -import net.moonleay.lilJudd.buttons.component.EditButtonManager -import net.moonleay.lilJudd.data.CredentialManager -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 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 + object Bot { //The kord object gets set at app launch lateinit var bot: ExtensibleBot @@ -68,6 +74,12 @@ object Bot { 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 DB.connect( CredentialManager.dbDomain, @@ -104,6 +116,7 @@ object Bot { add(::SendPlannerExtension) add(::MatchExtension) add(::UpdateRolesExtension) + add(::RotationExtension) } this.presence { @@ -115,11 +128,26 @@ object Bot { +Intent.GuildMembers } - // Will add Sharding someday, I promise - /* - sharding { recommended -> + errorResponse { _, type -> + val stamp = System.currentTimeMillis() + 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) - } */ + } } // Register button presses @@ -157,13 +185,39 @@ object Bot { bot.kordRef.on { AvailabilityManager.runThread() // Update Availabilities MatchManager.update() // Update Matches + // Load news + NewsManager.load() + if(NewsManager.shouldPost == "yes"){ + val contactedOwners = mutableListOf() + 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 - // JobManager.addJob(StatusUpdater) +// JobManager.addJob(StatusUpdater) } // Update the Splatoon 3 api data and make sure it stays up-to-date - // Splatoon3ApiCache.updateData(ApiDataType.SCHEDULES, ApiRequestType.AUTOMATIC_CACHE_CREATION_AT_STARTUP) - // JobManager.addJob(Splatoon3ApiScheduleUpdateScheduler) +// Splatoon3Api.updateSchedule() +// JobManager.addJob(Splatoon3ApiScheduleUpdateScheduler) /* Other caches will be added when implemented its not used yet in order to reduce load on the api, @@ -172,10 +226,6 @@ object Bot { // Had to disable bc of an error. // Will fix when I have time - - //JobManager.addJob(Splatoon3ApiFestivalAndCoopUpdateScheduler) - //JobManager.addJob(Splatoon3ApiSplatnetGearUpdateScheduler) - //Start the bot bot.start() } diff --git a/src/main/kotlin/net/moonleay/lilJudd/Main.kt b/src/main/kotlin/net/moonleay/liljudd/Main.kt similarity index 73% rename from src/main/kotlin/net/moonleay/lilJudd/Main.kt rename to src/main/kotlin/net/moonleay/liljudd/Main.kt index 36be8b3..a1196f8 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/Main.kt +++ b/src/main/kotlin/net/moonleay/liljudd/Main.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +15,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package net.moonleay.lilJudd +package net.moonleay.liljudd import net.moonleay.liljudd.build.BuildConstants +import net.moonleay.liljudd.util.Logger suspend fun main() { @@ -27,9 +28,11 @@ suspend fun main() { "| |_| |__| |_ _ _| |_| |\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() } diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButtonManager.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/component/EditButtonManager.kt similarity index 67% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButtonManager.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/component/EditButtonManager.kt index f0df57f..384a09d 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButtonManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/component/EditButtonManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,14 +16,14 @@ * along with this program. If not, see . */ -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.CancelEditButton -import net.moonleay.lilJudd.buttons.matchplanner.DeclineEditButton -import net.moonleay.lilJudd.buttons.timeplanner.IsAvailableEditButton -import net.moonleay.lilJudd.buttons.timeplanner.MaybeAvailableEditButton -import net.moonleay.lilJudd.buttons.timeplanner.NotAvailableEditButton +import net.moonleay.liljudd.buttons.matchplanner.AcceptEditButton +import net.moonleay.liljudd.buttons.matchplanner.CancelEditButton +import net.moonleay.liljudd.buttons.matchplanner.DeclineEditButton +import net.moonleay.liljudd.buttons.timeplanner.IsAvailableEditButton +import net.moonleay.liljudd.buttons.timeplanner.MaybeAvailableEditButton +import net.moonleay.liljudd.buttons.timeplanner.NotAvailableEditButton object EditButtonManager { val buttons = listOf( diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/component/IEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/component/IEditButton.kt similarity index 93% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/component/IEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/component/IEditButton.kt index 0fbe64e..d973ceb 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/component/IEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/component/IEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.component +package net.moonleay.liljudd.buttons.component import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior import dev.kord.core.entity.Guild diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/AcceptEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/AcceptEditButton.kt similarity index 81% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/AcceptEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/AcceptEditButton.kt index 4e04fa1..7e7e382 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/AcceptEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/AcceptEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.matchplanner +package net.moonleay.liljudd.buttons.matchplanner import dev.kord.common.entity.Snowflake import dev.kord.core.behavior.edit @@ -25,15 +25,16 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction -import dev.kord.rest.builder.message.modify.embed -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.buttons.component.IEditButton -import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository -import net.moonleay.lilJudd.util.EmbedUtil -import net.moonleay.lilJudd.util.Logger -import net.moonleay.lilJudd.util.MessageUtil +import dev.kord.rest.builder.message.EmbedBuilder +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.buttons.component.IEditButton +import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository +import net.moonleay.liljudd.util.EmbedUtil +import net.moonleay.liljudd.util.Logger +import net.moonleay.liljudd.util.MessageUtil -class AcceptEditButton() : IEditButton { +class AcceptEditButton : IEditButton { override val id: String = "public.edit.btn.matchmanagement.accept" override suspend fun onInteraction( @@ -59,7 +60,7 @@ class AcceptEditButton() : IEditButton { Logger.out("role is null") return } - val member = interaction.user.asMember(guild.id) ?: return + val member = interaction.user.asMember(guild.id) // do the checks and update if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) { if (member.roleIds.contains(Snowflake(mpdd.roleID))) { @@ -89,13 +90,13 @@ class AcceptEditButton() : IEditButton { if (shouldEditButton) { // update the message Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { - this.embed { - this.color = eb.color - this.title = eb.title - this.description = eb.description - this.fields = eb.fields - this.footer = eb.footer - } + this.embed(fun EmbedBuilder.() { + color = eb.color + title = eb.title + description = eb.description + fields = eb.fields + footer = eb.footer + }) } } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/CancelEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/CancelEditButton.kt similarity index 77% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/CancelEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/CancelEditButton.kt index 348446c..07e1016 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/CancelEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/CancelEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.matchplanner +package net.moonleay.liljudd.buttons.matchplanner import dev.kord.common.entity.Snowflake import dev.kord.core.behavior.edit @@ -25,12 +25,13 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction -import dev.kord.rest.builder.message.modify.embed -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.buttons.component.IEditButton -import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository -import net.moonleay.lilJudd.util.EmbedUtil -import net.moonleay.lilJudd.util.Logger +import dev.kord.rest.builder.message.EmbedBuilder +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.buttons.component.IEditButton +import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository +import net.moonleay.liljudd.util.EmbedUtil +import net.moonleay.liljudd.util.Logger class CancelEditButton : IEditButton { override val id: String = "public.edit.btn.matchmanagement.cancel" @@ -62,14 +63,14 @@ class CancelEditButton : IEditButton { member.removeRole(role.id) } Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { - this.embed { + this.embed(fun EmbedBuilder.() { val temp = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 1) - this.color = temp.color - this.title = temp.title - this.description = temp.description - this.fields = temp.fields - this.footer = temp.footer - } + color = temp.color + title = temp.title + description = temp.description + fields = temp.fields + footer = temp.footer + }) } } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/DeclineEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/DeclineEditButton.kt similarity index 82% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/DeclineEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/DeclineEditButton.kt index 93f6b36..06f7e44 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/matchplanner/DeclineEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/DeclineEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.matchplanner +package net.moonleay.liljudd.buttons.matchplanner import dev.kord.common.entity.Snowflake import dev.kord.core.behavior.edit @@ -25,13 +25,14 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction -import dev.kord.rest.builder.message.modify.embed -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.buttons.component.IEditButton -import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository -import net.moonleay.lilJudd.util.EmbedUtil -import net.moonleay.lilJudd.util.Logger -import net.moonleay.lilJudd.util.MessageUtil +import dev.kord.rest.builder.message.EmbedBuilder +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.buttons.component.IEditButton +import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository +import net.moonleay.liljudd.util.EmbedUtil +import net.moonleay.liljudd.util.Logger +import net.moonleay.liljudd.util.MessageUtil class DeclineEditButton : IEditButton { override val id: String = "public.edit.btn.matchmanagement.decline" @@ -59,7 +60,7 @@ class DeclineEditButton : IEditButton { Logger.out("role is null") 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 (member.roleIds.contains(Snowflake(mpdd.roleID))) { Logger.out("Removing role from ${member.username}") @@ -89,13 +90,13 @@ class DeclineEditButton : IEditButton { if (shouldEditButton) { // update the message Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { - this.embed { - this.color = eb.color - this.title = eb.title - this.description = eb.description - this.fields = eb.fields - this.footer = eb.footer - } + this.embed(fun EmbedBuilder.() { + color = eb.color + title = eb.title + description = eb.description + fields = eb.fields + footer = eb.footer + }) } } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/IsAvailableEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/IsAvailableEditButton.kt similarity index 88% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/IsAvailableEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/IsAvailableEditButton.kt index 9dbae16..b4cdfef 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/IsAvailableEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/IsAvailableEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.timeplanner +package net.moonleay.liljudd.buttons.timeplanner import dev.kord.core.behavior.edit import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior @@ -24,11 +24,11 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction -import dev.kord.rest.builder.message.modify.embed -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.buttons.component.IEditButton -import net.moonleay.lilJudd.features.AvailabilityManager -import net.moonleay.lilJudd.util.EmbedUtil +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.buttons.component.IEditButton +import net.moonleay.liljudd.features.AvailabilityManager +import net.moonleay.liljudd.util.EmbedUtil class IsAvailableEditButton : IEditButton { override val id: String = "public.edit.btn.timemanagement.available" diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/MaybeAvailableEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/MaybeAvailableEditButton.kt similarity index 88% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/MaybeAvailableEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/MaybeAvailableEditButton.kt index 01cf792..23b9c61 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/MaybeAvailableEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/MaybeAvailableEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.timeplanner +package net.moonleay.liljudd.buttons.timeplanner import dev.kord.core.behavior.edit import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior @@ -24,11 +24,11 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction -import dev.kord.rest.builder.message.modify.embed -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.buttons.component.IEditButton -import net.moonleay.lilJudd.features.AvailabilityManager -import net.moonleay.lilJudd.util.EmbedUtil +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.buttons.component.IEditButton +import net.moonleay.liljudd.features.AvailabilityManager +import net.moonleay.liljudd.util.EmbedUtil class MaybeAvailableEditButton : IEditButton { override val id: String = "public.edit.btn.timemanagement.maybeavailable" diff --git a/src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/NotAvailableEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/NotAvailableEditButton.kt similarity index 88% rename from src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/NotAvailableEditButton.kt rename to src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/NotAvailableEditButton.kt index ade9557..0fd5390 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/buttons/timeplanner/NotAvailableEditButton.kt +++ b/src/main/kotlin/net/moonleay/liljudd/buttons/timeplanner/NotAvailableEditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.buttons.timeplanner +package net.moonleay.liljudd.buttons.timeplanner import dev.kord.core.behavior.edit import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior @@ -24,11 +24,11 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction -import dev.kord.rest.builder.message.modify.embed -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.buttons.component.IEditButton -import net.moonleay.lilJudd.features.AvailabilityManager -import net.moonleay.lilJudd.util.EmbedUtil +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.buttons.component.IEditButton +import net.moonleay.liljudd.features.AvailabilityManager +import net.moonleay.liljudd.util.EmbedUtil class NotAvailableEditButton : IEditButton { override val id: String = "public.edit.btn.timemanagement.notavailable" diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/CredentialManager.kt b/src/main/kotlin/net/moonleay/liljudd/data/CredentialManager.kt similarity index 90% rename from src/main/kotlin/net/moonleay/lilJudd/data/CredentialManager.kt rename to src/main/kotlin/net/moonleay/liljudd/data/CredentialManager.kt index 0320d82..7a92197 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/CredentialManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/CredentialManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data +package net.moonleay.liljudd.data import java.io.* import java.util.* @@ -29,6 +29,8 @@ object CredentialManager { lateinit var dbName: String lateinit var dbUser: String lateinit var dbPassword: String + lateinit var apiDomain: String + lateinit var apiToken: String ///Load the needed credentials, generate a config if there is none fun load() { @@ -51,6 +53,8 @@ object CredentialManager { dbName = prop.getProperty("dbName") dbUser = prop.getProperty("dbUser") dbPassword = prop.getProperty("dbPassword") + apiDomain = prop.getProperty("apiDomain") + apiToken = prop.getProperty("apiToken") input.close() } catch (e: IOException) { e.printStackTrace() @@ -83,6 +87,8 @@ object CredentialManager { prop.setProperty("dbName", "empty") prop.setProperty("dbUser", "empty") prop.setProperty("dbPassword", "empty") + prop.setProperty("apiDomain", "empty") + prop.setProperty("apiToken", "empty") prop.store(output, null) output.close() diff --git a/src/main/kotlin/net/moonleay/liljudd/data/NewsManager.kt b/src/main/kotlin/net/moonleay/liljudd/data/NewsManager.kt new file mode 100644 index 0000000..30dc1e4 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/NewsManager.kt @@ -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 . + */ + +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() + } + } +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/coop/CoopGearData.kt b/src/main/kotlin/net/moonleay/liljudd/data/StacktraceSaver.kt similarity index 56% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/coop/CoopGearData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/StacktraceSaver.kt index 4f46642..84828c2 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/coop/CoopGearData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/StacktraceSaver.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,22 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.entry.coop +package net.moonleay.liljudd.data -import io.ktor.http.* +import java.io.File -data class CoopGearData( - val name: String, - val image: Url, - val __typename: String, +object StacktraceSaver { + fun saveStacktrace(stacktrace: Throwable, timestamp: Long) { + createFolder() + 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() + } +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/type/ApiRequestType.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3Api.kt similarity index 50% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/type/ApiRequestType.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3Api.kt index da20371..2b7fa40 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/type/ApiRequestType.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3Api.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,11 +16,23 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.type +package net.moonleay.liljudd.data.api.splatoon3ink -enum class ApiRequestType(val nameToDisplay: String) { - AUTOMATIC_CACHE_UPDATE("automatic request to update the cache"), - AUTOMATIC_CACHE_CREATION_AT_STARTUP("automatic request to create cache at startup"), - MANUAL("manual request"), - DEBUG("debug request") +import kotlinx.serialization.json.Json +import net.moonleay.liljudd.build.BuildConstants +import net.moonleay.liljudd.data.api.splatoon3ink.schedules.Schedules +import net.moonleay.liljudd.util.NetUtil + +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) + } } diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt new file mode 100644 index 0000000..5357116 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt @@ -0,0 +1,140 @@ +/* + * lilJudd + * Copyright (C) 2024 moonleay + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.moonleay.liljudd.data.api.splatoon3ink + +import net.moonleay.liljudd.data.api.splatoon3ink.schedules.BankaraNode +import net.moonleay.liljudd.data.api.splatoon3ink.schedules.RegularNode +import net.moonleay.liljudd.data.api.splatoon3ink.schedules.SalmonRunNode +import net.moonleay.liljudd.data.api.splatoon3ink.schedules.XNode +import net.moonleay.liljudd.util.TimeUtil + +object Splatoon3ApiDataGrabber { + fun getRegularMode(timestamp: Long): RegularNode { + Splatoon3Api.schedules!!.data.regularSchedules.nodes.map { modeData -> + val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") + val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + if (timestamp in startTime..endTime) { + return modeData + } + } + throw Exception("No current mode found") + } + + fun getOpenMode(timestamp: Long): BankaraNode { + Splatoon3Api.schedules!!.data.bankaraSchedules.nodes.map { modeData -> + val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") + val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + 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 endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + if (timestamp in startTime..endTime) { + return modeData + } + } + throw Exception("No current mode found") + } + + fun getSeriesMode(timestamp: Long): BankaraNode { + Splatoon3Api.schedules!!.data.bankaraSchedules.nodes.map { modeData -> + val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") + val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + 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 endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + if (timestamp in startTime..endTime) { + return modeData + } + } + throw Exception("No current mode found") + } + fun getRotationTime(timestamp: Long): String { + val modeData = getRegularMode(timestamp) + val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") + val diffStamp = TimeUtil.getTimeDifferenceFormatted(System.currentTimeMillis(), endTime) + return "$diffStamp left in rotation" + } + + fun getRegularMapsFormatted(timestamp: Long): String { + val modeData = getRegularMode(timestamp) + val map1 = modeData.regularMatchSetting.vsStages[0].name.split(" ")[0] + val map2 = modeData.regularMatchSetting.vsStages[1].name.split(" ")[0] + return "R: $map1, $map2" + } + + fun getOpenMapFormatted(timestamp: Long): String { + val modeData = getOpenMode(timestamp) + // FIXME: This may cause issues if there is a Splatfest going on + // TODO: Check if this works during splatfest + // 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("Tower Control", "TC") + .replace("Splat Zones", "SZ") + .replace("Clam Blitz", "CB") + } + + fun getSeriesMapsFormatted(timestamp: Long): String { + val modeData = getSeriesMode(timestamp) + // FIXME: This may cause issues if there is a Splatfest going on + // TODO: Check all the same things as in getOpenMapFormatted + 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("Tower Control", "TC") + .replace("Splat Zones", "SZ") + .replace("Clam Blitz", "CB") + } + + fun getXMapFormatted(timestamp: Long): String { + val modeData = getXMode(timestamp) + val map1 = modeData.xMatchSetting.vsStages[0].name.split(" ")[0] + val map2 = modeData.xMatchSetting.vsStages[1].name.split(" ")[0] + return "X: ${modeData.xMatchSetting.vsRule.name}: $map1, $map2" + .replace("Rainmaker", "RMK") + .replace("Tower Control", "TC") + .replace("Splat Zones", "SZ") + .replace("Clam Blitz", "CB") + } +} diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraMatchSetting.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraMatchSetting.kt new file mode 100644 index 0000000..d4188cd --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraMatchSetting.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraNode.kt new file mode 100644 index 0000000..20f0c9a --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraNode.kt @@ -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 . + */ + +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?, + @SerialName("endTime") + val endTime: String, + @SerialName("festMatchSettings") + val festMatchSettings: List?, + @SerialName("startTime") + val startTime: String +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraSchedules.kt new file mode 100644 index 0000000..7f6cd90 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraSchedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/MapData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BannerImage.kt similarity index 72% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/MapData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BannerImage.kt index 422783c..245536a 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/MapData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BannerImage.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,14 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.entry.schedule +package net.moonleay.liljudd.data.api.splatoon3ink.schedules -import io.ktor.http.* -data class MapData( - val stageID: Int, - val image: Url, - val name: String, +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class BannerImage( + @SerialName("url") + val url: String, ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt new file mode 100644 index 0000000..476dc59 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Boss.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Boss.kt new file mode 100644 index 0000000..abf1858 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Boss.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestColor.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Color.kt similarity index 70% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestColor.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Color.kt index 391ccb3..b359a33 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestColor.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Color.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,11 +16,20 @@ * along with this program. If not, see . */ -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, + @SerialName("b") val b: Double, + @SerialName("g") val g: Double, - val r: Double, + @SerialName("r") + val r: Double ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopGroupingSchedule.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopGroupingSchedule.kt new file mode 100644 index 0000000..1a5d5be --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopGroupingSchedule.kt @@ -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 . + */ + +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? +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopSetting.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopSetting.kt new file mode 100644 index 0000000..7f20c4c --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopSetting.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopStage.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopStage.kt new file mode 100644 index 0000000..6441baa --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopStage.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentFest.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentFest.kt new file mode 100644 index 0000000..e2fe9ed --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentFest.kt @@ -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 . + */ + +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, + @SerialName("title") + val title: String, + @SerialName("tricolorStage") + val tricolorStage: TricolorStage +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentPlayer.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentPlayer.kt new file mode 100644 index 0000000..50c8f74 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentPlayer.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventNode.kt new file mode 100644 index 0000000..2e66a3c --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventNode.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventSchedules.kt new file mode 100644 index 0000000..fb6ed6f --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventSchedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingX.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingX.kt new file mode 100644 index 0000000..db4e294 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingX.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingXX.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingXX.kt new file mode 100644 index 0000000..d2fbfc5 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingXX.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ShiftData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestNode.kt similarity index 63% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ShiftData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestNode.kt index a4d28ae..8e869a9 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ShiftData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestNode.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,19 +16,18 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.entry.schedule +package net.moonleay.liljudd.data.api.splatoon3ink.schedules -import io.ktor.http.* -data class ShiftData( - val startTime: String, +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class FestNode( + @SerialName("endTime") val endTime: String, - val __splatoon3ink_king_salmonid_guess: String, - val __typename: String, - val stageName: String, - val image: Url, - val weapon1: WeaponData, - val weapon2: WeaponData, - val weapon3: WeaponData, - val weapon4: WeaponData, + @SerialName("festMatchSettings") + val festMatchSettings: FestMatchSettingX?, + @SerialName("startTime") + val startTime: String ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestSchedules.kt new file mode 100644 index 0000000..9a1acc7 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestSchedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/BrandData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Image.kt similarity index 72% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/BrandData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Image.kt index 6781172..9543b8a 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/BrandData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Image.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,14 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.entry.splatnet +package net.moonleay.liljudd.data.api.splatoon3ink.schedules -import io.ktor.http.* -data class BrandData( - val name: String, - val image: Url, - val usualGearPower: GearAbilityData?, - val saleEndTime: String?, +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class Image( + @SerialName("url") + val url: String ) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ChallengeModeData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchEvent.kt similarity index 61% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ChallengeModeData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchEvent.kt index c288fe9..494703b 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ChallengeModeData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchEvent.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,19 +16,24 @@ * along with this program. If not, see . */ -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, + @SerialName("name") val name: String, - val description: String, + @SerialName("regulation") val regulation: String, - val map1: MapData?, - val map2: MapData?, - val __typename: String, - val ruleSet: String, - val ruleSetName: String, - val timePeriod1: TimePeriodData, - val timePeriod2: TimePeriodData, - val timePeriod3: TimePeriodData, + @SerialName("regulationUrl") + val regulationUrl: String? // is null ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchSetting.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchSetting.kt new file mode 100644 index 0000000..41cf553 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchSetting.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/MapNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/MapNode.kt new file mode 100644 index 0000000..f17d17c --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/MapNode.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/GearAbilityData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/OriginalImage.kt similarity index 72% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/GearAbilityData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/OriginalImage.kt index 713d946..0393f71 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatnet/GearAbilityData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/OriginalImage.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,14 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.entry.splatnet +package net.moonleay.liljudd.data.api.splatoon3ink.schedules -import io.ktor.http.* -data class GearAbilityData( - val name: String, - val description: String?, - val image: Url, +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class OriginalImage( + @SerialName("url") + val url: String ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularMatchSetting.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularMatchSetting.kt new file mode 100644 index 0000000..ea899be --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularMatchSetting.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularNode.kt new file mode 100644 index 0000000..9a6935f --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularNode.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedules.kt new file mode 100644 index 0000000..b6c55db --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedulesX.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedulesX.kt new file mode 100644 index 0000000..04418e0 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedulesX.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt new file mode 100644 index 0000000..ad53d45 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Schedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Schedules.kt new file mode 100644 index 0000000..f3d08c7 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Schedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SchedulesData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SchedulesData.kt new file mode 100644 index 0000000..0bf967a --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SchedulesData.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Setting.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Setting.kt new file mode 100644 index 0000000..3ebd2f2 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Setting.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Team.kt similarity index 66% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Team.kt index f52b9b4..8043c5d 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/splatfest/SplatfestData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Team.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,18 +16,18 @@ * along with this program. If not, see . */ -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 state: String, - val startTime: String, - val endTime: String, - val title: String, - val image: Url, - val team1: SplatfestTeamData, - val team2: SplatfestTeamData, - val team3: SplatfestTeamData, +// @SerialName("myVoteState") +// val myVoteState: Any? ) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/TimePeriodData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestNode.kt similarity index 66% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/TimePeriodData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestNode.kt index 53edb96..22b36d8 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/TimePeriodData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestNode.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +16,18 @@ * along with this program. If not, see . */ -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, + @SerialName("setting") + val setting: CoopSetting, + @SerialName("startTime") + val startTime: String ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestSchedules.kt new file mode 100644 index 0000000..1265efc --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestSchedules.kt @@ -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 . + */ + +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 // This is a placeholder. +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/ThumbnailImage.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/ThumbnailImage.kt new file mode 100644 index 0000000..9fb03cd --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/ThumbnailImage.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ModeData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TimePeriod.kt similarity index 70% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ModeData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TimePeriod.kt index 8295a1a..d86de17 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/ModeData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TimePeriod.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,15 +16,16 @@ * along with this program. If not, see . */ -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 matchType: String, - val map1: MapData?, - val map2: MapData?, - val ruleSetName: String, - val ruleSet: String, - val mode: String, + @SerialName("startTime") + val startTime: String ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TricolorStage.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TricolorStage.kt new file mode 100644 index 0000000..b5685cc --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TricolorStage.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/WeaponData.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/UserIcon.kt similarity index 72% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/WeaponData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/UserIcon.kt index 997a24b..673f73a 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/entry/schedule/WeaponData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/UserIcon.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,11 +16,14 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.entry.schedule +package net.moonleay.liljudd.data.api.splatoon3ink.schedules -import io.ktor.http.* -data class WeaponData( - val name: String, - val image: Url, +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class UserIcon( + @SerialName("url") + val url: String ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsRule.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsRule.kt new file mode 100644 index 0000000..bddb5a5 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsRule.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStage.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStage.kt new file mode 100644 index 0000000..0b9cebf --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStage.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStages.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStages.kt new file mode 100644 index 0000000..142508d --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStages.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Weapon.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Weapon.kt new file mode 100644 index 0000000..a65820d --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Weapon.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XMatchSetting.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XMatchSetting.kt new file mode 100644 index 0000000..edca851 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XMatchSetting.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XNode.kt new file mode 100644 index 0000000..0242771 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XNode.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XSchedules.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XSchedules.kt new file mode 100644 index 0000000..9de2887 --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XSchedules.kt @@ -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 . + */ + +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 +) diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/DB.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/DB.kt similarity index 83% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/DB.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/DB.kt index 7c58ea0..2475f28 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/DB.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/DB.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -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.PlanningNotifierRoles -import net.moonleay.lilJudd.data.database.tables.TimePlanningChannels -import net.moonleay.lilJudd.data.database.tables.TimePlanningMessages +import net.moonleay.liljudd.data.database.tables.MatchPlanningData +import net.moonleay.liljudd.data.database.tables.PlanningNotifierRoles +import net.moonleay.liljudd.data.database.tables.TimePlanningChannels +import net.moonleay.liljudd.data.database.tables.TimePlanningMessages import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.SchemaUtils import org.jetbrains.exposed.sql.transactions.transaction diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/MatchPlanningDataData.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/MatchPlanningDataData.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/entry/MatchPlanningDataData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/entry/MatchPlanningDataData.kt index b19c5e7..77bfcc8 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/MatchPlanningDataData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/MatchPlanningDataData.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.entry +package net.moonleay.liljudd.data.database.entry data class MatchPlanningDataData( val id: Int, diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/PlanningNotifierRolesData.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/PlanningNotifierRolesData.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/entry/PlanningNotifierRolesData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/entry/PlanningNotifierRolesData.kt index c58130a..b6d0abf 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/PlanningNotifierRolesData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/PlanningNotifierRolesData.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.entry +package net.moonleay.liljudd.data.database.entry data class PlanningNotifierRolesData( val id: Int, // The id of the entry diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/TimePlanningChannelsData.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningChannelsData.kt similarity index 90% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/entry/TimePlanningChannelsData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningChannelsData.kt index 7edd496..0f93b9e 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/TimePlanningChannelsData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningChannelsData.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.entry +package net.moonleay.liljudd.data.database.entry data class TimePlanningChannelsData( val id: Int, diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/TimePlanningMessagesData.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningMessagesData.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/entry/TimePlanningMessagesData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningMessagesData.kt index 3126e2c..c1192fc 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/entry/TimePlanningMessagesData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningMessagesData.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.entry +package net.moonleay.liljudd.data.database.entry data class TimePlanningMessagesData( val id: Int, // The id of the entry diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/MatchPlanningDataRepository.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/MatchPlanningDataRepository.kt similarity index 79% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/repository/MatchPlanningDataRepository.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/repository/MatchPlanningDataRepository.kt index 84a1e66..5c93b43 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/MatchPlanningDataRepository.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/MatchPlanningDataRepository.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,15 @@ * along with this program. If not, see . */ -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.tables.MatchPlanningData -import org.jetbrains.exposed.sql.* +import net.moonleay.liljudd.data.database.entry.MatchPlanningDataData +import net.moonleay.liljudd.data.database.tables.MatchPlanningData 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 object MatchPlanningDataRepository { @@ -51,7 +54,7 @@ object MatchPlanningDataRepository { fun get(id: Int): MatchPlanningDataData? = transaction { - MatchPlanningData.select { MatchPlanningData.id eq id }.firstOrNull()?.let { + MatchPlanningData.selectAll().where { MatchPlanningData.id eq id }.firstOrNull()?.let { MatchPlanningDataData( it[MatchPlanningData.id], it[MatchPlanningData.serverid], @@ -69,7 +72,7 @@ object MatchPlanningDataRepository { fun getFromMessageInChannelInServer(messageID: Long, channelID: Long, serverID: Long): MatchPlanningDataData? = transaction { - MatchPlanningData.select { + MatchPlanningData.selectAll().where { MatchPlanningData.messageid eq (messageID) and ( MatchPlanningData.serverid eq (serverID)) and ( MatchPlanningData.channelid eq (channelID)) @@ -98,15 +101,15 @@ object MatchPlanningDataRepository { fun write(data: MatchPlanningDataData): Int = transaction { MatchPlanningData.insert { - it[MatchPlanningData.serverid] = data.serverID - it[MatchPlanningData.channelid] = data.channelID - it[MatchPlanningData.matchtype] = data.matchType - it[MatchPlanningData.registererid] = data.registererID - it[MatchPlanningData.roleid] = data.roleID - it[MatchPlanningData.opponentName] = data.opponentName - it[MatchPlanningData.messageid] = data.messageID - it[MatchPlanningData.timestamp] = data.timestamp - it[MatchPlanningData.jobstr] = data.jobString + it[serverid] = data.serverID + it[channelid] = data.channelID + it[matchtype] = data.matchType + it[registererid] = data.registererID + it[roleid] = data.roleID + it[opponentName] = data.opponentName + it[messageid] = data.messageID + it[timestamp] = data.timestamp + it[jobstr] = data.jobString } get MatchPlanningData.id } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/PlanningNotifierRolesRepository.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/PlanningNotifierRolesRepository.kt similarity index 71% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/repository/PlanningNotifierRolesRepository.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/repository/PlanningNotifierRolesRepository.kt index 4059e70..3333471 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/PlanningNotifierRolesRepository.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/PlanningNotifierRolesRepository.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,15 @@ * along with this program. If not, see . */ -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.tables.PlanningNotifierRoles -import org.jetbrains.exposed.sql.* +import net.moonleay.liljudd.data.database.entry.PlanningNotifierRolesData +import net.moonleay.liljudd.data.database.tables.PlanningNotifierRoles 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 object PlanningNotifierRolesRepository { @@ -46,9 +49,7 @@ object PlanningNotifierRolesRepository { fun getForChannel(channelID: Long): PlanningNotifierRolesData? = transaction { - PlanningNotifierRoles.select { - PlanningNotifierRoles.channelid eq channelID - }.firstOrNull()?.let { + PlanningNotifierRoles.selectAll().where { PlanningNotifierRoles.channelid eq channelID }.firstOrNull()?.let { PlanningNotifierRolesData( it[PlanningNotifierRoles.id], it[PlanningNotifierRoles.serverid], @@ -61,9 +62,9 @@ object PlanningNotifierRolesRepository { fun getForChannelInServer(channelID: Long, serverID: Long): PlanningNotifierRolesData? = transaction { - PlanningNotifierRoles.select { - PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) - }.firstOrNull()?.let { + PlanningNotifierRoles.selectAll() + .where { PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) } + .firstOrNull()?.let { PlanningNotifierRolesData( it[PlanningNotifierRoles.id], it[PlanningNotifierRoles.serverid], @@ -76,22 +77,23 @@ object PlanningNotifierRolesRepository { fun existsInChannel(channelID: Long): Boolean = 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 = 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 } fun write(data: PlanningNotifierRolesData) { transaction { PlanningNotifierRoles.insert { - it[PlanningNotifierRoles.serverid] = data.serverID - it[PlanningNotifierRoles.channelid] = data.channelID - it[PlanningNotifierRoles.hastimeroleid] = data.hasTimeRoleID - it[PlanningNotifierRoles.wantstobenotifiedid] = data.wantsToBeNotifiedID + it[serverid] = data.serverID + it[channelid] = data.channelID + it[hastimeroleid] = data.hasTimeRoleID + it[wantstobenotifiedid] = data.wantsToBeNotifiedID } get PlanningNotifierRoles.id } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/TimePlanningChannelsRepository.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningChannelsRepository.kt similarity index 72% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/repository/TimePlanningChannelsRepository.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningChannelsRepository.kt index f5fd171..f809420 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/TimePlanningChannelsRepository.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningChannelsRepository.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,15 @@ * along with this program. If not, see . */ -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.tables.TimePlanningChannels -import org.jetbrains.exposed.sql.* +import net.moonleay.liljudd.data.database.entry.TimePlanningChannelsData +import net.moonleay.liljudd.data.database.tables.TimePlanningChannels 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 object TimePlanningChannelsRepository { @@ -43,7 +46,8 @@ object TimePlanningChannelsRepository { fun exists(channelID: Long, serverID: Long): Boolean = 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 } @@ -55,15 +59,15 @@ object TimePlanningChannelsRepository { fun deleteFromChannelInServer(channelID: Long, serverID: Long) { 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 = transaction { TimePlanningChannels.insert { - it[TimePlanningChannels.serverid] = data.serverID - it[TimePlanningChannels.channelid] = data.channelID + it[serverid] = data.serverID + it[channelid] = data.channelID } get TimePlanningChannels.id } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/TimePlanningMessagesRepository.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningMessagesRepository.kt similarity index 80% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/repository/TimePlanningMessagesRepository.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningMessagesRepository.kt index 780a939..4c92a08 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/repository/TimePlanningMessagesRepository.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningMessagesRepository.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -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.tables.TimePlanningMessages +import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData +import net.moonleay.liljudd.data.database.tables.TimePlanningMessages import org.jetbrains.exposed.sql.and 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 object TimePlanningMessagesRepository { @@ -40,9 +40,7 @@ object TimePlanningMessagesRepository { fun getWeek(stamp: Long): List { val dataList = mutableListOf() transaction { - for (pnr in TimePlanningMessages.select { - TimePlanningMessages.weekstamp eq (stamp) - }) { + for (pnr in TimePlanningMessages.selectAll().where { TimePlanningMessages.weekstamp eq (stamp) }) { dataList.add( TimePlanningMessagesData( pnr[TimePlanningMessages.id], @@ -59,9 +57,8 @@ object TimePlanningMessagesRepository { fun getWeekInChannel(stamp: Long, channelID: Long): TimePlanningMessagesData? = transaction { - TimePlanningMessages.select { - TimePlanningMessages.weekstamp eq (stamp) and (TimePlanningMessages.channelid eq channelID) - }.firstOrNull()?.let { + TimePlanningMessages.selectAll() + .where { TimePlanningMessages.weekstamp eq (stamp) and (TimePlanningMessages.channelid eq channelID) }.firstOrNull()?.let { TimePlanningMessagesData( it[TimePlanningMessages.id], it[TimePlanningMessages.serverid], diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/MatchPlanningData.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/MatchPlanningData.kt similarity index 93% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/tables/MatchPlanningData.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/tables/MatchPlanningData.kt index 391b3e8..1ba4ae3 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/MatchPlanningData.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/MatchPlanningData.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.tables +package net.moonleay.liljudd.data.database.tables import org.jetbrains.exposed.sql.Table diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/PlanningNotifierRoles.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/PlanningNotifierRoles.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/tables/PlanningNotifierRoles.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/tables/PlanningNotifierRoles.kt index 66fe906..0e44813 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/PlanningNotifierRoles.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/PlanningNotifierRoles.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.tables +package net.moonleay.liljudd.data.database.tables import org.jetbrains.exposed.sql.Table diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/TimePlanningChannels.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningChannels.kt similarity index 91% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/tables/TimePlanningChannels.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningChannels.kt index d3b31e3..7b81b0b 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/TimePlanningChannels.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningChannels.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.tables +package net.moonleay.liljudd.data.database.tables import org.jetbrains.exposed.sql.Table diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/TimePlanningMessages.kt b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningMessages.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/data/database/tables/TimePlanningMessages.kt rename to src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningMessages.kt index dd48838..f7061ac 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/database/tables/TimePlanningMessages.kt +++ b/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningMessages.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.database.tables +package net.moonleay.liljudd.data.database.tables import org.jetbrains.exposed.sql.Table diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/FeatureManageExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/FeatureManageExtension.kt similarity index 56% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/FeatureManageExtension.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/FeatureManageExtension.kt index e09786c..309e433 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/FeatureManageExtension.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/FeatureManageExtension.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,22 +16,22 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions +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.commands.converters.impl.channel import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import com.kotlindiscord.kord.extensions.types.respond import com.kotlindiscord.kord.extensions.utils.hasPermission import dev.kord.common.entity.Permission -import net.moonleay.lilJudd.extensions.component.EnableOrDisable -import net.moonleay.lilJudd.features.component.FeatureEnum -import net.moonleay.lilJudd.features.component.FeatureManager -import net.moonleay.lilJudd.util.EmbedColor -import net.moonleay.lilJudd.util.Logger -import net.moonleay.lilJudd.util.MessageUtil +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.extensions.component.EnableOrDisable +import net.moonleay.liljudd.features.component.FeatureEnum +import net.moonleay.liljudd.features.component.FeatureManager +import net.moonleay.liljudd.util.EmbedColor +import net.moonleay.liljudd.util.Logger +import net.moonleay.liljudd.util.MessageUtil class FeatureManageExtension : Extension() { @@ -49,14 +49,16 @@ class FeatureManageExtension : Extension() { val u = this.user if (!u.asMember(this.guild!!.id).hasPermission(Permission.Administrator)) { this.respond { - embeds.add( - MessageUtil.getEmbed( - EmbedColor.ERROR, - "403: Forbidden", - "You cannot edit features, as you don't have the Administrator permission.", - u.asUser().username + "#" + u.asUser().discriminator - ) - ) + this.embed { + this.color = EmbedColor.ERROR.color + this.title = "401: Not Authorized" + this.description = + "You cannot edit features, as you don't have the Administrator permission." + this.footer { + this.icon = u.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(u) + } + } } return@action } @@ -68,26 +70,45 @@ class FeatureManageExtension : Extension() { val f = FeatureManager.getFeature(args.feature) if (f == null) { this.respond { - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.ERROR, - "404: Not Found", - "The feature you are trying to edit does not exist.", - u.asUser().username + "#" + u.asUser().discriminator - ) - ) + this.embed { + this.color = EmbedColor.ERROR.color + this.title = "404: Not Found" + this.description = "The feature you are trying to edit does not exist." + this.footer { + this.icon = u.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(u) + } + } } return@action } if (this.arguments.setStatus == EnableOrDisable.ENABLE) { + val enabled = f.enable(u, gID, cID, channel, args) this.respond { - this.embeds.add(f.enable(u, gID, cID, channel, args)) + this.embed { + this.color = enabled.color + this.title = enabled.title + this.description = enabled.description + this.footer { + this.icon = u.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(u) + } + } } return@action } + val disabled = f.disable(u, gID, cID, channel, args) this.respond { - this.embeds.add(f.disable(u, gID, cID, channel, args)) + this.embed { + this.color = disabled.color + this.title = disabled.title + this.description = disabled.description + this.footer { + this.icon = u.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(u) + } + } } } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/InfoExtension.kt similarity index 57% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/InfoExtension.kt index 6445faf..b47af0b 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/InfoExtension.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions +package net.moonleay.liljudd.extensions import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import net.moonleay.lilJudd.util.EmbedColor -import net.moonleay.lilJudd.util.MessageUtil +import dev.kord.rest.builder.message.embed import net.moonleay.liljudd.build.BuildConstants +import net.moonleay.liljudd.util.EmbedColor class InfoExtension : Extension() { override val name = "info" @@ -31,16 +31,17 @@ class InfoExtension : Extension() { name = "info" description = "Show infos about the bot" this.action { - MessageUtil.sendEmbedForPublicSlashCommand( - this, - EmbedColor.INFO, - "Lil' Judd", - "Lil' Judd ***v." + BuildConstants.version + "***\n" + - "Kord-Extensions ***v." + BuildConstants.kordVersion + "***\n" + - "Coroutines ***v." + BuildConstants.coroutinesVersion + "***\n" + - "Krontab ***v." + BuildConstants.krontabVersion + "***\n\n" + - "Splatoon 3 api data provided by splatoon3.ink" - ) + this.respond { + this.embed { + this.color = EmbedColor.INFO.color + this.title = "Li'l Judd" + this.description = "Li'l Judd ***v." + BuildConstants.version + "***\n" + + "Kord-Extensions ***v." + BuildConstants.kordVersion + "***\n" + + "Coroutines ***v." + BuildConstants.coroutinesVersion + "***\n" + + "Krontab ***v." + BuildConstants.krontabVersion + "***\n\n" + + "Splatoon 3 api data provided by splatoon3.ink" + } + } } } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/MatchExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/MatchExtension.kt similarity index 56% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/MatchExtension.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/MatchExtension.kt index 9f2674d..7d6a8c6 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/MatchExtension.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/MatchExtension.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,27 +16,25 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions +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.commands.converters.impl.optionalString import com.kotlindiscord.kord.extensions.commands.converters.impl.string import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import com.kotlindiscord.kord.extensions.types.respond -import dev.kord.core.behavior.channel.createMessage import dev.kord.core.behavior.createRole -import dev.kord.rest.builder.message.create.actionRow -import net.moonleay.lilJudd.data.database.entry.MatchPlanningDataData -import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository -import net.moonleay.lilJudd.extensions.component.MatchTypes -import net.moonleay.lilJudd.jobs.MatchJob -import net.moonleay.lilJudd.jobs.component.JobManager -import net.moonleay.lilJudd.util.EmbedColor -import net.moonleay.lilJudd.util.EmbedUtil -import net.moonleay.lilJudd.util.MessageUtil -import net.moonleay.lilJudd.util.TimeUtil +import dev.kord.rest.builder.message.actionRow +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.data.database.entry.MatchPlanningDataData +import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository +import net.moonleay.liljudd.extensions.component.MatchTypes +import net.moonleay.liljudd.jobs.MatchJob +import net.moonleay.liljudd.jobs.component.JobManager +import net.moonleay.liljudd.util.EmbedColor +import net.moonleay.liljudd.util.EmbedUtil +import net.moonleay.liljudd.util.MessageUtil +import net.moonleay.liljudd.util.TimeUtil class MatchExtension : Extension() { @@ -54,26 +52,23 @@ class MatchExtension : Extension() { val m = this.member!! val gID = this.guild!!.id.value val cID = this.channel.id.value - val opponent = args.opponent ?: "?" - val msg = this.respond { - this.embeds.add( - MessageUtil.getEmbedWithTable( - EmbedColor.INFO, - args.matchType.readableName, - "***Vs. $opponent***\n" + - "At ${args.timeStamp}\n" + - "Registered by ${m.mention}", - mapOf( - "Signed up" to listOf(), - "Unavailable" to listOf(), - ) - ) - ) - - this.actionRow { - this.components.addAll(EmbedUtil.getMatchButtons().components) + val opponent = args.opponent + if (!TimeUtil.validateDateString(args.timeStamp)) { + this.respond { + this.embed { + this.color = EmbedColor.ERROR.color + this.title = "400: Bad Request" + this.description = "The given timestamp is invalid.\n" + + "Please use the format \"dd.MM.yyyy HH:mm\"." + this.footer { + this.icon = m.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(m.asUser()) + } + } } - } // filter time to date: + return@action + } + // filter time to date: val zdt = TimeUtil.getDateFromString(args.timeStamp) // get the string for the cronjob val jobString = TimeUtil.getCronjobStringFromDate(zdt) @@ -85,19 +80,47 @@ class MatchExtension : Extension() { } // Check if the role was created successfully if (role == null) { - this.channel.createMessage { - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.ERROR, - "500: Internal Error", - "Could not find created role.\n" + - "It seems, that said role could not be created.", - "system message" - ) - ) + this.respond { + this.embed { + this.color = EmbedColor.ERROR.color + this.title = "500: Internal Error" + this.description = "Could not find created role.\n" + + "It seems, that said role could not be created." + this.footer { + this.icon = m.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(m.asUser()) + } + } } return@action } + val msg = this.respond { + val eb = MessageUtil.getEmbedWithTable( + EmbedColor.INFO, + args.matchType.readableName, + "***Vs. $opponent***\n" + + "At ${args.timeStamp}\n" + + "Registered by ${m.mention}", + mapOf( + "Signed up" to listOf(), + "Unavailable" to listOf(), + ) + ) + this.embed { + this.color = eb.color + this.title = eb.title + this.description = eb.description + this.fields = eb.fields + this.footer { + this.icon = m.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(m.asUser()) + } + } + + this.actionRow { + this.components.addAll(EmbedUtil.getMatchButtons().components) + } + } val tID = MatchPlanningDataRepository.write( MatchPlanningDataData( 0, @@ -114,6 +137,7 @@ class MatchExtension : Extension() { ) if (tID == null || tID <= 0) { return@action // Not saved to db + // TODO: Add error message } JobManager.addJob( MatchJob( @@ -140,7 +164,7 @@ class MatchExtension : Extension() { this.description = "The timestamp of the match. Format \"dd.MM.yyyy HH:mm\"." } - val opponent by optionalString { + val opponent by string { this.name = "opponent" this.description = "The opponent" } diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/RotationExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/RotationExtension.kt new file mode 100644 index 0000000..d5b0d7e --- /dev/null +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/RotationExtension.kt @@ -0,0 +1,464 @@ +/* + * lilJudd + * Copyright (C) 2024 moonleay + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.moonleay.liljudd.extensions + +import com.kotlindiscord.kord.extensions.commands.Arguments +import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.enumChoice +import com.kotlindiscord.kord.extensions.extensions.Extension +import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import dev.kord.common.Color +import dev.kord.rest.builder.message.embed +import kotlinx.datetime.Clock +import net.moonleay.liljudd.data.api.splatoon3ink.Splatoon3ApiDataGrabber +import net.moonleay.liljudd.extensions.component.SplatoonOnlineMode +import net.moonleay.liljudd.util.TimeUtil + +class RotationExtension : Extension() { + + override val name = "rotation" + override val allowApplicationCommandInDMs: Boolean + get() = false + + + override suspend fun setup() { + publicSlashCommand(::RotationArguments) { + name = "rotation" + description = "Check the current rotations" + this.action { + val mode = this.arguments.mode + when (mode) { + SplatoonOnlineMode.ALL -> { + val regSched = Splatoon3ApiDataGrabber.getRegularMode(System.currentTimeMillis()) + val regMaps = regSched.regularMatchSetting.vsStages + val regMap1 = regMaps[0] + val regMap2 = regMaps[1] + + val serSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val serMaps = serSched.bankaraMatchSettings!!.first().vsStages + val serMap1 = serMaps[0] + val serMap2 = serMaps[1] + + val opnSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val opnMaps = opnSched.bankaraMatchSettings!!.last().vsStages + val opnMap1 = opnMaps[0] + val opnMap2 = opnMaps[1] + + val xSched = Splatoon3ApiDataGrabber.getXMode(System.currentTimeMillis()) + val xMaps = xSched.xMatchSetting.vsStages + val xMap1 = xMaps[0] + val xMap2 = xMaps[1] + + val salSched = Splatoon3ApiDataGrabber.getSalmonRun(System.currentTimeMillis()) + val salMap = salSched.setting.coopStage.name + val salBoss = salSched.setting.boss.name + val salWeapons = salSched.setting.weapons + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "All Modes" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0x1437FF) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/deepcut.png" + } + + this.field { + this.name = "Regular (${ + TimeUtil.getTimeFromJSONTime( + regSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(regSched.endTime, "UTC")})" + this.value = + "${regSched.regularMatchSetting.vsRule.name} on ${regMap1.name} & ${regMap2.name}" + this.inline = false + } + + this.field { + this.name = "Series (${ + TimeUtil.getTimeFromJSONTime( + serSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(serSched.endTime, "UTC")})" + this.value = + "${serSched.bankaraMatchSettings.first().vsRule.name} on ${serMap1.name} & ${serMap2.name}" + this.inline = false + } + + this.field { + this.name = "Open (${ + TimeUtil.getTimeFromJSONTime( + opnSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(opnSched.endTime, "UTC")})" + this.value = + "${opnSched.bankaraMatchSettings.last().vsRule.name} on ${opnMap1.name} & ${opnMap2.name}" + this.inline = false + } + + this.field { + this.name = "X (${ + TimeUtil.getTimeFromJSONTime( + xSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(xSched.endTime, "UTC")})" + this.value = "${xSched.xMatchSetting.vsRule.name} on ${xMap1.name} & ${xMap2.name}" + this.inline = false + } + + this.field { + this.name = "Salmon Run (${ + TimeUtil.getTimeFromJSONTimeLong( + salSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTimeLong(salSched.endTime, "UTC")})" + this.value = + "${salBoss} on ${salMap} with ${salWeapons[0].name}, ${salWeapons[1].name}, ${salWeapons[2].name} & ${salWeapons[3].name}" + this.inline = false + } + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.REGULAR -> { + val regSched = Splatoon3ApiDataGrabber.getRegularMode(System.currentTimeMillis()) + val regMaps = regSched.regularMatchSetting.vsStages + val regMap1 = regMaps[0] + val regMap2 = regMaps[1] + + val regSched2 = + Splatoon3ApiDataGrabber.getRegularMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val regMaps2 = regSched2.regularMatchSetting.vsStages + val regMap12 = regMaps2[0] + val regMap22 = regMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Regular Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0x18c81b) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/regular.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + regSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(regSched.endTime, "UTC")})" + this.value = + "${regSched.regularMatchSetting.vsRule.name} on ${regMap1.name} & ${regMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + regSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(regSched2.endTime, "UTC")}" + this.value = + "${regSched2.regularMatchSetting.vsRule.name} on ${regMap12.name} & ${regMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.SERIES -> { + val serSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val serMaps = serSched.bankaraMatchSettings!!.first().vsStages + val serMap1 = serMaps[0] + val serMap2 = serMaps[1] + + val serSched2 = + Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val serMaps2 = serSched2.bankaraMatchSettings!!.first().vsStages + val serMap12 = serMaps2[0] + val serMap22 = serMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Ranked Series Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0xE14412) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/bankara.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + serSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(serSched.endTime, "UTC")})" + this.value = + "${serSched.bankaraMatchSettings.first().vsRule.name} on ${serMap1.name} & ${serMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + serSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(serSched2.endTime, "UTC")}" + this.value = + "${serSched2.bankaraMatchSettings.first().vsRule.name} on ${serMap12.name} & ${serMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.OPEN -> { + val opnSched = Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis()) + val opnMaps = opnSched.bankaraMatchSettings!!.last().vsStages + val opnMap1 = opnMaps[0] + val opnMap2 = opnMaps[1] + + val opnSched2 = + Splatoon3ApiDataGrabber.getSeriesMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val opnMaps2 = opnSched2.bankaraMatchSettings!!.last().vsStages + val opnMap12 = opnMaps2[0] + val opnMap22 = opnMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Ranked Open Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0xE14412) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/bankara.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + opnSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(opnSched.endTime, "UTC")})" + this.value = + "${opnSched.bankaraMatchSettings.last().vsRule.name} on ${opnMap1.name} & ${opnMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + opnSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(opnSched2.endTime, "UTC")}" + this.value = + "${opnSched2.bankaraMatchSettings.last().vsRule.name} on ${opnMap12.name} & ${opnMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.X -> { + val xSched = Splatoon3ApiDataGrabber.getXMode(System.currentTimeMillis()) + val xMaps = xSched.xMatchSetting.vsStages + val xMap1 = xMaps[0] + val xMap2 = xMaps[1] + + val xSched2 = Splatoon3ApiDataGrabber.getXMode(System.currentTimeMillis() + 1000 * 60 * 60 * 2) + val xMaps2 = xSched2.xMatchSetting.vsStages + val xMap12 = xMaps2[0] + val xMap22 = xMaps2[1] + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "X Mode" + this.description = "[[Open on website](https://splatoon3.ink/)]" + this.color = Color(0x0ECB93) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/x.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTime( + xSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(xSched.endTime, "UTC")})" + this.value = "${xSched.xMatchSetting.vsRule.name} on ${xMap1.name} & ${xMap2.name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTime( + xSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTime(xSched2.endTime, "UTC")}" + this.value = + "${xSched2.xMatchSetting.vsRule.name} on ${xMap12.name} & ${xMap22.name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + + } + } + } + + SplatoonOnlineMode.SALMON_RUN -> { + val salSched = Splatoon3ApiDataGrabber.getSalmonRun(System.currentTimeMillis()) + val salMap = salSched.setting.coopStage.name + val salBoss = salSched.setting.boss.name + val salWeapons = salSched.setting.weapons + + val salSched2 = + Splatoon3ApiDataGrabber.getSalmonRun(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 2) + val salMap2 = salSched2.setting.coopStage.name + val salBoss2 = salSched2.setting.boss.name + val salWeapons2 = salSched2.setting.weapons + + this.respond { + this.embed { + this.author { + this.name = "Current rotation for" + } + this.title = "Salmon Run" + this.description = "[[Open on website](https://splatoon3.ink/salmonrun)]" + this.color = Color(0xEA4F03) + + this.thumbnail { + this.url = "https://static.moonleay.net/img/lilJudd/grizz.png" + } + + this.field { + this.name = "Current (${ + TimeUtil.getTimeFromJSONTimeLong( + salSched.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTimeLong(salSched.endTime, "UTC")})" + this.value = + "${salBoss} on ${salMap} with ${salWeapons[0].name}, ${salWeapons[1].name}, ${salWeapons[2].name} & ${salWeapons[3].name}" + this.inline = false + } + + this.field { + this.name = "${ + TimeUtil.getTimeFromJSONTimeLong( + salSched2.startTime, + "UTC" + ) + } - ${TimeUtil.getTimeFromJSONTimeLong(salSched2.endTime, "UTC")}" + this.value = + "${salBoss2} on ${salMap2} with ${salWeapons2[0].name}, ${salWeapons2[1].name}, ${salWeapons2[2].name} & ${salWeapons2[3].name}" + this.inline = false + } + + + this.timestamp = Clock.System.now() + this.footer { + this.text = "Data provided by splatoon3.ink" + this.icon = "https://fedi.splatoon3.ink/favicon.png" + } + } + } + } + } + } + } + } + + inner class RotationArguments : Arguments() { + + val mode by enumChoice { + this.name = "mode" + this.description = "The mode you want to check the rotation for" + this.typeName = "en_US" + } + } + +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/SendPlannerExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/SendPlannerExtension.kt similarity index 54% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/SendPlannerExtension.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/SendPlannerExtension.kt index 781de2c..a2d98dc 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/SendPlannerExtension.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/SendPlannerExtension.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,19 +16,20 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions +package net.moonleay.liljudd.extensions import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import com.kotlindiscord.kord.extensions.types.respond import com.kotlindiscord.kord.extensions.utils.hasPermission import dev.kord.common.entity.Permission import dev.kord.core.behavior.channel.createMessage -import dev.kord.rest.builder.message.create.actionRow +import dev.kord.rest.builder.message.actionRow +import dev.kord.rest.builder.message.embed import kotlinx.coroutines.delay -import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData -import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository -import net.moonleay.lilJudd.util.* +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData +import net.moonleay.liljudd.data.database.repository.TimePlanningMessagesRepository +import net.moonleay.liljudd.util.* import java.time.ZoneId import java.time.ZonedDateTime @@ -40,7 +41,7 @@ class SendPlannerExtension : Extension() { get() = false override suspend fun setup() { - publicSlashCommand() { + publicSlashCommand { name = "sendplanner" description = "Send the planner for the current week" this.action { @@ -48,13 +49,31 @@ class SendPlannerExtension : Extension() { .hasPermission(Permission.Administrator) ) { 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() return@action } 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 val c = this.getChannel().asChannel() @@ -64,30 +83,40 @@ class SendPlannerExtension : Extension() { .withHour(4) .withMinute(0).withSecond(0) c.createMessage { - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.INFO, - "Time Planning Feature", - "Do you have time on the following Days?", - "Automated Message" - ) - ) + this.embed { + this.color = EmbedColor.INFO.color + this.title = "Time Planning Feature" + this.description = "Do you have time on the following Days?" + this.footer { + this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter() + } + } } delay(1000) repeat(7) { - val msg = c.createMessage { - this.embeds.add( - MessageUtil.getEmbedWithTable( - EmbedColor.INFO, - "", - "${then.dayOfWeek.name}, ${then.dayOfMonth}.${then.monthValue}.${then.year} /${it + 1}. weekday", - mapOf( - "Is available" to listOf(), - "May be available" to listOf(), - "Is not available" to listOf() - ) - ) + val eb = MessageUtil.getEmbedWithTable( + EmbedColor.INFO, + "", + "${then.dayOfWeek.name}, ${then.dayOfMonth}.${then.monthValue}.${then.year} /${it + 1}. weekday", + mapOf( + "Is available" to listOf(), + "May be available" to listOf(), + "Is not available" to listOf() ) + ) + + val msg = c.createMessage { + this.embed { + this.color = eb.color + this.title = eb.title + this.description = eb.description + this.fields = eb.fields + this.footer { + this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter() + } + } this.actionRow { this.components.addAll(EmbedUtil.getTimePlannerButtons().components) diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/UpdateRolesExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/UpdateRolesExtension.kt similarity index 54% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/UpdateRolesExtension.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/UpdateRolesExtension.kt index be6ba80..7ffe5e9 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/UpdateRolesExtension.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/UpdateRolesExtension.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,17 +16,17 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions +package net.moonleay.liljudd.extensions import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import com.kotlindiscord.kord.extensions.types.respond import com.kotlindiscord.kord.extensions.utils.hasPermission import dev.kord.common.entity.Permission -import net.moonleay.lilJudd.features.AvailabilityManager -import net.moonleay.lilJudd.util.EmbedColor -import net.moonleay.lilJudd.util.Logger -import net.moonleay.lilJudd.util.MessageUtil +import dev.kord.rest.builder.message.embed +import net.moonleay.liljudd.features.AvailabilityManager +import net.moonleay.liljudd.util.EmbedColor +import net.moonleay.liljudd.util.Logger +import net.moonleay.liljudd.util.MessageUtil class UpdateRolesExtension : Extension() { override val name = "updateroles" @@ -34,7 +34,7 @@ class UpdateRolesExtension : Extension() { get() = false override suspend fun setup() { - publicSlashCommand() { + publicSlashCommand { name = "updateroles" description = "Update the roles of the members in the current server" this.action { @@ -42,30 +42,31 @@ class UpdateRolesExtension : Extension() { .hasPermission(Permission.Administrator) ) { this.respond { - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.ERROR, - "403: Forbidden", - "You need to be an administrator to use this command.", - user.asUser().username + "#" + user.asUser().discriminator - ) - ) + 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) + } + } } return@action } this.respond { - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.SUCCESS, - "200: Success", - "Updating roles.\n" + - "This may take a while, please be patient.", - user.asUser().username + "#" + user.asUser().discriminator - ) - ) + this.embed { + this.color = EmbedColor.INFO.color + this.title = "200: Success" + this.description = "Updating roles.\n" + + "This may take a while, please be patient." + this.footer { + this.icon = user.asUser().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter(user) + } + } } - - // -- below here is the code of the cronjob -- Logger.out("Starting to update roles...") AvailabilityManager.updateInChannel(this.channel.id) diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/component/EnableOrDisable.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/component/EnableOrDisable.kt similarity index 91% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/component/EnableOrDisable.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/component/EnableOrDisable.kt index 6d5e614..4cd9a92 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/component/EnableOrDisable.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/component/EnableOrDisable.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions.component +package net.moonleay.liljudd.extensions.component import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/component/MatchTypes.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/component/MatchTypes.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/extensions/component/MatchTypes.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/component/MatchTypes.kt index 3cde91b..cc60220 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/component/MatchTypes.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/component/MatchTypes.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.extensions.component +package net.moonleay.liljudd.extensions.component import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/type/ApiDataType.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/component/SplatoonOnlineMode.kt similarity index 61% rename from src/main/kotlin/net/moonleay/lilJudd/data/api/type/ApiDataType.kt rename to src/main/kotlin/net/moonleay/liljudd/extensions/component/SplatoonOnlineMode.kt index 7123b0d..92e587e 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/type/ApiDataType.kt +++ b/src/main/kotlin/net/moonleay/liljudd/extensions/component/SplatoonOnlineMode.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,15 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.data.api.type +package net.moonleay.liljudd.extensions.component -enum class ApiDataType { - SCHEDULES, - SPLATNETGEAR, - COOP, - SPLATFESTS, - ALL +import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum + +enum class SplatoonOnlineMode(override val readableName: String) : ChoiceEnum { + ALL("All Modes"), + REGULAR("Regular Battle"), + SERIES("Ranked Battle (Series)"), + OPEN("Ranked Battle (Open)"), + X("X Battle"), + SALMON_RUN("Salmon Run"), } diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/AvailabilityManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/AvailabilityManager.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/features/AvailabilityManager.kt rename to src/main/kotlin/net/moonleay/liljudd/features/AvailabilityManager.kt index cc49d1c..e4d0441 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/features/AvailabilityManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/features/AvailabilityManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.features +package net.moonleay.liljudd.features import com.kotlindiscord.kord.extensions.utils.isNullOrBot 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.gateway.PrivilegedIntent import dev.kord.rest.builder.message.EmbedBuilder -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.data.database.entry.PlanningNotifierRolesData -import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData -import net.moonleay.lilJudd.data.database.repository.PlanningNotifierRolesRepository -import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository -import net.moonleay.lilJudd.extensions.FeatureManageExtension -import net.moonleay.lilJudd.features.component.FeatureEnum -import net.moonleay.lilJudd.features.component.IFeature -import net.moonleay.lilJudd.util.* +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.data.database.entry.PlanningNotifierRolesData +import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData +import net.moonleay.liljudd.data.database.repository.PlanningNotifierRolesRepository +import net.moonleay.liljudd.data.database.repository.TimePlanningMessagesRepository +import net.moonleay.liljudd.extensions.FeatureManageExtension +import net.moonleay.liljudd.features.component.FeatureEnum +import net.moonleay.liljudd.features.component.IFeature +import net.moonleay.liljudd.util.* import java.time.ZonedDateTime object AvailabilityManager : IFeature { // This runs during the cronjob. suspend fun runThread() { - Logger.out("Starting to update roles...") + Logger.out("Updating match roles") // ChannelID, Data val messages = TimePlanningMessagesRepository.getWeek(TimeUtil.getWeekStamp().toEpochSecond()) @@ -70,7 +70,7 @@ object AvailabilityManager : IFeature { } this.updateInChannel(snf, data, roleData) } - Logger.out("Done! Until tomorrow! <3 ") + Logger.out("Finished updating roles") } suspend fun updateInChannel(snf: Snowflake) { @@ -162,7 +162,7 @@ object AvailabilityManager : IFeature { // Register the cronjob to run at 1AM UTC every day 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 scheduler.doInfinity { this.runThread() @@ -176,7 +176,7 @@ object AvailabilityManager : IFeature { ch: Channel, args: FeatureManageExtension.FeatureManagerArgs ): EmbedBuilder { - var alreadyExists = PlanningNotifierRolesRepository.existsInChannel(cID) + val alreadyExists = PlanningNotifierRolesRepository.existsInChannel(cID) // Check if the channel and guild already exist in the db if (!alreadyExists) { // Create the roles in Discord diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/MatchManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/MatchManager.kt similarity index 80% rename from src/main/kotlin/net/moonleay/lilJudd/features/MatchManager.kt rename to src/main/kotlin/net/moonleay/liljudd/features/MatchManager.kt index 129fdc0..1bdeafe 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/features/MatchManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/features/MatchManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,19 +16,19 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.features +package net.moonleay.liljudd.features import dev.kord.common.entity.Snowflake -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.data.database.entry.MatchPlanningDataData -import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository -import net.moonleay.lilJudd.jobs.MatchJob -import net.moonleay.lilJudd.jobs.component.JobManager -import net.moonleay.lilJudd.util.Logger +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.data.database.entry.MatchPlanningDataData +import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository +import net.moonleay.liljudd.jobs.MatchJob +import net.moonleay.liljudd.jobs.component.JobManager +import net.moonleay.liljudd.util.Logger object MatchManager { suspend fun update() { - Logger.out("Updating match roles...") + Logger.out("Updating matches") val dataList = MatchPlanningDataRepository.getAll() for (data in dataList) { @@ -41,7 +41,7 @@ object MatchManager { } this.registerJob(data) } - Logger.out("Done. Until next time! <3 ") + Logger.out("Finished updating matches") } private fun registerJob(data: MatchPlanningDataData) { diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/TimeManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/TimeManager.kt similarity index 62% rename from src/main/kotlin/net/moonleay/lilJudd/features/TimeManager.kt rename to src/main/kotlin/net/moonleay/liljudd/features/TimeManager.kt index ec073ac..0496dff 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/features/TimeManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/features/TimeManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.features +package net.moonleay.liljudd.features import dev.inmo.krontab.buildSchedule import dev.inmo.krontab.doInfinity @@ -26,21 +26,22 @@ import dev.kord.core.behavior.channel.createMessage import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.MessageChannel import dev.kord.rest.builder.message.EmbedBuilder -import dev.kord.rest.builder.message.create.actionRow +import dev.kord.rest.builder.message.actionRow +import dev.kord.rest.builder.message.embed import kotlinx.coroutines.delay -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.data.database.entry.TimePlanningChannelsData -import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData -import net.moonleay.lilJudd.data.database.repository.PlanningNotifierRolesRepository -import net.moonleay.lilJudd.data.database.repository.TimePlanningChannelsRepository -import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository -import net.moonleay.lilJudd.extensions.FeatureManageExtension -import net.moonleay.lilJudd.features.component.FeatureEnum -import net.moonleay.lilJudd.features.component.IFeature -import net.moonleay.lilJudd.util.EmbedColor -import net.moonleay.lilJudd.util.EmbedUtil -import net.moonleay.lilJudd.util.Logger -import net.moonleay.lilJudd.util.MessageUtil +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.data.database.entry.TimePlanningChannelsData +import net.moonleay.liljudd.data.database.entry.TimePlanningMessagesData +import net.moonleay.liljudd.data.database.repository.PlanningNotifierRolesRepository +import net.moonleay.liljudd.data.database.repository.TimePlanningChannelsRepository +import net.moonleay.liljudd.data.database.repository.TimePlanningMessagesRepository +import net.moonleay.liljudd.extensions.FeatureManageExtension +import net.moonleay.liljudd.features.component.FeatureEnum +import net.moonleay.liljudd.features.component.IFeature +import net.moonleay.liljudd.util.EmbedColor +import net.moonleay.liljudd.util.EmbedUtil +import net.moonleay.liljudd.util.Logger +import net.moonleay.liljudd.util.MessageUtil import java.time.ZoneId import java.time.ZonedDateTime @@ -51,7 +52,7 @@ object TimeManager : IFeature { // Register the cronjob to run at 0:01 AM UTC every Monday 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 scheduler.doInfinity { this.runThread() @@ -59,7 +60,7 @@ object TimeManager : IFeature { } private suspend fun runThread() { - Logger.out("Starting to notify...") + Logger.out("Starting to send out weekly planning messages") // ChannelID -> Data val targetedChannels = TimePlanningChannelsRepository.getAll().associateBy { it.channelID } @@ -71,50 +72,60 @@ object TimeManager : IFeature { for (ch2 in targetedChannels.keys) { val ch = Snowflake(ch2) 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(ch)!! msgStr = "" if (targetedRoles != null && targetedRoles.keys.contains(ch2) && targetedRoles[ch2] != null) { c.createMessage { this.content = "The weekly planning starts now <@&${Snowflake(targetedRoles[ch2]?.wantsToBeNotifiedID!!)}>" - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.INFO, - "Time Planning Feature", - "Do you have time on the following Days?", - "Automated Message" - ) - ) + this.embed { + this.color = EmbedColor.INFO.color + this.title = "Time Planning Feature" + this.description = "Do you have time on the following Days?" + this.footer { + this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter() + } + } } } else { c.createMessage { - this.embeds.add( - MessageUtil.getEmbed( - EmbedColor.INFO, - "Time Planning Feature", - "Do you have time on the following Days?", - "Automated Message" - ) - ) + this.embed { + this.color = EmbedColor.INFO.color + this.title = "Time Planning Feature" + this.description = "Do you have time on the following Days?" + this.footer { + this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter() + } + } } } delay(2000) var then = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withHour(4).withMinute(0).withSecond(0) repeat(7) { - val msg = c.createMessage { - this.embeds.add( - MessageUtil.getEmbedWithTable( - EmbedColor.INFO, - "", - "${then.dayOfWeek.name}, ${then.dayOfMonth}.${then.monthValue}.${then.year} /${it + 1}. weekday", - mapOf( - "Is available" to listOf(), - "May be available" to listOf(), - "Is not available" to listOf() - ) - ) + val eb = MessageUtil.getEmbedWithTable( + EmbedColor.INFO, + "", + "${then.dayOfWeek.name}, ${then.dayOfMonth}.${then.monthValue}.${then.year} /${it + 1}. weekday", + mapOf( + "Is available" to listOf(), + "May be available" to listOf(), + "Is not available" to listOf() ) + ) + val msg = c.createMessage { + this.embed { + this.color = eb.color + this.title = eb.title + this.description = eb.description + this.fields = eb.fields + this.footer { + this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl() + this.text = MessageUtil.getFooter() + } + } this.actionRow { this.components.addAll(EmbedUtil.getTimePlannerButtons().components) @@ -122,7 +133,7 @@ object TimeManager : IFeature { } msgStr += "${it}:${msg.id.value};" 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) } @@ -155,14 +166,14 @@ object TimeManager : IFeature { EmbedColor.SUCCESS, "200: Success", "The feature was enabled in channel ${args.channel.data.name.value}", - u.asUser().username + "#" + u.asUser().discriminator + u.asUser().username ) } return MessageUtil.getEmbed( EmbedColor.ERROR, - "403: Forbidden", + "409: Conflict", "The feature is already enabled in this channel.", - u.asUser().username + "#" + u.asUser().discriminator + u.asUser().username ) } @@ -175,21 +186,21 @@ object TimeManager : IFeature { ): EmbedBuilder { // Check if entry exists in db if (TimePlanningChannelsRepository.exists(cID, gID)) { - // delete all entrys for this channel + // delete all entries for this channel TimePlanningChannelsRepository.deleteFromChannelInServer(cID, gID) return MessageUtil.getEmbed( EmbedColor.SUCCESS, "200: Success", "The feature was disabled.", - u.asUser().username + "#" + u.asUser().discriminator + u.asUser().username ) } // Do nothing; not in db return MessageUtil.getEmbed( EmbedColor.ERROR, - "403: Forbidden", + "409: Conflict", "The feature is already disabled in this channel.", - u.asUser().username + "#" + u.asUser().discriminator + u.asUser().username ) } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/component/FeatureEnum.kt b/src/main/kotlin/net/moonleay/liljudd/features/component/FeatureEnum.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/features/component/FeatureEnum.kt rename to src/main/kotlin/net/moonleay/liljudd/features/component/FeatureEnum.kt index 8b3a0a8..b06fc3b 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/features/component/FeatureEnum.kt +++ b/src/main/kotlin/net/moonleay/liljudd/features/component/FeatureEnum.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.features.component +package net.moonleay.liljudd.features.component import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/component/FeatureManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/component/FeatureManager.kt similarity index 82% rename from src/main/kotlin/net/moonleay/lilJudd/features/component/FeatureManager.kt rename to src/main/kotlin/net/moonleay/liljudd/features/component/FeatureManager.kt index d380d9c..a9212b4 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/features/component/FeatureManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/features/component/FeatureManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.features.component +package net.moonleay.liljudd.features.component -import net.moonleay.lilJudd.features.AvailabilityManager -import net.moonleay.lilJudd.features.TimeManager +import net.moonleay.liljudd.features.AvailabilityManager +import net.moonleay.liljudd.features.TimeManager object FeatureManager { val features = mutableListOf(AvailabilityManager, TimeManager) // Stores all features diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/component/IFeature.kt b/src/main/kotlin/net/moonleay/liljudd/features/component/IFeature.kt similarity index 89% rename from src/main/kotlin/net/moonleay/lilJudd/features/component/IFeature.kt rename to src/main/kotlin/net/moonleay/liljudd/features/component/IFeature.kt index 1145797..77170f3 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/features/component/IFeature.kt +++ b/src/main/kotlin/net/moonleay/liljudd/features/component/IFeature.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.features.component +package net.moonleay.liljudd.features.component import dev.kord.core.behavior.UserBehavior import dev.kord.core.entity.channel.Channel import dev.kord.rest.builder.message.EmbedBuilder -import net.moonleay.lilJudd.extensions.FeatureManageExtension +import net.moonleay.liljudd.extensions.FeatureManageExtension interface IFeature { val feat: FeatureEnum diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/MatchJob.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/MatchJob.kt similarity index 84% rename from src/main/kotlin/net/moonleay/lilJudd/jobs/MatchJob.kt rename to src/main/kotlin/net/moonleay/liljudd/jobs/MatchJob.kt index 6f13dfa..130e304 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/MatchJob.kt +++ b/src/main/kotlin/net/moonleay/liljudd/jobs/MatchJob.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,17 +16,17 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.jobs +package net.moonleay.liljudd.jobs import dev.inmo.krontab.KronScheduler import dev.kord.common.entity.Snowflake import kotlinx.coroutines.Job -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository -import net.moonleay.lilJudd.jobs.component.CronjobType -import net.moonleay.lilJudd.jobs.component.ICronjob -import net.moonleay.lilJudd.jobs.component.JobManager -import net.moonleay.lilJudd.util.Logger +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.data.database.repository.MatchPlanningDataRepository +import net.moonleay.liljudd.jobs.component.CronjobType +import net.moonleay.liljudd.jobs.component.ICronjob +import net.moonleay.liljudd.jobs.component.JobManager +import net.moonleay.liljudd.util.Logger class MatchJob( override val jobIncoming: String, diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt similarity index 67% rename from src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt rename to src/main/kotlin/net/moonleay/liljudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt index 5c38b15..b5701c0 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt +++ b/src/main/kotlin/net/moonleay/liljudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,16 +16,14 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.jobs +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 +import net.moonleay.liljudd.data.api.splatoon3ink.Splatoon3Api +import net.moonleay.liljudd.jobs.component.CronjobType +import net.moonleay.liljudd.jobs.component.ICronjob +import net.moonleay.liljudd.util.Logger object Splatoon3ApiScheduleUpdateScheduler : ICronjob { override val jobName: String @@ -40,8 +38,8 @@ object Splatoon3ApiScheduleUpdateScheduler : ICronjob { override lateinit var scheduler: KronScheduler override suspend fun jobFunction() { - Logger.out("Running Splatoon3ApiScheduleUpdateScheduler.") - Splatoon3ApiCache.updateData(ApiDataType.SCHEDULES, ApiRequestType.AUTOMATIC_CACHE_UPDATE) - Logger.out("Splatoon3ApiScheduleUpdateScheduler finished.") + Logger.out("Updating Schedules...") + Splatoon3Api.updateSchedule() + Logger.out("Updating finished.") } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/StatusUpdater.kt similarity index 63% rename from src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt rename to src/main/kotlin/net/moonleay/liljudd/jobs/StatusUpdater.kt index 7df554b..fdb421b 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/StatusUpdater.kt +++ b/src/main/kotlin/net/moonleay/liljudd/jobs/StatusUpdater.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,21 +16,21 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.jobs +package net.moonleay.liljudd.jobs import dev.inmo.krontab.KronScheduler import dev.kord.common.entity.PresenceStatus import kotlinx.coroutines.Job -import net.moonleay.lilJudd.Bot -import net.moonleay.lilJudd.data.api.Splatoon3Api -import net.moonleay.lilJudd.jobs.component.CronjobType -import net.moonleay.lilJudd.jobs.component.ICronjob +import net.moonleay.liljudd.Bot +import net.moonleay.liljudd.data.api.splatoon3ink.Splatoon3ApiDataGrabber +import net.moonleay.liljudd.jobs.component.CronjobType +import net.moonleay.liljudd.jobs.component.ICronjob object StatusUpdater : ICronjob { override val jobName: String get() = "StatusUpdater" override val jobIncoming: String - get() = "/5 * * * * * 0o *" //Every 5 seconds + get() = "/30 * * * * * 0o *" //Every 30 seconds override val jobType: CronjobType get() = CronjobType.INFINITE override val continueJob: Boolean @@ -41,27 +41,26 @@ object StatusUpdater : ICronjob { private var statusList = listOf() private var index = 0 + // I h8 this cronjob. I'll recode this someday. override suspend fun jobFunction() { - refreshStatusList(System.currentTimeMillis()) - Bot.bot.kordRef.editPresence { - this.status = PresenceStatus.DoNotDisturb - this.playing(statusList[index]) - } - ++index if (index >= statusList.size) { index = 0 + refreshStatusList(System.currentTimeMillis()) } + Bot.bot.kordRef.editPresence { + this.status = PresenceStatus.DoNotDisturb + this.competing(statusList[index]) + } + ++index } - fun refreshStatusList(timestamp: Long) { + private fun refreshStatusList(timestamp: Long) { statusList = listOf( - Splatoon3Api.getRegularMapsFormatted(timestamp), - Splatoon3Api.getSeriesModeFormatted(timestamp), - Splatoon3Api.getSeriesMapsFormatted(timestamp), - Splatoon3Api.getOpenModeFormatted(timestamp), - Splatoon3Api.getOpenMapFormatted(timestamp), - Splatoon3Api.getXModeFormatted(timestamp), - Splatoon3Api.getXMapFormatted(timestamp), + Splatoon3ApiDataGrabber.getRotationTime(timestamp), + Splatoon3ApiDataGrabber.getRegularMapsFormatted(timestamp), + Splatoon3ApiDataGrabber.getOpenMapFormatted(timestamp), + Splatoon3ApiDataGrabber.getSeriesMapsFormatted(timestamp), + Splatoon3ApiDataGrabber.getXMapFormatted(timestamp) ) } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/component/CronjobType.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/component/CronjobType.kt similarity index 90% rename from src/main/kotlin/net/moonleay/lilJudd/jobs/component/CronjobType.kt rename to src/main/kotlin/net/moonleay/liljudd/jobs/component/CronjobType.kt index fa34b60..fa1992b 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/component/CronjobType.kt +++ b/src/main/kotlin/net/moonleay/liljudd/jobs/component/CronjobType.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.jobs.component +package net.moonleay.liljudd.jobs.component enum class CronjobType { INFINITE, diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/component/ICronjob.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/component/ICronjob.kt similarity index 94% rename from src/main/kotlin/net/moonleay/lilJudd/jobs/component/ICronjob.kt rename to src/main/kotlin/net/moonleay/liljudd/jobs/component/ICronjob.kt index d3f6700..8e3f946 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/component/ICronjob.kt +++ b/src/main/kotlin/net/moonleay/liljudd/jobs/component/ICronjob.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.jobs.component +package net.moonleay.liljudd.jobs.component import dev.inmo.krontab.KronScheduler import kotlinx.coroutines.Job diff --git a/src/main/kotlin/net/moonleay/lilJudd/jobs/component/JobManager.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/component/JobManager.kt similarity index 96% rename from src/main/kotlin/net/moonleay/lilJudd/jobs/component/JobManager.kt rename to src/main/kotlin/net/moonleay/liljudd/jobs/component/JobManager.kt index cc55256..ce62d1c 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/jobs/component/JobManager.kt +++ b/src/main/kotlin/net/moonleay/liljudd/jobs/component/JobManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.jobs.component +package net.moonleay.liljudd.jobs.component import dev.inmo.krontab.buildSchedule import dev.inmo.krontab.doInfinityTz @@ -25,7 +25,7 @@ import dev.inmo.krontab.doWhileTz import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import net.moonleay.lilJudd.util.Logger +import net.moonleay.liljudd.util.Logger import java.time.LocalDateTime import java.time.format.DateTimeFormatter diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/EmbedColor.kt b/src/main/kotlin/net/moonleay/liljudd/util/EmbedColor.kt similarity index 92% rename from src/main/kotlin/net/moonleay/lilJudd/util/EmbedColor.kt rename to src/main/kotlin/net/moonleay/liljudd/util/EmbedColor.kt index cb3e983..7d9def4 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/EmbedColor.kt +++ b/src/main/kotlin/net/moonleay/liljudd/util/EmbedColor.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.util +package net.moonleay.liljudd.util import dev.kord.common.Color diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/EmbedUtil.kt b/src/main/kotlin/net/moonleay/liljudd/util/EmbedUtil.kt similarity index 98% rename from src/main/kotlin/net/moonleay/lilJudd/util/EmbedUtil.kt rename to src/main/kotlin/net/moonleay/liljudd/util/EmbedUtil.kt index 17615b3..f109ed3 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/EmbedUtil.kt +++ b/src/main/kotlin/net/moonleay/liljudd/util/EmbedUtil.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.util +package net.moonleay.liljudd.util import dev.kord.common.entity.ButtonStyle import dev.kord.core.entity.Embed diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/Logger.kt b/src/main/kotlin/net/moonleay/liljudd/util/Logger.kt similarity index 95% rename from src/main/kotlin/net/moonleay/lilJudd/util/Logger.kt rename to src/main/kotlin/net/moonleay/liljudd/util/Logger.kt index 446609c..25a5804 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/Logger.kt +++ b/src/main/kotlin/net/moonleay/liljudd/util/Logger.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.util +package net.moonleay.liljudd.util import java.time.LocalDateTime import java.time.format.DateTimeFormatter diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/MessageUtil.kt b/src/main/kotlin/net/moonleay/liljudd/util/MessageUtil.kt similarity index 57% rename from src/main/kotlin/net/moonleay/lilJudd/util/MessageUtil.kt rename to src/main/kotlin/net/moonleay/liljudd/util/MessageUtil.kt index 6dfb545..f531dd0 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/MessageUtil.kt +++ b/src/main/kotlin/net/moonleay/liljudd/util/MessageUtil.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,12 +16,9 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.util +package net.moonleay.liljudd.util -import com.kotlindiscord.kord.extensions.commands.Arguments -import com.kotlindiscord.kord.extensions.commands.application.slash.PublicSlashCommandContext -import com.kotlindiscord.kord.extensions.components.forms.ModalForm -import com.kotlindiscord.kord.extensions.types.respond +import dev.kord.core.behavior.UserBehavior import dev.kord.core.entity.Embed import dev.kord.rest.builder.message.EmbedBuilder import java.time.LocalDateTime @@ -30,44 +27,9 @@ import java.time.format.DateTimeFormatter object MessageUtil { private val dtf: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy @ HH:mm:ss") - ///Send an embedded message as a reply - suspend fun sendEmbedForPublicSlashCommand( - ctx: PublicSlashCommandContext, - color: EmbedColor, - title: String, - description: String - ) { - ctx.respond { - embeds.add( - getEmbed( - color, - title, - description, - ctx.user.asUser().username + "#" + ctx.user.asUser().discriminator - ) - ) - } - } - - ///Send an embedded message with an image as a reply - suspend fun sendEmbedForPublicSlashCommandWithImage( - ctx: PublicSlashCommandContext, - color: EmbedColor, - title: String, - description: String, - thumbnailUrl: String - ) { - ctx.respond { - embeds.add( - getEmbedWithImage( - color, - title, - description, - ctx.user.asUser().username + "#" + ctx.user.asUser().discriminator, - thumbnailUrl - ) - ) - } + suspend fun getFooter(u: UserBehavior? = null): String { + val now: LocalDateTime = LocalDateTime.now() + return ">" + dtf.format(now) + " - ${u?.asUser()?.username ?: "Automated Message"}" } ///Get a cloned embedded message @@ -75,6 +37,11 @@ object MessageUtil { val ebb = EmbedBuilder() ebb.color = e.color ebb.title = e.title + ebb.author { + this.icon = e.author?.url + this.name = e.author?.name.toString() + this.url = e.author?.url + } e.fields.forEach { val fb = EmbedBuilder.Field() fb.name = it.name @@ -82,6 +49,10 @@ object MessageUtil { fb.inline = it.inline ebb.fields.add(fb) } + ebb.footer { + this.icon = e.footer?.iconUrl + this.text = e.footer?.text.toString() + } ebb.description = e.description return ebb } @@ -90,6 +61,11 @@ object MessageUtil { val ebb = EmbedBuilder() ebb.color = e.color ebb.title = e.title + ebb.author { + this.icon = e.author?.url + this.name = e.author?.name.toString() + this.url = e.author?.url + } e.fields.forEach { val fb = EmbedBuilder.Field() fb.name = it.name @@ -97,24 +73,14 @@ object MessageUtil { fb.inline = it.inline ebb.fields.add(fb) } + ebb.footer { + this.icon = e.footer?.icon + this.text = e.footer?.text.toString() + } ebb.description = e.description return ebb } - fun getEmbedWithTableWithFooter( - color: EmbedColor, - title: String, - description: String, - values: Map>?, - footer: String - ): EmbedBuilder { - val ebb = getEmbedWithTable(color, title, description, values) - ebb.footer = EmbedBuilder.Footer() - ebb.footer!!.text = ">m.id/$footer" - return ebb - } - - ///Get an embedded msg with image, title and description fun getEmbedWithTable( color: EmbedColor, title: String, @@ -136,7 +102,6 @@ object MessageUtil { return ebb } - ///Get an embedded msg with title and description fun getEmbedSmall( color: EmbedColor, @@ -164,17 +129,4 @@ object MessageUtil { return ebb } - ///Get an embedded msg with image, title, description and a src - fun getEmbedWithImage( - color: EmbedColor, - title: String, - description: String, - source: String, - thumbnailUrl: String - ): EmbedBuilder { - val ebb = getEmbed(color, title, description, source) - ebb.thumbnail = EmbedBuilder.Thumbnail() - ebb.thumbnail!!.url = thumbnailUrl - return ebb - } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/NetUtil.kt b/src/main/kotlin/net/moonleay/liljudd/util/NetUtil.kt similarity index 96% rename from src/main/kotlin/net/moonleay/lilJudd/util/NetUtil.kt rename to src/main/kotlin/net/moonleay/liljudd/util/NetUtil.kt index 5b43bbc..665d0bb 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/NetUtil.kt +++ b/src/main/kotlin/net/moonleay/liljudd/util/NetUtil.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.util +package net.moonleay.liljudd.util import java.net.URL import javax.net.ssl.HttpsURLConnection diff --git a/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt b/src/main/kotlin/net/moonleay/liljudd/util/TimeUtil.kt similarity index 82% rename from src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt rename to src/main/kotlin/net/moonleay/liljudd/util/TimeUtil.kt index 5287bc3..bddc8b1 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt +++ b/src/main/kotlin/net/moonleay/liljudd/util/TimeUtil.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.lilJudd.util +package net.moonleay.liljudd.util import kotlinx.datetime.DayOfWeek import java.time.Duration @@ -145,6 +145,16 @@ object TimeUtil { .withMinute(0).withSecond(0) } + fun validateDateString(input: String): Boolean { + val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") + return try { + LocalDateTime.parse(input, formatter) + true + } catch (e: Exception) { + false + } + } + fun getDateFromString(input: String): ZonedDateTime { val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") val localDateTime = LocalDateTime.parse(input, formatter) @@ -167,6 +177,24 @@ object TimeUtil { return ZonedDateTime.of(localDateTime, zoneId).toEpochSecond() * 1000 } + fun getTimeFromJSONTime(inp: String, zone: String): String { + // 2023-10-05T08:00:00Z + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") + val localDateTime = LocalDateTime.parse(inp, formatter) + val zoneId = ZoneId.of(zone) // TODO: Add the possibility to set your timezone + val returnFormat = DateTimeFormatter.ofPattern("HH:mm") + return ZonedDateTime.of(localDateTime, zoneId).format(returnFormat) + } + + fun getTimeFromJSONTimeLong(inp: String, zone: String): String { + // 2023-10-05T08:00:00Z + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") + val localDateTime = LocalDateTime.parse(inp, formatter) + val zoneId = ZoneId.of(zone) // TODO: Add the possibility to set your timezone + val returnFormat = DateTimeFormatter.ofPattern("dd'/'MM',' HH:mm") + return ZonedDateTime.of(localDateTime, zoneId).format(returnFormat) + } + fun getTimeDifferenceFormatted(start: Long, end: Long): String { val diff = end - start return getTimeFormatedShortend(diff, false) diff --git a/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt b/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt index d75d861..73a4fdd 100644 --- a/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt +++ b/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2023 moonleay + * Copyright (C) 2024 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,11 +20,12 @@ package net.moonleay.liljudd.build internal object BuildConstants { const val version = "${version}" - const val ownerID = "${ownerID}" + const val creatorID = "${creatorID}" const val kordVersion = "${kordversion}" const val coroutinesVersion = "${coroutinesversion}" const val ktorVersion = "${ktorversion}" const val exposedVersion = "${exposedversion}" const val postgresVersion = "${postgresversion}" const val krontabVersion = "${krontabversion}" + const val kotlinXSerializationVerson = "${kotlinxserializationversion}" }