diff --git a/.dockerignore b/.dockerignore index 1c7ce56..0b6a882 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,3 @@ **.nils /run /run/ -docker-compose.yml diff --git a/.forgejo/workflows/action.yml b/.forgejo/workflows/action.yml deleted file mode 100644 index 4eff152..0000000 --- a/.forgejo/workflows/action.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Build Gradle project - -on: - push: - -jobs: - build-gradle-project: - runs-on: docker - steps: - - name: apt update - run: apt update - - name: install prerequisits - run: apt install openjdk-17-jdk ca-certificates-java ssl-cert openssl ca-certificates -y - - name: Checkout project sources - uses: actions/checkout@v3 - - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - - name: Run build with Gradle Wrapper - run: ./gradlew shadowJar - - uses: actions/upload-artifact@v3 - with: - name: lilJudd.jar - path: build/libs/ diff --git a/.gitignore b/.gitignore index f970cd0..ce11a8e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ run/ -/data/ .gradle build/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bcdee2b..6fcd41c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,15 +21,14 @@ cache: - build build: - only: - - tags stage: build script: - gradle shadowJar + except: + - tags publish: - only: - - tags stage: publish script: - gradle publish + diff --git a/README.md b/README.md index e1768f6..4e4c0f6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,11 @@ "Oh boy, here we go again" ~ me -A Discord Bot for Splatoon Teams. +A Discord Bot for Splatoon Teams + +[![Latest Release](https://gitlab.com/moonleay/liljudd/-/badges/release.svg)](https://gitlab.com/moonleay/liljudd/-/releases) +[![pipeline status](https://gitlab.com/moonleay/liljudd/badges/master/pipeline.svg)](https://gitlab.com/moonleay/liljudd/-/commits/master) +[![License](https://img.shields.io/badge/license-GPL--3.0-brightgreen)](https://gitlab.com/moonleay/liljudd/-/blob/master/LICENSE) ## Contributors @@ -10,60 +14,50 @@ A Discord Bot for Splatoon Teams. ## Known issues -##### 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). +- There is a bug with the TimePlanning feature. This bug makes the bot not remove the user properly, the result looks + like [this](https://cdn.discordapp.com/attachments/1015606848797290566/1110671293436661812/image.png) ## Commands & Features - Commands - version -- Show the versions of the bot and the most important dependencies - feature -- Manage bot features - - 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 -## The todo list +## (Maybe) upcoming features -##### See the [todo list](https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban) for more information. +- Match Planner (Send Notifications some time before a match starts) +- Planning Notifier (Make it possible to ping people, who have time at a specific time) +- Game Tracker (Save the results of the last matches) +- Replay Saver (Maybe; will save the replay code to a database) ## How to self-host (using the Docker container) -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. +1. Pull the container +2. Map /data/ to a folder on disk +3. Run the Bot once +4. Follow step 4 - 7 of "How to self-host (using the JAR)" ## How to self-host (using the JAR) -1. Download the latest release from the Releases page. +1. Download the latest release from the Package Registry ("Packages and registries" > "Package Registry") + 1. It should be called something like this: "lilJudd-X.X.X-xxxxxxxx-prod.jar" (replace "X.X.X" with the latest + version and xxxxxxxx" with the commit its based on.) + 2. If you want to run an early version, which may be (very) unsable, you can run a development version. Just use an + entry ending in "-dev.jar" 2. Place it anywhere you want. 3. Run the following command: - > java -jar lilJudd.jar + > java -jar lilJudd-X.X.X-xxxxxxxx-prod.jar 4. The bot should start and create a config file named "credentials.nils" in a folder called "data" 5. Open it and put in your credentials. 1. token: your Discord bot token 2. dbDomain: the domain and port of your postgresql database (e.g.: 192.168.178.1:5432) - 3. dbName: the name of the database + 3. dbName: the name of your database 4. dbUser: the username of the database - 5. dbPassword: the password to the db user + 5. dbPassword: the password to your user 6. Rerun the command - > java -jar lilJudd.jar + > java -jar lilJudd-X.X.X-xxxxxxxx-prod.jar 7. The bot should now be up and running. ## How to set up workspace diff --git a/build.gradle.kts b/build.gradle.kts index 0ad11dc..b949e67 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -21,27 +21,25 @@ import org.jetbrains.gradle.ext.TaskTriggersConfig import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - 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" + kotlin("jvm") version "1.8.20" + id("com.github.johnrengelman.shadow") version "7.1.2" + id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.6" `maven-publish` } //lilJudd version 2 -val creatorID = 372703841151614976L +val ownerID = 372703841151614976L group = "net.moonleay.liljudd" version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_SHORT_SHA")}-prod" } ?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" } - ?: "2.7.2" + ?: "2.2.1.1" -val kordver = "1.7.1-SNAPSHOT" -val coroutinesver = "1.7.3" -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 kordver = "1.5.6" +val coroutinesver = "1.1.0" +val ktor_version = "2.3.0" +val exposedver = "0.40.1" +val postgresver = "42.3.8" +val krontabver = "1.0.0" val mavenArtifact = "lilJudd" project.base.archivesName.set(mavenArtifact) @@ -74,14 +72,6 @@ repositories { } } } - maven { - name = "sonatype" - url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots") - } - maven { - name = "sonatype 2" - url = uri("https://oss.sonatype.org/content/repositories/snapshots") - } } val shadow by configurations.getting @@ -91,13 +81,8 @@ implementation.extendsFrom(shadow) dependencies { //Discord shadow("com.kotlindiscord.kord.extensions:kord-extensions:$kordver") - - //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") @@ -108,26 +93,25 @@ dependencies { shadow("org.jetbrains.exposed:exposed-jdbc:$exposedver") shadow("org.postgresql:postgresql:$postgresver") - //Krontab + //Korntab shadow("dev.inmo:krontab:$krontabver") - shadow("io.ktor:ktor-client-core-jvm:$ktorver") - shadow("io.ktor:ktor-client-cio-jvm:$ktorver") + "shadow"("io.ktor:ktor-client-core-jvm:2.3.1") + "shadow"("io.ktor:ktor-client-cio-jvm:2.3.1") } val targetJavaVersion = 17 val templateSrc = project.rootDir.resolve("src/main/templates") -val templateDest = project.projectDir.resolve("build/generated/templates") +val templateDest = project.buildDir.resolve("generated/templates") val templateProps = mapOf( "version" to project.version as String, - "creatorID" to creatorID, + "ownerID" to ownerID, "kordversion" to kordver, "coroutinesversion" to coroutinesver, - "ktorversion" to ktorver, + "ktorversion" to ktor_version, "exposedversion" to exposedver, "postgresversion" to postgresver, - "krontabversion" to krontabver, - "kotlinxserializationversion" to kotlinxserializationver + "krontabversion" to krontabver ) diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index af8faef..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,32 +0,0 @@ -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 d64cd49..249e583 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 3ba58b0..21995b6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ # # lilJudd -# Copyright (C) 2024 moonleay +# 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 @@ -18,8 +18,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index bf6021c..99d219e 100755 --- a/gradlew +++ b/gradlew @@ -2,7 +2,7 @@ # # lilJudd -# Copyright (C) 2024 moonleay +# 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 @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/master/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,11 +82,13 @@ do esac done -# This is normally unused -# shellcheck disable=SC2034 +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" APP_BASE_NAME=${0##*/} -# 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 + +# 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"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,29 +135,22 @@ location of your Java installation." fi else JAVACMD=java - 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. + which java >/dev/null 2>&1 || 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 @@ -200,15 +195,11 @@ if "$cygwin" || "$msys" ; then done fi - -# 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. +# 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. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -216,12 +207,6 @@ 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 93e3f59..107acd3 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,8 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused +if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -41,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -76,15 +75,13 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd +if "%ERRORLEVEL%"=="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! -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% +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt b/src/main/kotlin/net/moonleay/lilJudd/Bot.kt new file mode 100644 index 0000000..e0c4a41 --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/Bot.kt @@ -0,0 +1,143 @@ +/* + * 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 + +import com.kotlindiscord.kord.extensions.ExtensibleBot +import dev.kord.common.Color +import dev.kord.common.entity.PresenceStatus +import dev.kord.core.behavior.interaction.response.respond +import dev.kord.core.event.interaction.ButtonInteractionCreateEvent +import dev.kord.core.on +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import net.moonleay.botendo.build.BuildConstants +import net.moonleay.lilJudd.buttons.component.EditButtonManager +import net.moonleay.lilJudd.data.CredentialManager +import net.moonleay.lilJudd.data.DB +import net.moonleay.lilJudd.extensions.FeatureManageExtension +import net.moonleay.lilJudd.extensions.SendPlannerExtension +import net.moonleay.lilJudd.extensions.VersionExtension +import net.moonleay.lilJudd.features.TimeManager +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 + suspend fun start() { + Logger.out("Starting Bot...") + + // Load config + CredentialManager.load() + + // Don't run the bot when there is no bot token in config + if (CredentialManager.token == "empty") { + Logger.out("The config does not contain a bot token.") + exitProcess(3) + } + + // Check if the credentials for the Database are existent, don't run if they are missing + if (CredentialManager.dbDomain == "empty" || CredentialManager.dbName == "empty" || CredentialManager.dbUser == "empty" || CredentialManager.dbPassword == "empty") { + Logger.out("The config does not contain the whole Database credentials.") + exitProcess(3) + } + + // Connect to the database + DB.connect( + CredentialManager.dbDomain, + CredentialManager.dbName, + CredentialManager.dbUser, + CredentialManager.dbPassword + ) + + // Register the TimePlanner thread + val coroutineJob = GlobalScope.launch { + TimeManager.registerThread() + //PlanningNotifier.registerThread() + } + + // Add a shutdown hook to cancel the coroutine when the application is terminated + Runtime.getRuntime().addShutdownHook(Thread { + coroutineJob.cancel() + }) + + + // Add bot token to kord + bot = ExtensibleBot(CredentialManager.token) { + applicationCommands { + enabled = true + } + + extensions { + add(::VersionExtension) + add(::FeatureManageExtension) + add(::SendPlannerExtension) + //add(::TestExtension) // See comment in TestExtension.kt + } + + this.presence { + this.status = PresenceStatus.DoNotDisturb + this.playing("v." + BuildConstants.version) + } + + // Sharding will be added if the load of the bot cannot be handled by one instance + /* + sharding { recommended -> + Shards(recommended) + } */ + } + + // Register button presses + bot.kordRef.on { + val inter = this.interaction + val u = inter.user + Logger.out("Button interaction: ${inter.componentId} from ${u.asUser().username}#${u.asUser().discriminator}") + if (inter.componentId.startsWith("public.edit.")) { + val response = inter.deferPublicMessageUpdate() + val g = this.interaction.getOriginalInteractionResponse().getGuild() + for (b in EditButtonManager.buttons) { + if (b.id != inter.componentId) + continue + b.onInteraction(inter, response, g, u) + return@on + } + return@on + } + if (inter.componentId.startsWith("public.message.")) { + val response = inter.deferPublicResponse() + val g = this.interaction.getOriginalInteractionResponse().getGuild() + response.respond { + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Error", + "Could not find button with id \"${inter.componentId}\".\nPlease report this.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + } + } + + + //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 69% rename from src/main/kotlin/net/moonleay/liljudd/Main.kt rename to src/main/kotlin/net/moonleay/lilJudd/Main.kt index a1196f8..9d00d29 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) 2024 moonleay + * 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 @@ -15,11 +15,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package net.moonleay.liljudd - -import net.moonleay.liljudd.build.BuildConstants -import net.moonleay.liljudd.util.Logger +package net.moonleay.lilJudd +import net.moonleay.botendo.build.BuildConstants suspend fun main() { println( @@ -28,11 +26,9 @@ suspend fun main() { "| |_| |__| |_ _ _| |_| |\n" + "| | | | | | | | . | . |\n" + "|_|_|_|_____|___|___|___|\n" + - "v.${BuildConstants.version}\n" + " " ) - - 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") + println("v.${BuildConstants.version}") Bot.start() } diff --git a/src/main/kotlin/net/moonleay/liljudd/buttons/component/IEditButton.kt b/src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButton.kt similarity index 87% rename from src/main/kotlin/net/moonleay/liljudd/buttons/component/IEditButton.kt rename to src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButton.kt index d973ceb..45b2611 100644 --- a/src/main/kotlin/net/moonleay/liljudd/buttons/component/IEditButton.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButton.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,17 +16,16 @@ * 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 import dev.kord.core.entity.User import dev.kord.core.entity.interaction.ButtonInteraction -interface IEditButton { +open class EditButton(val id: String) { - val id: String - suspend fun onInteraction( + open suspend fun onInteraction( interaction: ButtonInteraction, response: PublicMessageInteractionResponseBehavior, guild: Guild, diff --git a/src/main/kotlin/net/moonleay/liljudd/data/database/tables/PlanningNotifierRoles.kt b/src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButtonManager.kt similarity index 59% rename from src/main/kotlin/net/moonleay/liljudd/data/database/tables/PlanningNotifierRoles.kt rename to src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButtonManager.kt index 0e44813..7f253f7 100644 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/tables/PlanningNotifierRoles.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/buttons/component/EditButtonManager.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,14 +16,16 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.data.database.tables +package net.moonleay.lilJudd.buttons.component -import org.jetbrains.exposed.sql.Table +import net.moonleay.lilJudd.buttons.timeplanner.IsAvailableEditButton +import net.moonleay.lilJudd.buttons.timeplanner.MaybeAvailableEditButton +import net.moonleay.lilJudd.buttons.timeplanner.NotAvailableEditButton -object PlanningNotifierRoles : Table(name = "new_planningnotifier_roles") { - var id = integer("id").autoIncrement() - var serverid = long("serverid") - var channelid = long("channelid") - var hastimeroleid = long("hastimeroleid") - var wantstobenotifiedid = long("wantstobenotifiedid") +object EditButtonManager { + val buttons = listOf( + IsAvailableEditButton(), + MaybeAvailableEditButton(), + NotAvailableEditButton() + ) } 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 74% 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 b4cdfef..aa9f5d6 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) 2024 moonleay + * 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 @@ -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,15 +24,12 @@ 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.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" +import dev.kord.rest.builder.message.modify.embed +import net.moonleay.lilJudd.Bot +import net.moonleay.lilJudd.buttons.component.EditButton +import net.moonleay.lilJudd.util.ButtonUtil +class IsAvailableEditButton : EditButton("public.edit.btn.timemanagement.available") { override suspend fun onInteraction( interaction: ButtonInteraction, response: PublicMessageInteractionResponseBehavior, @@ -43,7 +40,7 @@ class IsAvailableEditButton : IEditButton { if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) { Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed { - val temp = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 1) + val temp = ButtonUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 1) this.color = temp.color this.title = temp.title this.description = temp.description @@ -54,7 +51,7 @@ class IsAvailableEditButton : IEditButton { } else { Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed { - val temp = EmbedUtil.addXToValuesAtTable(user.id.value.toString(), m.embeds[0], 1) + val temp = ButtonUtil.addXToValuesAtTable(user.id.value.toString(), m.embeds[0], 1) this.color = temp.color this.title = temp.title this.description = temp.description @@ -63,6 +60,5 @@ class IsAvailableEditButton : IEditButton { } } } - AvailabilityManager.updateInChannel(interaction.channelId) } } 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 74% 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 23b9c61..8c4c8ca 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) 2024 moonleay + * 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 @@ -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,15 +24,12 @@ 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.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" +import dev.kord.rest.builder.message.modify.embed +import net.moonleay.lilJudd.Bot +import net.moonleay.lilJudd.buttons.component.EditButton +import net.moonleay.lilJudd.util.ButtonUtil +class MaybeAvailableEditButton : EditButton("public.edit.btn.timemanagement.maybeavailable") { override suspend fun onInteraction( interaction: ButtonInteraction, response: PublicMessageInteractionResponseBehavior, @@ -43,7 +40,7 @@ class MaybeAvailableEditButton : IEditButton { if (m.embeds[0].fields[1].value.contains(user.id.value.toString())) { Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed { - val temp = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 2) + val temp = ButtonUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 2) this.color = temp.color this.title = temp.title this.description = temp.description @@ -54,7 +51,7 @@ class MaybeAvailableEditButton : IEditButton { } else { Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed { - val temp = EmbedUtil.addXToValuesAtTable(user.id.value.toString(), m.embeds[0], 2) + val temp = ButtonUtil.addXToValuesAtTable(user.id.value.toString(), m.embeds[0], 2) this.color = temp.color this.title = temp.title this.description = temp.description @@ -63,6 +60,5 @@ class MaybeAvailableEditButton : IEditButton { } } } - AvailabilityManager.updateInChannel(interaction.channelId) } } 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 74% 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 0fd5390..dddb720 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) 2024 moonleay + * 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 @@ -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,14 +24,12 @@ 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.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.modify.embed +import net.moonleay.lilJudd.Bot +import net.moonleay.lilJudd.buttons.component.EditButton +import net.moonleay.lilJudd.util.ButtonUtil -class NotAvailableEditButton : IEditButton { - override val id: String = "public.edit.btn.timemanagement.notavailable" +class NotAvailableEditButton : EditButton("public.edit.btn.timemanagement.notavailable") { override suspend fun onInteraction( interaction: ButtonInteraction, @@ -43,7 +41,7 @@ class NotAvailableEditButton : IEditButton { if (m.embeds[0].fields[2].value.contains(user.id.value.toString())) { Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed { - val temp = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 3) + val temp = ButtonUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 3) this.color = temp.color this.title = temp.title this.description = temp.description @@ -54,7 +52,7 @@ class NotAvailableEditButton : IEditButton { } else { Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed { - val temp = EmbedUtil.addXToValuesAtTable(user.id.value.toString(), m.embeds[0], 3) + val temp = ButtonUtil.addXToValuesAtTable(user.id.value.toString(), m.embeds[0], 3) this.color = temp.color this.title = temp.title this.description = temp.description @@ -63,6 +61,5 @@ class NotAvailableEditButton : IEditButton { } } } - AvailabilityManager.updateInChannel(interaction.channelId) } } 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 7a92197..0320d82 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) 2024 moonleay + * 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 @@ -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,8 +29,6 @@ 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() { @@ -53,8 +51,6 @@ 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() @@ -87,8 +83,6 @@ 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/features/component/FeatureManager.kt b/src/main/kotlin/net/moonleay/lilJudd/data/DB.kt similarity index 59% rename from src/main/kotlin/net/moonleay/liljudd/features/component/FeatureManager.kt rename to src/main/kotlin/net/moonleay/lilJudd/data/DB.kt index a9212b4..b1ff4b7 100644 --- a/src/main/kotlin/net/moonleay/liljudd/features/component/FeatureManager.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/DB.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,15 +16,19 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.features.component +package net.moonleay.lilJudd.data -import net.moonleay.liljudd.features.AvailabilityManager -import net.moonleay.liljudd.features.TimeManager -object FeatureManager { - val features = mutableListOf(AvailabilityManager, TimeManager) // Stores all features +import org.jetbrains.exposed.sql.Database - fun getFeature(feat: FeatureEnum): IFeature? { - return features.find { it.feat == feat } +object DB { + //Connect to the provided DB; trows errors, if the DB is not avalible. + fun connect(dbDomain: String, dbName: String, dbUser: String, dbPasswd: String) { + Database.connect( + "jdbc:postgresql://$dbDomain/$dbName", + driver = "org.postgresql.Driver", + user = dbUser, + password = dbPasswd + ) } } diff --git a/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningChannelsData.kt b/src/main/kotlin/net/moonleay/lilJudd/data/entry/PlanningNotifierRolesData.kt similarity index 74% rename from src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningChannelsData.kt rename to src/main/kotlin/net/moonleay/lilJudd/data/entry/PlanningNotifierRolesData.kt index 0f93b9e..0798ccc 100644 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningChannelsData.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/entry/PlanningNotifierRolesData.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,10 +16,11 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.data.database.entry +package net.moonleay.lilJudd.data.entry -data class TimePlanningChannelsData( - val id: Int, - val serverID: Long, - val channelID: Long, +data class PlanningNotifierRolesData( + val serverID: String, + val channelId: String, + val hastimeroleid: String, + val wantstobenotifid: String ) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningChannels.kt b/src/main/kotlin/net/moonleay/lilJudd/data/tables/PlanningNotifierRoles.kt similarity index 64% rename from src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningChannels.kt rename to src/main/kotlin/net/moonleay/lilJudd/data/tables/PlanningNotifierRoles.kt index 7b81b0b..65e8b0e 100644 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningChannels.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/tables/PlanningNotifierRoles.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.data.database.tables +package net.moonleay.lilJudd.data.tables -import org.jetbrains.exposed.sql.Table +import org.jetbrains.exposed.dao.id.IntIdTable - -object TimePlanningChannels : Table(name = "new_timeplanning_channels") { - var id = integer("id").autoIncrement() - var serverid = long("serverid") - val channelid = long("channelid") +object PlanningNotifierRoles : IntIdTable() { + var serverid = varchar("serverid", 50) + var channelid = varchar("channelid", 50) + var hastimeroleid = varchar("hastimeroleid", 50) + var wantstobenotifid = varchar("wantstobenotifid", 50) } diff --git a/src/main/kotlin/net/moonleay/liljudd/util/EmbedColor.kt b/src/main/kotlin/net/moonleay/lilJudd/data/tables/TimePlanningChannels.kt similarity index 72% rename from src/main/kotlin/net/moonleay/liljudd/util/EmbedColor.kt rename to src/main/kotlin/net/moonleay/lilJudd/data/tables/TimePlanningChannels.kt index 7d9def4..a746aa1 100644 --- a/src/main/kotlin/net/moonleay/liljudd/util/EmbedColor.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/tables/TimePlanningChannels.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,13 +16,11 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.util +package net.moonleay.lilJudd.data.tables -import dev.kord.common.Color +import org.jetbrains.exposed.dao.id.IntIdTable -enum class EmbedColor(val color: Color) { - ERROR(Color(0xE0311A)), - WARNING(Color(0xFFA500)), - SUCCESS(Color(0x52E01A)), - INFO(Color(0x4C4645)), +object TimePlanningChannels : IntIdTable() { + var serverid = varchar("serverid", 50) + val channelid = varchar("channelid", 50) } diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/FeatureManageExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/FeatureManageExtension.kt new file mode 100644 index 0000000..712eb8b --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/FeatureManageExtension.kt @@ -0,0 +1,295 @@ +/* + * 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.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.Color +import dev.kord.common.entity.Permission +import net.moonleay.lilJudd.data.tables.TimePlanningChannels +import net.moonleay.lilJudd.extensions.component.EnableOrDisable +import net.moonleay.lilJudd.extensions.component.FeatureEnum +import net.moonleay.lilJudd.util.Logger +import net.moonleay.lilJudd.util.MessageUtil +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.select +import org.jetbrains.exposed.sql.transactions.transaction + +class FeatureManageExtension : Extension() { + + override val name = "feature" + override val allowApplicationCommandInDMs: Boolean + get() = false + + /* + * Note: This has to be rewritten at some point to better support more features + * and improve this mess of a class. + * */ + override suspend fun setup() { + publicSlashCommand(::FeatureManagerArgs) { + name = "feature" + description = "Manage features" + + this.action { + val u = this.user + if (!u.asMember(this.guild!!.id).hasPermission(Permission.Administrator)) { + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "403: Forbidden", + "You cannot edit features, as you don't have the Administrator permission.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + return@action + } + val gID = this.guild!!.id.toString() + val cID = this.arguments.channel.id.toString() + val channel = this.arguments.channel + val args = this.arguments + Logger.out("${args.feature.readableName} ${args.setStatus.readableName} ${channel.data.name.value}") + if (this.arguments.setStatus == EnableOrDisable.ENABLE) { + when (this.arguments.feature) { + FeatureEnum.TIMEPLANNINGFEATURE -> { + var alreadyExists = false + transaction { + alreadyExists = TimePlanningChannels.select { + (TimePlanningChannels.channelid eq gID) and + (TimePlanningChannels.channelid eq cID) + }.count() > 0 + } + if (!alreadyExists) { + transaction { + TimePlanningChannels.insert { + it[TimePlanningChannels.serverid] = gID + it[TimePlanningChannels.channelid] = cID + } get TimePlanningChannels.id + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0x52E01A), + "200: Success", + "The feature was enabled in channel ${args.channel.data.name.value}", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + return@action + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "403: Forbidden", + "The feature is already enabled in this channel.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + } + + + /* + FeatureEnum.PLANNINGNOTIFIER -> { + var alreadyExists = false + transaction { + alreadyExists = PlanningNotifierRoles.select { + (PlanningNotifierRoles.serverid eq gID) and (PlanningNotifierRoles.channelid eq cID) + }.count() > 0 + } + if (!alreadyExists) { + + val hasTimeRole = this.guild!!.createRole { + this.name = "available [${channel.data.name.value}]" + this.mentionable = true + } + val htr = hasTimeRole.id.toString() + + val wantsNotifsRole = this.guild!!.createRole { + this.name = "notifications [${channel.data.name.value}]" + this.mentionable = true + } + val wnr = wantsNotifsRole.id.toString() + + transaction { + PlanningNotifierRoles.insert { + it[PlanningNotifierRoles.serverid] = gID + it[PlanningNotifierRoles.channelid] = cID + it[PlanningNotifierRoles.hastimeroleid] = htr + it[PlanningNotifierRoles.wantstobenotifid] = wnr + } get PlanningNotifierRoles.id + } + + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0x52E01A), + "200: Success", + "The feature was enabled in channel ${args.channel.data.name.value} with roles ${hasTimeRole.mention} & ${wantsNotifsRole.mention}.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + return@action + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "403: Forbidden", + "The feature is already enabled in this channel.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + } */ + } + return@action + } + //Disable + when (this.arguments.feature) { + FeatureEnum.TIMEPLANNINGFEATURE -> { + var alreadyExists = false + transaction { + alreadyExists = TimePlanningChannels.select { + (TimePlanningChannels.serverid eq gID) and + (TimePlanningChannels.channelid eq cID) + }.count() > 0 + } + if (alreadyExists) { + transaction { + val matchingEntries = TimePlanningChannels.select { + (TimePlanningChannels.serverid eq gID) and + (TimePlanningChannels.channelid eq cID) + }.toList() + + matchingEntries.forEach { entry -> + TimePlanningChannels.deleteWhere { id eq entry[id] } + } + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0x52E019), + "200: Success", + "The feature was disabled.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + return@action + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "403: Forbidden", + "The feature is already disabled in this channel.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + } + + /* + FeatureEnum.PLANNINGNOTIFIER -> { + var alreadyExists = false + transaction { + alreadyExists = PlanningNotifierRoles.select { + (PlanningNotifierRoles.serverid eq gID) and (PlanningNotifierRoles.channelid eq cID) + }.count() > 0 + } + if (alreadyExists) { + var matchingEntries: List = mutableListOf() + transaction { + matchingEntries = PlanningNotifierRoles.select { + (PlanningNotifierRoles.serverid eq gID) and + (PlanningNotifierRoles.channelid eq cID) + }.toList() + } + for (e in matchingEntries) { + this.guild!!.getRoleOrNull(Snowflake(e[PlanningNotifierRoles.hastimeroleid]))?.delete() + this.guild!!.getRoleOrNull(Snowflake(e[PlanningNotifierRoles.wantstobenotifid])) + ?.delete() + } + + transaction { + matchingEntries.forEach { entry -> + PlanningNotifierRoles.deleteWhere { id eq entry[id] } + } + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0x52E019), + "200: Success", + "The feature was disabled.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + return@action + } + this.respond { + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "403: Forbidden", + "The feature is already disabled in this channel.", + u.asUser().username + "#" + u.asUser().discriminator + ) + ) + } + } */ + } + } + } + } + + inner class FeatureManagerArgs : Arguments() { + + val feature by enumChoice { + this.name = "feature" + this.description = "The targeted feature" + this.typeName = "en_US" + } + + val setStatus by enumChoice { + this.name = "set" + this.description = "Set enabled or disabled" + this.typeName = "en_US" + } + + val channel by channel { + this.name = "channel" + this.description = "Target Channel" + } + } +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/SendPlannerExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/SendPlannerExtension.kt new file mode 100644 index 0000000..2482bbf --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/SendPlannerExtension.kt @@ -0,0 +1,110 @@ +/* + * 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.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.Color +import dev.kord.common.entity.Permission +import dev.kord.core.behavior.channel.createMessage +import dev.kord.rest.builder.message.create.actionRow +import kotlinx.coroutines.delay +import kotlinx.datetime.DayOfWeek +import net.moonleay.lilJudd.util.ButtonUtil +import net.moonleay.lilJudd.util.Logger +import net.moonleay.lilJudd.util.MessageUtil +import java.time.ZoneId +import java.time.ZonedDateTime + +/* This extension has no proper use. + It is used in testing to test stuff, without having to wait for certain events to trigger. */ +class SendPlannerExtension : Extension() { + override val name = "sendplanner" + override val allowApplicationCommandInDMs: Boolean + get() = false + + override suspend fun setup() { + publicSlashCommand() { + name = "sendplanner" + description = "Send the planner for the current and x next weeks" + this.action { + if (!this.member!!.asMember(this.guild!!.id) + .hasPermission(Permission.Administrator) + ) { + val res = this.respond { + this.content = "no." + } + res.delete() + return@action + } + val res = this.respond { + this.content = "OK." + } + res.delete() + val c = this.getChannel().asChannel() + var then = + ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withDayOfMonth(getMondayDayOfMonth()).withHour(4) + .withMinute(0).withSecond(0) + c.createMessage { + this.embeds.add( + MessageUtil.getEmbed( + Color(0X4C4645), + "Time Planning Feature", + "Do you have time on the following Days?", + "Automated Message" + ) + ) + } + delay(1000) + repeat(7) { + c.createMessage { + this.embeds.add( + MessageUtil.getEmbedWithTable( + Color(0X4C4645), + "", + "${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() + ) + ) + ) + + this.actionRow { + this.components.addAll(ButtonUtil.getTimePlannerButtons().components) + } + } + then = then.plusDays(1).withHour(4).withMinute(0).withSecond(0) + Logger.out("Finished sending day $it") + delay(1000) + } + Logger.out("Finished with ${c.data.guildId.value}") + } + } + } + + fun getMondayDayOfMonth(): Int { + val now = ZonedDateTime.now() + val monday = now.with(DayOfWeek.MONDAY) + return monday.dayOfMonth + } +} diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/TestExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/TestExtension.kt new file mode 100644 index 0000000..049b2e5 --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/TestExtension.kt @@ -0,0 +1,62 @@ +/* + * 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.extensions + +import com.kotlindiscord.kord.extensions.extensions.Extension +import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond +import dev.kord.common.Color +import dev.kord.rest.builder.message.create.actionRow +import net.moonleay.lilJudd.util.ButtonUtil +import net.moonleay.lilJudd.util.MessageUtil + +/* This extension has no proper use. + It is used in testing to test stuff, without having to wait for certain events to trigger. */ +class TestExtension : Extension() { + override val name = "test" + override val allowApplicationCommandInDMs: Boolean + get() = false + + override suspend fun setup() { + publicSlashCommand { + name = "test" + description = "Test game" + this.action { + this.respond { + this.embeds.add( + MessageUtil.getEmbedWithTable( + Color(0X4C4645), + "", + "MONDAY, 22.05.2023", + mapOf( + "Is available" to listOf(), + "May be available" to listOf(), + "Is not available" to listOf() + ) + ) + ) + + this.actionRow { + this.components.addAll(ButtonUtil.getTimePlannerButtons().components) + } + } + } + } + } +} diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/InfoExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/VersionExtension.kt similarity index 50% rename from src/main/kotlin/net/moonleay/liljudd/extensions/InfoExtension.kt rename to src/main/kotlin/net/moonleay/lilJudd/extensions/VersionExtension.kt index b47af0b..c116c02 100644 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/InfoExtension.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/VersionExtension.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,32 +16,30 @@ * 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 dev.kord.rest.builder.message.embed -import net.moonleay.liljudd.build.BuildConstants -import net.moonleay.liljudd.util.EmbedColor +import dev.kord.common.Color +import net.moonleay.botendo.build.BuildConstants +import net.moonleay.lilJudd.util.MessageUtil -class InfoExtension : Extension() { - override val name = "info" +class VersionExtension : Extension() { + override val name = "version" override suspend fun setup() { publicSlashCommand { - name = "info" + name = "version" description = "Show infos about the bot" this.action { - 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" - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0x52E01A), + "Lil' Judd", + "Lil' Judd ***v." + BuildConstants.version + "***\n" + + "Kord-Extensions ***v." + BuildConstants.kordVersion + "***\n" + + "Coroutines ***v." + BuildConstants.coroutinesVersion + "***\n" + + "Krontab ***v." + BuildConstants.krontabVersion + "***" + ) } } } 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 4cd9a92..6d5e614 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) 2024 moonleay + * 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 @@ -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/features/component/FeatureEnum.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/component/FeatureEnum.kt similarity index 87% rename from src/main/kotlin/net/moonleay/liljudd/features/component/FeatureEnum.kt rename to src/main/kotlin/net/moonleay/lilJudd/extensions/component/FeatureEnum.kt index b06fc3b..3c590fc 100644 --- a/src/main/kotlin/net/moonleay/liljudd/features/component/FeatureEnum.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/component/FeatureEnum.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.features.component +package net.moonleay.lilJudd.extensions.component import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum enum class FeatureEnum(override val readableName: String) : ChoiceEnum { TIMEPLANNINGFEATURE("Time Planning Feature"), - PLANNINGROLES("Planning Roles") + //PLANNINGNOTIFIER("Planning Notifier") } diff --git a/src/main/kotlin/net/moonleay/liljudd/data/StacktraceSaver.kt b/src/main/kotlin/net/moonleay/lilJudd/features/PlanningNotifier.kt similarity index 56% rename from src/main/kotlin/net/moonleay/liljudd/data/StacktraceSaver.kt rename to src/main/kotlin/net/moonleay/lilJudd/features/PlanningNotifier.kt index 84828c2..fd9329c 100644 --- a/src/main/kotlin/net/moonleay/liljudd/data/StacktraceSaver.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/features/PlanningNotifier.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,22 +16,21 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.data +package net.moonleay.lilJudd.features -import java.io.File +import dev.inmo.krontab.buildSchedule +import dev.inmo.krontab.doInfinity +import net.moonleay.lilJudd.util.Logger -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()) +object PlanningNotifier { + suspend fun registerThread() { + Logger.out("Adding ping scheduler...") + val scheduler = buildSchedule("0 0 4 * * * 0o 1w") // 0 0 4 * * * 0o 1w // 0o is UTC + scheduler.doInfinity { + Logger.out("Starting to update roles...") + + Logger.out("Done! Until tomorrow! <3 ") } - } - private fun createFolder() { - val dir = File("data", "stacktraces") - if (!dir.exists()) - dir.mkdir() } } diff --git a/src/main/kotlin/net/moonleay/lilJudd/features/TimeManager.kt b/src/main/kotlin/net/moonleay/lilJudd/features/TimeManager.kt new file mode 100644 index 0000000..91fcd80 --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/features/TimeManager.kt @@ -0,0 +1,131 @@ +/* + * 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.features + +import dev.inmo.krontab.buildSchedule +import dev.inmo.krontab.doInfinity +import dev.kord.common.Color +import dev.kord.common.entity.Snowflake +import dev.kord.core.behavior.channel.createMessage +import dev.kord.core.entity.channel.MessageChannel +import dev.kord.rest.builder.message.create.actionRow +import kotlinx.coroutines.delay +import net.moonleay.lilJudd.Bot +import net.moonleay.lilJudd.data.entry.PlanningNotifierRolesData +import net.moonleay.lilJudd.data.tables.PlanningNotifierRoles +import net.moonleay.lilJudd.data.tables.TimePlanningChannels +import net.moonleay.lilJudd.util.ButtonUtil +import net.moonleay.lilJudd.util.Logger +import net.moonleay.lilJudd.util.MessageUtil +import org.jetbrains.exposed.sql.selectAll +import org.jetbrains.exposed.sql.transactions.transaction +import java.time.ZoneId +import java.time.ZonedDateTime + + +object TimeManager { + /* /--------------- Seconds + | /------------- Minutes + | | /----------- Hours + | | | /--------- Days of months + | | | | /------- Months + | | | | | /----- (optional) Year + | | | | | | /--- (optional) Timezone offset + | | | | | | | / (optional) Week days + * * * * * * 0o *w*/ + + suspend fun registerThread() { + Logger.out("Adding message scheduler...") + val scheduler = buildSchedule("0 0 4 * * * 0o 1w") // 0 0 4 * * * 0o 1w // 0o is UTC + scheduler.doInfinity { + Logger.out("Starting to notify...") + + + // ChannelID, ServerID + val channelList = mutableMapOf() + // ChannelID, Data + val roleList = mutableMapOf() + + transaction { + for (tp in TimePlanningChannels.selectAll()) { + channelList[Snowflake(tp[TimePlanningChannels.channelid])] = + Snowflake(tp[TimePlanningChannels.serverid]) + Logger.out("Have to notify channel with ID ${tp[TimePlanningChannels.channelid]}.") + } + + for (pnr in PlanningNotifierRoles.selectAll()) { + roleList[Snowflake(pnr[PlanningNotifierRoles.channelid])] = PlanningNotifierRolesData( + pnr[PlanningNotifierRoles.serverid], + pnr[PlanningNotifierRoles.channelid], + pnr[PlanningNotifierRoles.hastimeroleid], + pnr[PlanningNotifierRoles.wantstobenotifid] + ) + Logger.out("Have to ping roles: ${pnr[PlanningNotifierRoles.wantstobenotifid]}}") + } + } + Logger.out("${channelList.count()} Channels to notify with ${roleList.count()} Roles to ping!") + for (ch in channelList.keys) { + if (Bot.bot.kordRef.getChannel(ch) == null) + continue // TODO: Check if the channel is valid in another shard + val c = Bot.bot.kordRef.getChannelOf(ch)!! + c.createMessage { + if (roleList[ch] != null) { + this.content = "<@&${Snowflake(roleList[ch]?.wantstobenotifid!!)}>" + } + this.embeds.add( + MessageUtil.getEmbed( + Color(0X4C4645), + "Time Planning Feature", + "Do you have time on the following Days?", + "Automated Message" + ) + ) + } + delay(2000) + var then = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withHour(4).withMinute(0).withSecond(0) + repeat(7) { + c.createMessage { + this.embeds.add( + MessageUtil.getEmbedWithTable( + Color(0X4C4645), + "", + "${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() + ) + ) + ) + + this.actionRow { + this.components.addAll(ButtonUtil.getTimePlannerButtons().components) + } + } + then = then.plusDays(1).withHour(4).withMinute(0).withSecond(0) + Logger.out("Finished sending day $it") + + delay(1000) + } + Logger.out("Finished with ${c.data.guildId.value}") + } + Logger.out("Done! Until next Monday! <3 ") + } + } +} diff --git a/src/main/kotlin/net/moonleay/liljudd/util/EmbedUtil.kt b/src/main/kotlin/net/moonleay/lilJudd/util/ButtonUtil.kt similarity index 56% rename from src/main/kotlin/net/moonleay/liljudd/util/EmbedUtil.kt rename to src/main/kotlin/net/moonleay/lilJudd/util/ButtonUtil.kt index f109ed3..a172965 100644 --- a/src/main/kotlin/net/moonleay/liljudd/util/EmbedUtil.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/util/ButtonUtil.kt @@ -1,6 +1,6 @@ /* * lilJudd - * Copyright (C) 2024 moonleay + * 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 @@ -16,21 +16,21 @@ * 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 import dev.kord.rest.builder.component.ActionRowBuilder import dev.kord.rest.builder.message.EmbedBuilder -object EmbedUtil { +object ButtonUtil { fun getTimePlannerButtons(): ActionRowBuilder { val ar = ActionRowBuilder() ar.interactionButton(ButtonStyle.Success, "public.edit.btn.timemanagement.available") { this.label = "Available" } ar.interactionButton(ButtonStyle.Primary, "public.edit.btn.timemanagement.maybeavailable") { - this.label = "May be available" + this.label = "Maybe available" } ar.interactionButton(ButtonStyle.Danger, "public.edit.btn.timemanagement.notavailable") { this.label = "Not available" @@ -38,29 +38,9 @@ object EmbedUtil { return ar } - fun getMatchButtons(): ActionRowBuilder { - val ar = ActionRowBuilder() - ar.interactionButton(ButtonStyle.Success, "public.edit.btn.matchmanagement.accept") { - this.label = "I'm in!" - } - ar.interactionButton(ButtonStyle.Danger, "public.edit.btn.matchmanagement.decline") { - this.label = "I'm out!" - } - /* - ar.interactionButton(ButtonStyle.Secondary, "public.edit.btn.matchmanagement.cancel") { - this.label = "Cancel this match..." - } */ - return ar - } - fun replaceXWithYinValuesAtTable(x: String, y: String, e: Embed, table: Int): EmbedBuilder { - return replaceXWithYinValuesAtTable(x, y, MessageUtil.getAClonedEmbed(e), table) - } - - fun replaceXWithYinValuesAtTable(x: String, y: String, ebb: EmbedBuilder, table: Int): EmbedBuilder { - val ebbb = MessageUtil.getAClonedEmbed(ebb) - ebbb.fields = mutableListOf() - for ((i, f) in ebb.fields.withIndex()) { + val ebb = MessageUtil.getAClonedEmbedd(e) + for ((i, f) in e.fields.withIndex()) { val fb = EmbedBuilder.Field() fb.name = f.name if (i == table - 1) { @@ -75,34 +55,14 @@ object EmbedUtil { } else fb.value = f.value fb.inline = true - ebbb.fields.add(fb) + ebb.fields.add(fb) } - return ebbb - } - - fun getAllUsersInTheFirstXTables(amountOfTables: Int, e: Embed): List { - val users = mutableListOf() - for (i in 0 until amountOfTables) { - val f = e.fields[i] - if (!f.value.contains("@")) - continue // check next one. this one does not have any entries - val v = f.value.split("\n").toMutableList() - for (l in v) { - Logger.out(l) - users.add(l.subSequence(2, l.indexOf(">")).toString()) - } - } - return users + return ebb } fun addXToValuesAtTable(x: String, e: Embed, table: Int): EmbedBuilder { - return addXToValuesAtTable(x, MessageUtil.getAClonedEmbed(e), table) - } - - fun addXToValuesAtTable(x: String, ebb: EmbedBuilder, table: Int): EmbedBuilder { - val ebbb = MessageUtil.getAClonedEmbed(ebb) - ebbb.fields = mutableListOf() - ebb.fields.forEachIndexed { i, f -> + val ebb = MessageUtil.getAClonedEmbedd(e) + for ((i, f) in e.fields.withIndex()) { val fb = EmbedBuilder.Field() fb.name = f.name if (i == table - 1) @@ -119,9 +79,9 @@ object EmbedUtil { } fb.inline = true - ebbb.fields.add(fb) + ebb.fields.add(fb) } - return ebbb + return ebb } } 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 25a5804..446609c 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) 2024 moonleay + * 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 @@ -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 53% rename from src/main/kotlin/net/moonleay/liljudd/util/MessageUtil.kt rename to src/main/kotlin/net/moonleay/lilJudd/util/MessageUtil.kt index f531dd0..bc1d660 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) 2024 moonleay + * 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 @@ -16,9 +16,13 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.util +package net.moonleay.lilJudd.util -import dev.kord.core.behavior.UserBehavior +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.common.Color import dev.kord.core.entity.Embed import dev.kord.rest.builder.message.EmbedBuilder import java.time.LocalDateTime @@ -27,62 +31,58 @@ import java.time.format.DateTimeFormatter object MessageUtil { private val dtf: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy @ HH:mm:ss") - suspend fun getFooter(u: UserBehavior? = null): String { - val now: LocalDateTime = LocalDateTime.now() - return ">" + dtf.format(now) + " - ${u?.asUser()?.username ?: "Automated Message"}" + ///Send an embedded message as a reply + suspend fun sendEmbedForPublicSlashCommand( + ctx: PublicSlashCommandContext, + color: Color, + title: String, + description: String + ) { + ctx.respond { + embeds.add( + getEmbed( + color, + title, + description, + ctx.user.asUser().username + "#" + ctx.user.asUser().discriminator + ) + ) + } } - ///Get a cloned embedded message - fun getAClonedEmbed(e: Embed): EmbedBuilder { + ///Send an embedded message with an image as a reply + suspend fun sendEmbedForPublicSlashCommandWithImage( + ctx: PublicSlashCommandContext, + color: Color, + title: String, + description: String, + thumbnailUrl: String + ) { + ctx.respond { + embeds.add( + getEmbedWithImage( + color, + title, + description, + ctx.user.asUser().username + "#" + ctx.user.asUser().discriminator, + thumbnailUrl + ) + ) + } + } + + ///Get a cloned embedded message, missing only the fields + fun getAClonedEmbedd(e: Embed): EmbedBuilder { 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 - fb.value = it.value - 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 - } - - fun getAClonedEmbed(e: EmbedBuilder): EmbedBuilder { - 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 - fb.value = it.value - 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 } + ///Get an embedded msg with image, title and description fun getEmbedWithTable( - color: EmbedColor, + color: Color, title: String, description: String, values: Map>? @@ -102,22 +102,23 @@ object MessageUtil { return ebb } + ///Get an embedded msg with title and description fun getEmbedSmall( - color: EmbedColor, + color: Color, title: String, description: String ): EmbedBuilder { val ebb = EmbedBuilder() ebb.title = title ebb.description = description - ebb.color = color.color + ebb.color = color return ebb } ///Get an embedded msg with title, description and a src fun getEmbed( - color: EmbedColor, + color: Color, title: String, description: String, source: String @@ -129,4 +130,17 @@ object MessageUtil { return ebb } + ///Get an embedded msg with image, title, description and a src + fun getEmbedWithImage( + color: Color, + 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/TimeUtil.kt b/src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt similarity index 53% rename from src/main/kotlin/net/moonleay/liljudd/util/TimeUtil.kt rename to src/main/kotlin/net/moonleay/lilJudd/util/TimeUtil.kt index bddc8b1..1edfe17 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) 2024 moonleay + * 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 @@ -16,20 +16,15 @@ * 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 -import java.time.LocalDateTime -import java.time.ZoneId -import java.time.ZonedDateTime -import java.time.format.DateTimeFormatter import java.util.concurrent.TimeUnit object TimeUtil { - fun getTimeFormatedShortend(time2: Long, showS: Boolean): String { + fun getTimeFormatedShortend(time2: Long): String { var time = time2 val days: Long = TimeUnit.MILLISECONDS .toDays(time) @@ -52,7 +47,7 @@ object TimeUtil { if (minutes >= 1) { s += minutes.toString() + "m " } - if (seconds >= 1 && hours < 1 && showS) { + if (seconds >= 1 && hours < 1) { s += seconds.toString() + "s" } if (s.isEmpty() || s.isBlank()) { @@ -128,75 +123,7 @@ object TimeUtil { } } - - // Returns the day of the month of the monday of this week - fun getMondayDayOfMonth(): Int { - return ZonedDateTime.now().with(DayOfWeek.MONDAY).dayOfMonth - } - - // Returns the day of the week as an int. Monday = 0; Sunday = 6 - fun getDayOfMonthInt(dow: DayOfWeek): Int { - return dow.value - } - - // Returns the day of the month of the monday of the current week - fun getWeekStamp(): ZonedDateTime { - return ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withDayOfMonth(getMondayDayOfMonth()).withHour(4) - .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) - val zoneId = ZoneId.of("UTC+2") // TODO: Add the possibility to set your timezone - return ZonedDateTime.of(localDateTime, zoneId) - } - - fun getCronjobStringFromDate(zdt: ZonedDateTime): String { - // I'll have to add the possibility to set your timezone in the future - // Only subtracting 1 hour, because I want to run the job 1 hour later - val zdt_ = zdt.minusHours(1) - return "0 ${zdt_.minute} ${zdt_.hour} ${zdt_.dayOfMonth - 1} ${zdt_.month.value - 1} ${zdt_.year}"// 0o *w" - } - - fun deformatJSONTime(inp: String, zone: String): Long { - // 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 - 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) + fun getDelay(day: String): Int { + return DaysUntilMonday[day]!! } } diff --git a/src/main/kotlin/net/moonleay/liljudd/Bot.kt b/src/main/kotlin/net/moonleay/liljudd/Bot.kt deleted file mode 100644 index 2e5e5aa..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/Bot.kt +++ /dev/null @@ -1,232 +0,0 @@ -/* - * 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 - -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 -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.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 - - private val jobs = mutableListOf() - - @OptIn(PrivilegedIntent::class) - suspend fun start() { - Logger.out("Starting Bot...") - - // Load config - CredentialManager.load() - - // Don't run the bot when there is no bot token in config - if (CredentialManager.token == "empty") { - Logger.out("The config does not contain a bot token.") - exitProcess(3) - } - - // Check if the credentials for the Database are existent, don't run if they are missing - if (CredentialManager.dbDomain == "empty" || CredentialManager.dbName == "empty" || CredentialManager.dbUser == "empty" || CredentialManager.dbPassword == "empty") { - Logger.out("The config does not contain the whole Database credentials.") - 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, - CredentialManager.dbName, - CredentialManager.dbUser, - CredentialManager.dbPassword - ) - - // Make sure the database is up-to-date - DB.register() - - // Register all the jobs - jobs.addAll( - listOf( - TimeManager, - AvailabilityManager, - ).map { - CoroutineScope(Dispatchers.Default).launch { - it.registerThread() - } - } - ) - // Thanks silenium-dev <3 - - // Create the bot object - bot = ExtensibleBot(CredentialManager.token) { - applicationCommands { - enabled = true - } - - extensions { - add(::InfoExtension) - add(::FeatureManageExtension) - add(::SendPlannerExtension) - add(::MatchExtension) - add(::UpdateRolesExtension) - add(::RotationExtension) - } - - this.presence { - this.status = PresenceStatus.DoNotDisturb - this.playing("v." + BuildConstants.version) - } - - this.intents { - +Intent.GuildMembers - } - - 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 - bot.kordRef.on { - val inter = this.interaction - val u = inter.user - Logger.out("Button interaction: ${inter.componentId} from ${u.asUser().username}#${u.asUser().discriminator}") - if (inter.componentId.startsWith("public.edit.")) { - val response = inter.deferPublicMessageUpdate() - val g = this.interaction.getOriginalInteractionResponse().getGuild() - for (b in EditButtonManager.buttons) { - if (b.id != inter.componentId) - continue - b.onInteraction(inter, response, g, u) - return@on - } - return@on - } - if (inter.componentId.startsWith("public.message.")) { - val response = inter.deferPublicResponse() - response.respond { - this.embeds = mutableListOf( - MessageUtil.getEmbed( - EmbedColor.ERROR, - "404: Not Found", - "Could not find button with id \"${inter.componentId}\"." + - "\nPlease report this.", - u.asUser().username + "#" + u.asUser().discriminator - ) - ) - } - } - } - - 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) - } - - // Update the Splatoon 3 api data and make sure it stays up-to-date -// Splatoon3Api.updateSchedule() -// JobManager.addJob(Splatoon3ApiScheduleUpdateScheduler) - /* - Other caches will be added when implemented - its not used yet in order to reduce load on the api, - which i am using. - */ - // Had to disable bc of an error. - // Will fix when I have time - - //Start the bot - 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 deleted file mode 100644 index 384a09d..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/buttons/component/EditButtonManager.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.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 - -object EditButtonManager { - val buttons = listOf( - IsAvailableEditButton(), - MaybeAvailableEditButton(), - NotAvailableEditButton(), - AcceptEditButton(), - CancelEditButton(), - DeclineEditButton(), - ) -} diff --git a/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/AcceptEditButton.kt b/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/AcceptEditButton.kt deleted file mode 100644 index 7e7e382..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/AcceptEditButton.kt +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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.buttons.matchplanner - -import dev.kord.common.entity.Snowflake -import dev.kord.core.behavior.edit -import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior -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.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 { - override val id: String = "public.edit.btn.matchmanagement.accept" - - override suspend fun onInteraction( - interaction: ButtonInteraction, - response: PublicMessageInteractionResponseBehavior, - guild: Guild, - user: User - ) { - val m = interaction.message - val eb = MessageUtil.getAClonedEmbed(m.embeds[0]) - var shouldEditButton = false - val mpdd = MatchPlanningDataRepository.getFromMessageInChannelInServer( - m.id.value.toLong(), - interaction.channelId.value.toLong(), - guild.id.value.toLong() - ) - if (mpdd == null) { - Logger.out("mpdd is null") - return - } - val role = guild.getRoleOrNull(Snowflake(mpdd.roleID)) - if (role == null) { - Logger.out("role is null") - 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))) { - Logger.out("Removing role from ${member.username}") - member.removeRole(role.id) - } - // remove the user from the 1st list in the embed - Logger.out("Removing ${user.username} from the 1st list in the embed") - eb.fields = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", eb, 1).fields - shouldEditButton = true - } - if (m.embeds[0].fields[1].value.contains(user.id.value.toString())) { - Logger.out("Removing ${user.username} from the 2nd list in the embed") - eb.fields = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", eb, 2).fields - shouldEditButton = true - } - if (!m.embeds[0].fields[0].value.contains(user.id.value.toString())) { - if (!member.roleIds.contains(Snowflake(mpdd.roleID))) { - Logger.out("Adding role to ${member.username}") - member.addRole(role.id) - } - //Add the user to the list in the embed - Logger.out("Adding ${user.username} to the 1st list in the embed") - eb.fields = EmbedUtil.addXToValuesAtTable(user.id.value.toString(), eb, 1).fields - shouldEditButton = true - } - if (shouldEditButton) { - // update the message - Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { - 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 deleted file mode 100644 index 07e1016..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/CancelEditButton.kt +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.buttons.matchplanner - -import dev.kord.common.entity.Snowflake -import dev.kord.core.behavior.edit -import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior -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.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" - - override suspend fun onInteraction( - interaction: ButtonInteraction, - response: PublicMessageInteractionResponseBehavior, - guild: Guild, - user: User - ) { - val m = interaction.message - if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) { - val mpdd = MatchPlanningDataRepository.getFromMessageInChannelInServer( - m.id.value.toLong(), - interaction.channelId.value.toLong(), - guild.id.value.toLong() - ) - if (mpdd == null) { - Logger.out("mpdd is null") - return - } - val role = guild.getRoleOrNull(Snowflake(mpdd.roleID)) - if (role == null) { - Logger.out("role is null") - return - } - val member = interaction.user.asMember(guild.id) - if (member.roleIds.contains(Snowflake(mpdd.roleID))) { - member.removeRole(role.id) - } - Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { - this.embed(fun EmbedBuilder.() { - val temp = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 1) - 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 deleted file mode 100644 index 06f7e44..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/buttons/matchplanner/DeclineEditButton.kt +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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.buttons.matchplanner - -import dev.kord.common.entity.Snowflake -import dev.kord.core.behavior.edit -import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior -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.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" - - override suspend fun onInteraction( - interaction: ButtonInteraction, - response: PublicMessageInteractionResponseBehavior, - guild: Guild, - user: User - ) { - val m = interaction.message - val eb = MessageUtil.getAClonedEmbed(m.embeds[0]) - var shouldEditButton = false - val mpdd = MatchPlanningDataRepository.getFromMessageInChannelInServer( - m.id.value.toLong(), - interaction.channelId.value.toLong(), - guild.id.value.toLong() - ) - if (mpdd == null) { - Logger.out("mpdd is null") - return - } - val role = guild.getRoleOrNull(Snowflake(mpdd.roleID)) - if (role == null) { - Logger.out("role is null") - 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}") - member.removeRole(role.id) - } - // remove the user from the 1st list in the embed - Logger.out("Removing ${user.username} from the 1st list in the embed") - eb.fields = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", eb, 1).fields - shouldEditButton = true - } - if (!m.embeds[0].fields[1].value.contains(user.id.value.toString())) { - if (member.roleIds.contains(Snowflake(mpdd.roleID))) { - Logger.out("Removing role from ${member.username}") - member.removeRole(role.id) - } - // Add the user to the list in the embed - Logger.out("Adding ${user.username} to the 2nd list in the embed") - eb.fields = EmbedUtil.addXToValuesAtTable(user.id.value.toString(), eb, 2).fields - shouldEditButton = true - } - if (m.embeds[0].fields[1].value.contains(user.id.value.toString())) { - // Remove the user from all tables - Logger.out("Removing ${user.username} from the 2nd list in the embed") - eb.fields = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", eb, 2).fields - shouldEditButton = true - } - if (shouldEditButton) { - // update the message - Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { - 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/data/NewsManager.kt b/src/main/kotlin/net/moonleay/liljudd/data/NewsManager.kt deleted file mode 100644 index 30dc1e4..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/NewsManager.kt +++ /dev/null @@ -1,120 +0,0 @@ -/* - * 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/splatoon3ink/Splatoon3Api.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3Api.kt deleted file mode 100644 index 2b7fa40..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3Api.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 5357116..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/Splatoon3ApiDataGrabber.kt +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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 deleted file mode 100644 index d4188cd..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraMatchSetting.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 deleted file mode 100644 index 20f0c9a..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraNode.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7f6cd90..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BankaraSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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/splatoon3ink/schedules/BannerImage.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BannerImage.kt deleted file mode 100644 index 245536a..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BannerImage.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 476dc59..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/BigRunSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index abf1858..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Boss.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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/splatoon3ink/schedules/Color.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Color.kt deleted file mode 100644 index b359a33..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Color.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 Color( - @SerialName("a") - val a: Int, - @SerialName("b") - val b: Double, - @SerialName("g") - val g: 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 deleted file mode 100644 index 1a5d5be..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopGroupingSchedule.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7f20c4c..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopSetting.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6441baa..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CoopStage.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index e2fe9ed..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentFest.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 deleted file mode 100644 index 50c8f74..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/CurrentPlayer.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2e66a3c..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventNode.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 deleted file mode 100644 index fb6ed6f..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/EventSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index db4e294..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingX.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index d2fbfc5..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestMatchSettingXX.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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/splatoon3ink/schedules/FestNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestNode.kt deleted file mode 100644 index 8e869a9..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestNode.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 FestNode( - @SerialName("endTime") - val endTime: String, - @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 deleted file mode 100644 index 9a1acc7..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/FestSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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/splatoon3ink/schedules/Image.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Image.kt deleted file mode 100644 index 9543b8a..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Image.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 Image( - @SerialName("url") - val url: String -) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchEvent.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchEvent.kt deleted file mode 100644 index 494703b..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchEvent.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 LeagueMatchEvent( - @SerialName("desc") - val desc: String, - @SerialName("id") - val id: String, - @SerialName("leagueMatchEventId") - val leagueMatchEventId: String, - @SerialName("name") - val name: String, - @SerialName("regulation") - val regulation: String, - @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 deleted file mode 100644 index 41cf553..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/LeagueMatchSetting.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 deleted file mode 100644 index f17d17c..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/MapNode.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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/splatoon3ink/schedules/OriginalImage.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/OriginalImage.kt deleted file mode 100644 index 0393f71..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/OriginalImage.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index ea899be..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularMatchSetting.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9a6935f..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularNode.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index b6c55db..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 04418e0..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/RegularSchedulesX.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index ad53d45..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SalmonRunNode.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index f3d08c7..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Schedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0bf967a..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/SchedulesData.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 deleted file mode 100644 index 3ebd2f2..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Setting.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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/splatoon3ink/schedules/Team.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Team.kt deleted file mode 100644 index 8043c5d..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Team.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 Team( - @SerialName("color") - val color: Color, - @SerialName("id") - val id: String, -// @SerialName("myVoteState") -// val myVoteState: Any? -) diff --git a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestNode.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestNode.kt deleted file mode 100644 index 22b36d8..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestNode.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 1265efc..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TeamContestSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9fb03cd..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/ThumbnailImage.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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/splatoon3ink/schedules/TimePeriod.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TimePeriod.kt deleted file mode 100644 index d86de17..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TimePeriod.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 TimePeriod( - @SerialName("endTime") - val endTime: 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 deleted file mode 100644 index b5685cc..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/TricolorStage.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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/splatoon3ink/schedules/UserIcon.kt b/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/UserIcon.kt deleted file mode 100644 index 673f73a..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/UserIcon.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index bddb5a5..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsRule.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0b9cebf..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStage.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 142508d..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/VsStages.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index a65820d..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/Weapon.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 deleted file mode 100644 index edca851..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XMatchSetting.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0242771..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XNode.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9de2887..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/api/splatoon3ink/schedules/XSchedules.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2475f28..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/DB.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.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 org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction - -object DB { - private var connected = false - - //Connect to the provided DB; trows errors, if the DB is not available. - fun connect(dbDomain: String, dbName: String, dbUser: String, dbPasswd: String) { - Database.connect( - "jdbc:postgresql://$dbDomain/$dbName", - driver = "org.postgresql.Driver", - user = dbUser, - password = dbPasswd - ) - connected = true - } - - fun register() { - if (!connected) - return - // Register tables here - transaction { - SchemaUtils.create(TimePlanningChannels) - SchemaUtils.create(TimePlanningMessages) - SchemaUtils.create(MatchPlanningData) - SchemaUtils.create(PlanningNotifierRoles) - } - } -} 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 deleted file mode 100644 index 77bfcc8..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/entry/MatchPlanningDataData.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.database.entry - -data class MatchPlanningDataData( - val id: Int, - val serverID: Long, - val channelID: Long, - val matchType: String, - val registererID: Long, - val roleID: Long, - val opponentName: String, - val messageID: Long, - val timestamp: Long, - val jobString: String -) 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 deleted file mode 100644 index b6d0abf..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/entry/PlanningNotifierRolesData.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.database.entry - -data class PlanningNotifierRolesData( - val id: Int, // The id of the entry - val serverID: Long, // The id of the server - val channelID: Long, // The id of the channel - val hasTimeRoleID: Long, // The id of the role that has time today - val wantsToBeNotifiedID: Long // The id of the role that wants to be notified -) 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 deleted file mode 100644 index c1192fc..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/entry/TimePlanningMessagesData.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.database.entry - -data class TimePlanningMessagesData( - val id: Int, // The id of the entry - val serverID: Long, // The discord server id - val channelID: Long, // The discord channel id - val weekstamp: Long, // The timestamp of the monday of the week at 4am UTC - val messageIDs: String // IDs are in the following format: "{weekdayNr}:{id};{weekdayNr}:{id};[etc.]" -) 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 deleted file mode 100644 index 5c93b43..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/repository/MatchPlanningDataRepository.kt +++ /dev/null @@ -1,115 +0,0 @@ -/* - * 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.database.repository - -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 { - - fun getAll(): List { - val dataList = mutableListOf() - transaction { - MatchPlanningData.selectAll().forEach { - dataList.add( - MatchPlanningDataData( - it[MatchPlanningData.id], - it[MatchPlanningData.serverid], - it[MatchPlanningData.channelid], - it[MatchPlanningData.matchtype], - it[MatchPlanningData.registererid], - it[MatchPlanningData.roleid], - it[MatchPlanningData.opponentName], - it[MatchPlanningData.messageid], - it[MatchPlanningData.timestamp], - it[MatchPlanningData.jobstr] - ) - ) - } - } - return dataList - } - - fun get(id: Int): MatchPlanningDataData? = - transaction { - MatchPlanningData.selectAll().where { MatchPlanningData.id eq id }.firstOrNull()?.let { - MatchPlanningDataData( - it[MatchPlanningData.id], - it[MatchPlanningData.serverid], - it[MatchPlanningData.channelid], - it[MatchPlanningData.matchtype], - it[MatchPlanningData.registererid], - it[MatchPlanningData.roleid], - it[MatchPlanningData.opponentName], - it[MatchPlanningData.messageid], - it[MatchPlanningData.timestamp], - it[MatchPlanningData.jobstr] - ) - } - } - - fun getFromMessageInChannelInServer(messageID: Long, channelID: Long, serverID: Long): MatchPlanningDataData? = - transaction { - MatchPlanningData.selectAll().where { - MatchPlanningData.messageid eq (messageID) and ( - MatchPlanningData.serverid eq (serverID)) and ( - MatchPlanningData.channelid eq (channelID)) - }.firstOrNull()?.let { - MatchPlanningDataData( - it[MatchPlanningData.id], - it[MatchPlanningData.serverid], - it[MatchPlanningData.channelid], - it[MatchPlanningData.matchtype], - it[MatchPlanningData.registererid], - it[MatchPlanningData.roleid], - it[MatchPlanningData.opponentName], - it[MatchPlanningData.messageid], - it[MatchPlanningData.timestamp], - it[MatchPlanningData.jobstr] - ) - } - } - - fun delete(id: Int) { - transaction { - MatchPlanningData.deleteWhere { MatchPlanningData.id eq id } - } - } - - fun write(data: MatchPlanningDataData): Int = - transaction { - MatchPlanningData.insert { - 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 deleted file mode 100644 index 3333471..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/repository/PlanningNotifierRolesRepository.kt +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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.database.repository - -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 { - - fun getAll(): List { - val dataList = mutableListOf() - transaction { - for (pnr in PlanningNotifierRoles.selectAll()) { - dataList.add( - PlanningNotifierRolesData( - pnr[PlanningNotifierRoles.id], - pnr[PlanningNotifierRoles.serverid], - pnr[PlanningNotifierRoles.channelid], - pnr[PlanningNotifierRoles.hastimeroleid], - pnr[PlanningNotifierRoles.wantstobenotifiedid] - ) - ) - } - } - return dataList - } - - fun getForChannel(channelID: Long): PlanningNotifierRolesData? = - transaction { - PlanningNotifierRoles.selectAll().where { PlanningNotifierRoles.channelid eq channelID }.firstOrNull()?.let { - PlanningNotifierRolesData( - it[PlanningNotifierRoles.id], - it[PlanningNotifierRoles.serverid], - it[PlanningNotifierRoles.channelid], - it[PlanningNotifierRoles.hastimeroleid], - it[PlanningNotifierRoles.wantstobenotifiedid] - ) - } - } - - fun getForChannelInServer(channelID: Long, serverID: Long): PlanningNotifierRolesData? = - transaction { - PlanningNotifierRoles.selectAll() - .where { PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) } - .firstOrNull()?.let { - PlanningNotifierRolesData( - it[PlanningNotifierRoles.id], - it[PlanningNotifierRoles.serverid], - it[PlanningNotifierRoles.channelid], - it[PlanningNotifierRoles.hastimeroleid], - it[PlanningNotifierRoles.wantstobenotifiedid] - ) - } - } - - fun existsInChannel(channelID: Long): Boolean = - transaction { - PlanningNotifierRoles.selectAll().where { PlanningNotifierRoles.channelid eq channelID }.count() > 0 - } - - fun existsInChannelFromSever(channelID: Long, serverID: Long): Boolean = - transaction { - PlanningNotifierRoles.selectAll() - .where { PlanningNotifierRoles.channelid eq channelID and (PlanningNotifierRoles.serverid eq serverID) } - .count() > 0 - } - - fun write(data: PlanningNotifierRolesData) { - transaction { - PlanningNotifierRoles.insert { - it[serverid] = data.serverID - it[channelid] = data.channelID - it[hastimeroleid] = data.hasTimeRoleID - it[wantstobenotifiedid] = data.wantsToBeNotifiedID - } get PlanningNotifierRoles.id - } - } - - fun delete(id: Int) { - transaction { - PlanningNotifierRoles.deleteWhere { PlanningNotifierRoles.id eq 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 deleted file mode 100644 index f809420..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningChannelsRepository.kt +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.database.repository - -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 { - - fun getAll(): List { - val dataList = mutableListOf() - transaction { - for (tp in TimePlanningChannels.selectAll()) - dataList.add( - TimePlanningChannelsData( - id = tp[TimePlanningChannels.id], - serverID = tp[TimePlanningChannels.serverid], - channelID = tp[TimePlanningChannels.channelid], - ) - ) - } - return dataList - } - - fun exists(channelID: Long, serverID: Long): Boolean = - transaction { - TimePlanningChannels.selectAll() - .where { TimePlanningChannels.channelid eq channelID and (TimePlanningChannels.serverid eq serverID) } - .firstOrNull() != null - } - - fun delete(id: Int) { - transaction { - TimePlanningChannels.deleteWhere { TimePlanningChannels.id eq id } - } - } - - fun deleteFromChannelInServer(channelID: Long, serverID: Long) { - transaction { - TimePlanningChannels.deleteWhere { channelid eq channelID and (serverid eq serverID) } - } - } - - fun write(data: TimePlanningChannelsData): Int = - transaction { - TimePlanningChannels.insert { - 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 deleted file mode 100644 index 4c92a08..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/repository/TimePlanningMessagesRepository.kt +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.database.repository - -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.selectAll -import org.jetbrains.exposed.sql.transactions.transaction - -object TimePlanningMessagesRepository { - - fun write(data: TimePlanningMessagesData): Int = - transaction { - TimePlanningMessages.insert { - it[serverid] = data.serverID - it[channelid] = data.channelID - it[weekstamp] = data.weekstamp - it[messageids] = data.messageIDs - } get TimePlanningMessages.id - } - - fun getWeek(stamp: Long): List { - val dataList = mutableListOf() - transaction { - for (pnr in TimePlanningMessages.selectAll().where { TimePlanningMessages.weekstamp eq (stamp) }) { - dataList.add( - TimePlanningMessagesData( - pnr[TimePlanningMessages.id], - pnr[TimePlanningMessages.serverid], - pnr[TimePlanningMessages.channelid], - pnr[TimePlanningMessages.weekstamp], - pnr[TimePlanningMessages.messageids] - ) - ) - } - } - return dataList - } - - fun getWeekInChannel(stamp: Long, channelID: Long): TimePlanningMessagesData? = - transaction { - TimePlanningMessages.selectAll() - .where { TimePlanningMessages.weekstamp eq (stamp) and (TimePlanningMessages.channelid eq channelID) }.firstOrNull()?.let { - TimePlanningMessagesData( - it[TimePlanningMessages.id], - it[TimePlanningMessages.serverid], - it[TimePlanningMessages.channelid], - it[TimePlanningMessages.weekstamp], - it[TimePlanningMessages.messageids] - ) - } - } - - -} 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 deleted file mode 100644 index 1ba4ae3..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/tables/MatchPlanningData.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.database.tables - -import org.jetbrains.exposed.sql.Table - -object MatchPlanningData : Table(name = "new_matchplanning_data") { - var id = integer("id").autoIncrement() - var serverid = long("serverid") - var channelid = long("channelid") - var matchtype = varchar("matchtype", 50) - var registererid = long("registererid") - var roleid = long("roleid") - var opponentName = varchar("opponentname", 100) - var messageid = long("messageid") - var timestamp = long("timestamp") - var jobstr = varchar("jobstr", 50) -} 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 deleted file mode 100644 index f7061ac..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/data/database/tables/TimePlanningMessages.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.database.tables - -import org.jetbrains.exposed.sql.Table - -object TimePlanningMessages : Table(name = "new_timeplanning_messages") { - var id = integer("id").autoIncrement() - var serverid = long("serverid") - var channelid = long("channelid") - var weekstamp = long("weekstamp") - var messageids = varchar("messageids", 200) -} diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/FeatureManageExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/FeatureManageExtension.kt deleted file mode 100644 index 309e433..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/FeatureManageExtension.kt +++ /dev/null @@ -1,136 +0,0 @@ -/* - * 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.commands.converters.impl.channel -import com.kotlindiscord.kord.extensions.extensions.Extension -import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import com.kotlindiscord.kord.extensions.utils.hasPermission -import dev.kord.common.entity.Permission -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() { - - override val name = "feature" - override val allowApplicationCommandInDMs: Boolean - get() = false - - - override suspend fun setup() { - publicSlashCommand(::FeatureManagerArgs) { - name = "feature" - description = "Manage features" - - this.action { - val u = this.user - if (!u.asMember(this.guild!!.id).hasPermission(Permission.Administrator)) { - this.respond { - 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 - } - val gID = this.guild!!.id.value.toLong() - val cID = this.arguments.channel.id.value.toLong() - val channel = this.arguments.channel - val args = this.arguments - Logger.out("${args.feature.readableName} ${args.setStatus.readableName} ${channel.data.name.value}") - val f = FeatureManager.getFeature(args.feature) - if (f == null) { - this.respond { - 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.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.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) - } - } - } - } - } - } - - inner class FeatureManagerArgs : Arguments() { - - val feature by enumChoice { - this.name = "feature" - this.description = "The targeted feature" - this.typeName = "en_US" - } - - val setStatus by enumChoice { - this.name = "set" - this.description = "Set enabled or disabled" - this.typeName = "en_US" - } - - val channel by channel { - this.name = "channel" - this.description = "Target Channel" - } - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/MatchExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/MatchExtension.kt deleted file mode 100644 index 7d6a8c6..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/MatchExtension.kt +++ /dev/null @@ -1,172 +0,0 @@ -/* - * 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.commands.converters.impl.string -import com.kotlindiscord.kord.extensions.extensions.Extension -import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import dev.kord.core.behavior.createRole -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() { - - override val name = "match" - override val allowApplicationCommandInDMs: Boolean - get() = false - - - override suspend fun setup() { - publicSlashCommand(::MatchArguments) { - name = "match" - description = "Create a match" - this.action { - val args = this.arguments - val m = this.member!! - val gID = this.guild!!.id.value - val cID = this.channel.id.value - 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()) - } - } - } - return@action - } - // filter time to date: - val zdt = TimeUtil.getDateFromString(args.timeStamp) - // get the string for the cronjob - val jobString = TimeUtil.getCronjobStringFromDate(zdt) - // create the role - val role = this.guild!!.createRole { - this.name = - "${args.matchType.readableName} Vs ${opponent} At ${zdt.dayOfMonth}/${zdt.month}/${zdt.year} ${zdt.hour}:${zdt.minute}" - this.mentionable = true - } - // Check if the role was created successfully - if (role == null) { - 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, - gID.toLong(), - cID.toLong(), - args.matchType.readableName, - m.id.value.toLong(), - role.id.value.toLong(), - opponent, - msg.id.value.toLong(), - (zdt.toEpochSecond() * 1000), - jobString - ) - ) - if (tID == null || tID <= 0) { - return@action // Not saved to db - // TODO: Add error message - } - JobManager.addJob( - MatchJob( - jobString, - tID, - "${args.matchType.readableName}_Vs_${opponent}_[${tID}]-${gID}_${cID}", - ) - ) - } - } - } - - inner class MatchArguments : Arguments() { - - val matchType by enumChoice { - this.name = "match" - this.description = "The type of match" - this.typeName = "en_US" - } - - - val timeStamp by string { - this.name = "timestamp" - this.description = "The timestamp of the match. Format \"dd.MM.yyyy HH:mm\"." - } - - 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 deleted file mode 100644 index d5b0d7e..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/RotationExtension.kt +++ /dev/null @@ -1,464 +0,0 @@ -/* - * 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 deleted file mode 100644 index a2d98dc..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/SendPlannerExtension.kt +++ /dev/null @@ -1,145 +0,0 @@ -/* - * 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.extensions.Extension -import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -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.actionRow -import dev.kord.rest.builder.message.embed -import kotlinx.coroutines.delay -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 - -/* This extension has no proper use. - It is used in testing to test stuff, without having to wait for certain events to trigger. */ -class SendPlannerExtension : Extension() { - override val name = "sendplanner" - override val allowApplicationCommandInDMs: Boolean - get() = false - - override suspend fun setup() { - publicSlashCommand { - name = "sendplanner" - description = "Send the planner for the current week" - this.action { - if (!this.member!!.asMember(this.guild!!.id) - .hasPermission(Permission.Administrator) - ) { - val res = this.respond { - 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.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() - var msgStr = "" - var then = - ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withDayOfMonth(TimeUtil.getMondayDayOfMonth()) - .withHour(4) - .withMinute(0).withSecond(0) - c.createMessage { - 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 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) - } - } - msgStr += "${it}:${msg.id.value};" - then = then.plusDays(1).withHour(4).withMinute(0).withSecond(0) - Logger.out("Finished sending day $it/ This was manually triggered") - delay(1000) - } - - // Save the message ids - TimePlanningMessagesRepository.write( - TimePlanningMessagesData( - -1, - c.data.guildId.value?.value!!.toLong(), - c.id.value.toLong(), - (TimeUtil.getWeekStamp().toEpochSecond()), - msgStr - ) - ) - Logger.out("Finished with ${c.data.guildId.value}") - } - } - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/UpdateRolesExtension.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/UpdateRolesExtension.kt deleted file mode 100644 index 7ffe5e9..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/UpdateRolesExtension.kt +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.extensions.Extension -import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import com.kotlindiscord.kord.extensions.utils.hasPermission -import dev.kord.common.entity.Permission -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" - override val allowApplicationCommandInDMs: Boolean - get() = false - - override suspend fun setup() { - publicSlashCommand { - name = "updateroles" - description = "Update the roles of the members in the current server" - this.action { - if (!this.member!!.asMember(this.guild!!.id) - .hasPermission(Permission.Administrator) - ) { - this.respond { - 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.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) - } - } - } - Logger.out("Starting to update roles...") - - AvailabilityManager.updateInChannel(this.channel.id) - } - } - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/component/MatchTypes.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/component/MatchTypes.kt deleted file mode 100644 index cc60220..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/component/MatchTypes.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * lilJudd - * Copyright (C) 2024 moonleay - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.moonleay.liljudd.extensions.component - -import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum - -enum class MatchTypes(override val readableName: String) : ChoiceEnum { - TOURNEY("Tourney Match"), - LADDER("Ladder Match"), - SCRIM("Scrim"), - LAN("LAN Match"), - OPEN("Anarchy Open"); -} diff --git a/src/main/kotlin/net/moonleay/liljudd/extensions/component/SplatoonOnlineMode.kt b/src/main/kotlin/net/moonleay/liljudd/extensions/component/SplatoonOnlineMode.kt deleted file mode 100644 index 92e587e..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/extensions/component/SplatoonOnlineMode.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * lilJudd - * Copyright (C) 2024 moonleay - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.moonleay.liljudd.extensions.component - -import com.kotlindiscord.kord.extensions.commands.application.slash.converters.ChoiceEnum - -enum class SplatoonOnlineMode(override val readableName: String) : ChoiceEnum { - ALL("All Modes"), - REGULAR("Regular Battle"), - SERIES("Ranked Battle (Series)"), - OPEN("Ranked Battle (Open)"), - X("X Battle"), - SALMON_RUN("Salmon Run"), -} diff --git a/src/main/kotlin/net/moonleay/liljudd/features/AvailabilityManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/AvailabilityManager.kt deleted file mode 100644 index e4d0441..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/features/AvailabilityManager.kt +++ /dev/null @@ -1,256 +0,0 @@ -/* - * 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.features - -import com.kotlindiscord.kord.extensions.utils.isNullOrBot -import dev.inmo.krontab.buildSchedule -import dev.inmo.krontab.doInfinity -import dev.kord.common.entity.Snowflake -import dev.kord.core.behavior.UserBehavior -import dev.kord.core.behavior.createRole -import dev.kord.core.behavior.requestMembers -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 java.time.ZonedDateTime - -object AvailabilityManager : IFeature { - - // This runs during the cronjob. - suspend fun runThread() { - Logger.out("Updating match roles") - - // ChannelID, Data - val messages = TimePlanningMessagesRepository.getWeek(TimeUtil.getWeekStamp().toEpochSecond()) - .associateBy { it.channelID } - val targetedRoles = PlanningNotifierRolesRepository.getAll().associateBy { it.channelID } - if (targetedRoles.isEmpty()) { - Logger.out("No saved roles. Canceling.") - return - } - - for (id in messages.keys) { - val snf = Snowflake(id) // snf = Snowflake - val data = messages[id]!! // this is the data of the table - if (Bot.bot.kordRef.getChannel(Snowflake(data.channelID)) == null) { - // This channel does not exist anymore. - Logger.out("Warning: Channel ${data.channelID} does not exist anymore. Skipping.") - continue - } - val roleData = targetedRoles[data.channelID] // Get the role data - if (roleData == null) { - Logger.out("Role for channel ${data.channelID} does not exist") - continue // this took way to long to find out that this was the issue - } - this.updateInChannel(snf, data, roleData) - } - Logger.out("Finished updating roles") - } - - suspend fun updateInChannel(snf: Snowflake) { - val stamp = TimeUtil.getWeekStamp().toEpochSecond() - Logger.out("Weekstamp: $stamp") - val messageData = TimePlanningMessagesRepository.getWeekInChannel( - stamp, - snf.value.toLong() - ) - if (messageData == null) { - Logger.out("Could not find data for channel ${snf.value}") - return - } - val roleData = PlanningNotifierRolesRepository.getForChannel(snf.value.toLong()) - if (roleData == null) { - Logger.out("Role for channel ${messageData.channelID} does not exist") - return // this took way to long to find out that this was the issue - } - updateInChannel(snf, messageData, roleData) - } - - @OptIn(PrivilegedIntent::class) - suspend fun updateInChannel(snf: Snowflake, tpmd: TimePlanningMessagesData, pnrd: PlanningNotifierRolesData) { - if (Bot.bot.kordRef.getChannel(snf) == null) - return // This channel does not exist anymore. - val c = Bot.bot.kordRef.getChannelOf(snf)!! // Get the channel as MessageChannel - val weekday = ZonedDateTime.now().dayOfWeek // The current week day - val weekStamp = TimeUtil.getWeekStamp().toEpochSecond() // The current week time stamp - Logger.out("It is week ${weekStamp} and day ${weekday}/${TimeUtil.getDayOfMonthInt(weekday)} of the week.") - val g = Bot.bot.kordRef.getGuild(Snowflake(tpmd.serverID)) - // Get all members with the role - val mce = g.requestMembers { - this.requestAllMembers() - } - mce.collect { memberchunkevent -> - memberchunkevent.members.forEach { - if (!it.isNullOrBot()) { // Check if the member is a bot - Logger.out("Checking member ${it.id.value} (${it.username})") - if (it.roleIds.contains(Snowflake(pnrd.hasTimeRoleID))) { - it.removeRole(Snowflake(pnrd.hasTimeRoleID)) - Logger.out("Removed role from ${it.username}") // Removed the role - } - } - // I cant use continue here, because it does not work with .forEach - } - } - - Logger.out("Got through all members") - // This stores the ids of the messages. - // The format is weekdaNR:ID - // The last entry (nr 8) is empty, so we can ignore it - val messageIdSplit = tpmd.messageIDs.split(";").subList(0, 7) - for (mid in messageIdSplit) { - Logger.out("Checking id $mid") - if (!mid.startsWith((TimeUtil.getDayOfMonthInt(weekday) - 1).toString(), true)) - continue// This is not the right message, check the next one - val idFiltered = mid.split(":")[1] // This is the target message id - val message = c.getMessageOrNull(Snowflake(idFiltered)) // Get the message from the channel - if (message == null) { - Logger.out("Could not find message.") - return // This message does not exist anymore. Nothing we can do about that. - } - if (message.data.embeds.isEmpty()) { - Logger.out("There are no embeds.") - return // There are no embeds or there are not enough embeds - } - val targets = EmbedUtil.getAllUsersInTheFirstXTables(2, message.embeds[0]) - for (tid in targets) { - Logger.out("Checking id $tid") - if (Bot.bot.kordRef.getGuildOrNull(Snowflake(tpmd.serverID))!! - .getMemberOrNull(Snowflake(tid)) == null - ) - continue// This member does not exist anymore. - val member = Bot.bot.kordRef.getGuild(Snowflake(tpmd.serverID)) - .getMember(Snowflake(tid)) // Get the member - if (member.roleIds.contains(Snowflake(pnrd.hasTimeRoleID))) - continue // This member already has the role - member.addRole(Snowflake(pnrd.hasTimeRoleID)) // Add the role - Logger.out("Added role to ${member.username}") - } - Logger.out("Done with message. Moving on...") - // We found the right message. We don't need to check the others. - break - } - } - - override val feat: FeatureEnum - get() = FeatureEnum.PLANNINGROLES - - // Register the cronjob to run at 1AM UTC every day - override suspend fun registerThread() { - 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() - } - } - - override suspend fun enable( - u: UserBehavior, - gID: Long, - cID: Long, - ch: Channel, - args: FeatureManageExtension.FeatureManagerArgs - ): EmbedBuilder { - val alreadyExists = PlanningNotifierRolesRepository.existsInChannel(cID) - // Check if the channel and guild already exist in the db - if (!alreadyExists) { - // Create the roles in Discord - val hasTimeRole = Bot.bot.kordRef.getGuild(Snowflake(gID)).createRole { - this.name = "available [${ch.data.name.value}]" - this.mentionable = true - } - val htr = hasTimeRole.id.value.toLong() - - val wantsNotifsRole = Bot.bot.kordRef.getGuild(Snowflake(gID)).createRole { - this.name = "notifications [${ch.data.name.value}]" - this.mentionable = true - } - val wnr = wantsNotifsRole.id.value.toLong() - - // Save the role ids to db - PlanningNotifierRolesRepository.write( - PlanningNotifierRolesData( - id = -1, - serverID = gID, - channelID = cID, - hasTimeRoleID = htr, - wantsToBeNotifiedID = wnr - ) - ) - - return MessageUtil.getEmbed( - EmbedColor.SUCCESS, - "200: Success", - "The feature was enabled in channel ${args.channel.data.name.value} with roles ${hasTimeRole.mention} & ${wantsNotifsRole.mention}.", - u.asUser().username + "#" + u.asUser().discriminator - ) - } - - // They exist, do not add them - return MessageUtil.getEmbed( - EmbedColor.ERROR, - "403: Forbidden", - "The feature is already enabled in this channel.", - u.asUser().username + "#" + u.asUser().discriminator - ) - } - - override suspend fun disable( - u: UserBehavior, - gID: Long, - cID: Long, - ch: Channel, - args: FeatureManageExtension.FeatureManagerArgs - ): EmbedBuilder { - // Check if entry exists in db - if (PlanningNotifierRolesRepository.existsInChannelFromSever(cID, gID)) { - val entry = PlanningNotifierRolesRepository.getForChannelInServer(cID, gID)!! - // delete all entries for this guild and channel combo - Bot.bot.kordRef.getGuild(Snowflake(gID)) - .getRoleOrNull(Snowflake(entry.hasTimeRoleID))?.delete() - Bot.bot.kordRef.getGuild(Snowflake(gID)) - .getRoleOrNull(Snowflake(entry.wantsToBeNotifiedID))?.delete() - - // delete all found entries - PlanningNotifierRolesRepository.delete(entry.id) - return MessageUtil.getEmbed( - EmbedColor.SUCCESS, - "200: Success", - "The feature was disabled.", - u.asUser().username + "#" + u.asUser().discriminator - ) - } - // not in db, do nothing - return MessageUtil.getEmbed( - EmbedColor.ERROR, - "403: Forbidden", - "The feature is already disabled in this channel.", - u.asUser().username + "#" + u.asUser().discriminator - ) - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/features/MatchManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/MatchManager.kt deleted file mode 100644 index 1bdeafe..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/features/MatchManager.kt +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.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 - -object MatchManager { - suspend fun update() { - Logger.out("Updating matches") - val dataList = MatchPlanningDataRepository.getAll() - - for (data in dataList) { - Logger.out("Checking match role ${data.id}...") - if (data.timestamp < System.currentTimeMillis()) { - Logger.out("Match role ${data.id} is expired, removing...") - this.removeRoleFromGuild(data.serverID, data.roleID) - MatchPlanningDataRepository.delete(data.id) - continue - } - this.registerJob(data) - } - Logger.out("Finished updating matches") - } - - private fun registerJob(data: MatchPlanningDataData) { - JobManager.addJob( - MatchJob( - data.jobString, - data.id, - "fromdb-${data.matchType}_Vs_${data.opponentName}_[${data.id}]-${data.serverID}_${data.channelID}" - ) - ) - Logger.out("Registered job for match ${data.id}...") - } - - private suspend fun removeRoleFromGuild(gid: Long, rid: Long): Boolean { - val guild = Bot.bot.kordRef.getGuildOrNull(Snowflake(gid)) ?: return false - val role = guild.getRoleOrNull(Snowflake(rid)) ?: return false - role.delete() - return true - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/features/TimeManager.kt b/src/main/kotlin/net/moonleay/liljudd/features/TimeManager.kt deleted file mode 100644 index 0496dff..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/features/TimeManager.kt +++ /dev/null @@ -1,206 +0,0 @@ -/* - * 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.features - -import dev.inmo.krontab.buildSchedule -import dev.inmo.krontab.doInfinity -import dev.kord.common.entity.Snowflake -import dev.kord.core.behavior.UserBehavior -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.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 java.time.ZoneId -import java.time.ZonedDateTime - - -object TimeManager : IFeature { - override val feat: FeatureEnum - get() = FeatureEnum.TIMEPLANNINGFEATURE - - // Register the cronjob to run at 0:01 AM UTC every Monday - override suspend fun registerThread() { - 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() - } - } - - private suspend fun runThread() { - Logger.out("Starting to send out weekly planning messages") - - // ChannelID -> Data - val targetedChannels = TimePlanningChannelsRepository.getAll().associateBy { it.channelID } - val targetedRoles = PlanningNotifierRolesRepository.getAll().associateBy { it.channelID } - - lateinit var msgStr: String - - Logger.out("${targetedChannels.count()} Channels to notify with ${targetedRoles.count()} Roles to ping!") - for (ch2 in targetedChannels.keys) { - val ch = Snowflake(ch2) - if (Bot.bot.kordRef.getChannel(ch) == null) - 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.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.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 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) - } - } - msgStr += "${it}:${msg.id.value};" - then = then.plusDays(1).withHour(4).withMinute(0).withSecond(0) - Logger.out("Finished sending day $it in $ch") - - delay(1000) - } - - // Save the message ids - TimePlanningMessagesRepository.write( - TimePlanningMessagesData( - id = -1, - serverID = c.data.guildId.value?.value!!.toLong(), - channelID = c.data.id.value.toLong(), - weekstamp = then.minusDays(7).toEpochSecond(), - messageIDs = msgStr - ) - ) - Logger.out("Finished with ${c.data.guildId.value}") - } - Logger.out("Done! Until next Monday! <3 ") - } - - override suspend fun enable( - u: UserBehavior, - gID: Long, - cID: Long, - ch: Channel, - args: FeatureManageExtension.FeatureManagerArgs - ): EmbedBuilder { - if (!TimePlanningChannelsRepository.exists(cID, gID)) { - TimePlanningChannelsRepository.write(TimePlanningChannelsData(id = -1, serverID = gID, channelID = cID)) - return MessageUtil.getEmbed( - EmbedColor.SUCCESS, - "200: Success", - "The feature was enabled in channel ${args.channel.data.name.value}", - u.asUser().username - ) - } - return MessageUtil.getEmbed( - EmbedColor.ERROR, - "409: Conflict", - "The feature is already enabled in this channel.", - u.asUser().username - ) - } - - override suspend fun disable( - u: UserBehavior, - gID: Long, - cID: Long, - ch: Channel, - args: FeatureManageExtension.FeatureManagerArgs - ): EmbedBuilder { - // Check if entry exists in db - if (TimePlanningChannelsRepository.exists(cID, gID)) { - // delete all entries for this channel - TimePlanningChannelsRepository.deleteFromChannelInServer(cID, gID) - return MessageUtil.getEmbed( - EmbedColor.SUCCESS, - "200: Success", - "The feature was disabled.", - u.asUser().username - ) - } - // Do nothing; not in db - return MessageUtil.getEmbed( - EmbedColor.ERROR, - "409: Conflict", - "The feature is already disabled in this channel.", - u.asUser().username - ) - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/features/component/IFeature.kt b/src/main/kotlin/net/moonleay/liljudd/features/component/IFeature.kt deleted file mode 100644 index 77170f3..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/features/component/IFeature.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.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 - -interface IFeature { - val feat: FeatureEnum - suspend fun registerThread() - - suspend fun enable( - u: UserBehavior, - gID: Long, - cID: Long, - ch: Channel, - args: FeatureManageExtension.FeatureManagerArgs - ): EmbedBuilder - - suspend fun disable( - u: UserBehavior, - gID: Long, - cID: Long, - ch: Channel, - args: FeatureManageExtension.FeatureManagerArgs - ): EmbedBuilder -} diff --git a/src/main/kotlin/net/moonleay/liljudd/jobs/MatchJob.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/MatchJob.kt deleted file mode 100644 index 130e304..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/jobs/MatchJob.kt +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.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 - -class MatchJob( - override val jobIncoming: String, - private val tableId: Int, - override val jobName: String, -) : ICronjob { - override val jobType: CronjobType = CronjobType.ONCE - override val continueJob: Boolean = true - override lateinit var cronjobJob: Job - override lateinit var scheduler: KronScheduler - - /* - * This job should delete the role, which was created for the match. - * */ - override suspend fun jobFunction() { - Logger.out("Running MatchJob \"${this.jobName}\"") - val mpdd = MatchPlanningDataRepository.get(tableId)!! - val guild = Bot.bot.kordRef.getGuildOrNull(Snowflake(mpdd.serverID)) - if (guild == null) { - Logger.out("Guild not found.") - return - } - val r = guild.getRoleOrNull(Snowflake(mpdd.roleID)) - if (r == null) { - Logger.out("Role not found.") - return - } - r.delete() - MatchPlanningDataRepository.delete(tableId) - Logger.out("MatchJob \"${this.jobName}\" finished.") - Logger.out("Killing job \"${this.jobName}\"..") - JobManager.killJob(this) - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt deleted file mode 100644 index b5701c0..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/jobs/Splatoon3ApiScheduleUpdateScheduler.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.jobs - -import dev.inmo.krontab.KronScheduler -import kotlinx.coroutines.Job -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 - get() = "Splatoon3ApiScheduleUpdateScheduler" - override val jobIncoming: String - get() = "0 0 /1 * * * 0o *" //Every hour - 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("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 deleted file mode 100644 index fdb421b..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/jobs/StatusUpdater.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.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.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() = "/30 * * * * * 0o *" //Every 30 seconds - override val jobType: CronjobType - get() = CronjobType.INFINITE - override val continueJob: Boolean - get() = true - override lateinit var cronjobJob: Job - override lateinit var scheduler: KronScheduler - - private var statusList = listOf() - private var index = 0 - - // I h8 this cronjob. I'll recode this someday. - override suspend fun jobFunction() { - if (index >= statusList.size) { - index = 0 - refreshStatusList(System.currentTimeMillis()) - } - Bot.bot.kordRef.editPresence { - this.status = PresenceStatus.DoNotDisturb - this.competing(statusList[index]) - } - ++index - } - - private fun refreshStatusList(timestamp: Long) { - statusList = listOf( - 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 deleted file mode 100644 index fa1992b..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/jobs/component/CronjobType.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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.jobs.component - -enum class CronjobType { - INFINITE, - ONCE, - WHILE -} diff --git a/src/main/kotlin/net/moonleay/liljudd/jobs/component/ICronjob.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/component/ICronjob.kt deleted file mode 100644 index 8e3f946..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/jobs/component/ICronjob.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.jobs.component - -import dev.inmo.krontab.KronScheduler -import kotlinx.coroutines.Job - -interface ICronjob { - val jobName: String - - /* /--------------- Seconds - | /------------- Minutes - | | /----------- Hours - | | | /--------- Days of months - | | | | /------- Months - | | | | | /----- (optional) Year - | | | | | | /--- (optional) Timezone offset - | | | | | | | / (optional) Week days - * * * * * * 0o *w - */ - - val jobIncoming: String - val jobType: CronjobType - - val continueJob: Boolean - - var cronjobJob: Job - var scheduler: KronScheduler - suspend fun jobFunction() - -} diff --git a/src/main/kotlin/net/moonleay/liljudd/jobs/component/JobManager.kt b/src/main/kotlin/net/moonleay/liljudd/jobs/component/JobManager.kt deleted file mode 100644 index ce62d1c..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/jobs/component/JobManager.kt +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.jobs.component - -import dev.inmo.krontab.buildSchedule -import dev.inmo.krontab.doInfinityTz -import dev.inmo.krontab.doOnceTz -import dev.inmo.krontab.doWhileTz -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import net.moonleay.liljudd.util.Logger -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter - -object JobManager { - private val jobs: MutableList = mutableListOf() - - // Add a cronjob and register it - fun addJob(job: ICronjob) { - if (jobs.contains(job)) { - killJob(job) - } - registerJob(job) - jobs.add(job) - Logger.out("Registered job \"${job.jobName}\" of type \"${job.javaClass.name}\".") - } - - // Register a cronjob - private fun registerJob(job: ICronjob) { - Logger.out( - "INFO: Registering job \"${job.jobName}\"of type ${job.javaClass.name} at ${ - LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) - }" - ) - job.cronjobJob = CoroutineScope(Dispatchers.Default).launch { - job.scheduler = buildSchedule(job.jobIncoming) - Logger.out("Registered job \"${job.jobName}\"of type ${job.javaClass.name} to run at timer \"${job.jobIncoming}\".") - when (job.jobType) { - // Runs the job once at the specified time - CronjobType.ONCE -> { - job.scheduler.doOnceTz { - job.jobFunction() - } - } - // Runs the job whiles the variable is set to true - CronjobType.WHILE -> { - job.scheduler.doWhileTz { - job.jobFunction() - job.continueJob - } - } - // Run this job until the programm stops - CronjobType.INFINITE -> { - job.scheduler.doInfinityTz { - job.jobFunction() - } - } - } - } - } - - // Kill all cronjobs - fun killAllJobs() { - for (j in jobs) { - killJob(j) - } - } - - // Kill a cronjob - fun killJob(j: ICronjob) { - if (!jobs.contains(j)) { - Logger.out("This job does not exist.") - return - } - Logger.out("Killing job \"${j.jobName}\" of type ${j.javaClass.name}.") - j.cronjobJob.cancel() - jobs.remove(j) - } -} diff --git a/src/main/kotlin/net/moonleay/liljudd/util/NetUtil.kt b/src/main/kotlin/net/moonleay/liljudd/util/NetUtil.kt deleted file mode 100644 index 665d0bb..0000000 --- a/src/main/kotlin/net/moonleay/liljudd/util/NetUtil.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.util - -import java.net.URL -import javax.net.ssl.HttpsURLConnection - -object NetUtil { - fun GETJsonData(urlIN: String, userAgent: String): String { - val startTime = System.currentTimeMillis() - val url = URL(urlIN) - val connection = url.openConnection() as HttpsURLConnection - connection.requestMethod = "GET" - connection.setRequestProperty("User-Agent", userAgent) - connection.setRequestProperty("Accept", "application/json") - val responseCode = connection.responseCode - val timeDiff = System.currentTimeMillis() - startTime - Logger.out("GET took $timeDiff ms (from: $urlIN, as $userAgent)") - return if (responseCode == HttpsURLConnection.HTTP_OK) { - val inputStream = connection.inputStream - val inputStreamReader = inputStream.reader() - val inputAsString = inputStreamReader.readText() - inputStream.close() - inputAsString - } else { - "Error $responseCode" - } - } -} diff --git a/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt b/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt index 73a4fdd..fdcf269 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) 2024 moonleay + * 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 @@ -16,16 +16,15 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.build +package net.moonleay.botendo.build internal object BuildConstants { const val version = "${version}" - const val creatorID = "${creatorID}" + const val ownerID = "${ownerID}" 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}" }