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
+
+[](https://gitlab.com/moonleay/liljudd/-/releases)
+[](https://gitlab.com/moonleay/liljudd/-/commits/master)
+[](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}"
}