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/README.md b/README.md index 6d87924..cfc9bea 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A Discord Bot for Splatoon Teams. -More information can be found on the [Homepage](https://liljudd.ink). +More information can be found on the [Homepage](https://moonleay.net/projects/liljudd/). ## Contributors @@ -12,7 +12,7 @@ More information can be found on the [Homepage](https://liljudd.ink). ## Known issues -##### If you encounter any bugs, message me on Discord (@moonleay) or send me a mail (issues@moonleay.net). You can also open a ticket [on the support server](https://discord.gg/HTZRktfH4A). +##### If you encounter any bugs, message me on Discord (@moonleay) or send me a mail (issues@moonleay.net). ## Commands & Features @@ -29,7 +29,11 @@ More information can be found on the [Homepage](https://liljudd.ink). ## (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) +- Game Tracker (Save the results of the last matches) +- Replay Saver (Maybe; will save the replay code to a database) +- Rndm map command +- Maybe a DSB / DSL API ## How to self-host (using the Docker container) diff --git a/build.gradle.kts b/build.gradle.kts index 48416b1..549c10f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,7 +32,7 @@ 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.6.5" + ?: "2.6.4" val kordver = "1.5.9-SNAPSHOT" val coroutinesver = "1.7.3" diff --git a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt b/src/main/kotlin/net/moonleay/lilJudd/Bot.kt index 05f7ba8..d38c329 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/Bot.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/Bot.kt @@ -30,17 +30,23 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job 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.api.Splatoon3ApiCache +import net.moonleay.lilJudd.data.api.type.ApiDataType +import net.moonleay.lilJudd.data.api.type.ApiRequestType import net.moonleay.lilJudd.data.database.DB import net.moonleay.lilJudd.extensions.* import net.moonleay.lilJudd.features.AvailabilityManager import net.moonleay.lilJudd.features.MatchManager import net.moonleay.lilJudd.features.TimeManager +import net.moonleay.lilJudd.jobs.Splatoon3ApiScheduleUpdateScheduler +import net.moonleay.lilJudd.jobs.StatusUpdater +import net.moonleay.lilJudd.jobs.component.JobManager import net.moonleay.lilJudd.util.EmbedColor import net.moonleay.lilJudd.util.Logger import net.moonleay.lilJudd.util.MessageUtil -import net.moonleay.liljudd.build.BuildConstants import kotlin.system.exitProcess object Bot { @@ -104,6 +110,7 @@ object Bot { add(::SendPlannerExtension) add(::MatchExtension) add(::UpdateRolesExtension) + add(::RotationExtension) } this.presence { @@ -158,21 +165,17 @@ object Bot { AvailabilityManager.runThread() // Update Availabilities MatchManager.update() // Update Matches // Make the bot update the status every 6 seconds - // JobManager.addJob(StatusUpdater) + JobManager.addJob(StatusUpdater) } // Update the Splatoon 3 api data and make sure it stays up-to-date - // Splatoon3ApiCache.updateData(ApiDataType.SCHEDULES, ApiRequestType.AUTOMATIC_CACHE_CREATION_AT_STARTUP) - // JobManager.addJob(Splatoon3ApiScheduleUpdateScheduler) + Splatoon3ApiCache.updateData(ApiDataType.SCHEDULES, ApiRequestType.AUTOMATIC_CACHE_CREATION_AT_STARTUP) + 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 - - //JobManager.addJob(Splatoon3ApiFestivalAndCoopUpdateScheduler) //JobManager.addJob(Splatoon3ApiSplatnetGearUpdateScheduler) diff --git a/src/main/kotlin/net/moonleay/lilJudd/Main.kt b/src/main/kotlin/net/moonleay/lilJudd/Main.kt index 36be8b3..9d00d29 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/Main.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/Main.kt @@ -17,8 +17,7 @@ */ package net.moonleay.lilJudd -import net.moonleay.liljudd.build.BuildConstants - +import net.moonleay.botendo.build.BuildConstants suspend fun main() { println( diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt index b0192e5..968ce22 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3Api.kt @@ -22,7 +22,7 @@ import net.moonleay.lilJudd.data.api.entry.schedule.ModeData import net.moonleay.lilJudd.util.TimeUtil object Splatoon3Api { - private fun getRegularMode(timestamp: Long): ModeData { + fun getRegularMode(timestamp: Long): ModeData { Splatoon3ApiCache.cachedRegularModeData.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -33,7 +33,7 @@ object Splatoon3Api { throw Exception("No current mode found") } - private fun getOpenMode(timestamp: Long): ModeData { + fun getOpenMode(timestamp: Long): ModeData { Splatoon3ApiCache.cachedCompetitiveOpenModeData.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -44,7 +44,7 @@ object Splatoon3Api { throw Exception("No current mode found") } - private fun getXMode(timestamp: Long): ModeData { + fun getXMode(timestamp: Long): ModeData { Splatoon3ApiCache.cachedXModeData.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") @@ -55,7 +55,7 @@ object Splatoon3Api { throw Exception("No current mode found") } - private fun getSeriesMode(timestamp: Long): ModeData { + fun getSeriesMode(timestamp: Long): ModeData { Splatoon3ApiCache.cachedCompetitiveSeriesModeData.map { modeData -> val startTime = TimeUtil.deformatJSONTime(modeData.startTime, "UTC") val endTime = TimeUtil.deformatJSONTime(modeData.endTime, "UTC") diff --git a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt b/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt index 714ff1e..42ff01c 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/data/api/Splatoon3ApiCache.kt @@ -20,6 +20,7 @@ package net.moonleay.lilJudd.data.api import io.ktor.http.* import kotlinx.serialization.json.* +import net.moonleay.botendo.build.BuildConstants import net.moonleay.lilJudd.data.api.entry.coop.CoopGearData import net.moonleay.lilJudd.data.api.entry.schedule.* import net.moonleay.lilJudd.data.api.entry.splatfest.SplatfestColor @@ -33,7 +34,6 @@ import net.moonleay.lilJudd.data.api.type.ApiDataType import net.moonleay.lilJudd.data.api.type.ApiRequestType import net.moonleay.lilJudd.util.Logger import net.moonleay.lilJudd.util.NetUtil -import net.moonleay.liljudd.build.BuildConstants object Splatoon3ApiCache { private val user_agent = diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt index 6445faf..ff5a61a 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/InfoExtension.kt @@ -20,9 +20,9 @@ package net.moonleay.lilJudd.extensions import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import net.moonleay.botendo.build.BuildConstants import net.moonleay.lilJudd.util.EmbedColor import net.moonleay.lilJudd.util.MessageUtil -import net.moonleay.liljudd.build.BuildConstants class InfoExtension : Extension() { override val name = "info" diff --git a/src/main/kotlin/net/moonleay/lilJudd/extensions/RotationExtension.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/RotationExtension.kt new file mode 100644 index 0000000..4185fd3 --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/RotationExtension.kt @@ -0,0 +1,80 @@ +/* + * 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.extensions.Extension +import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import net.moonleay.lilJudd.extensions.component.SplatoonOnlineMode +import net.moonleay.lilJudd.util.Logger + +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 -> { + + } + + SplatoonOnlineMode.REGULAR -> { + + } + + SplatoonOnlineMode.SERIES -> { + + } + + SplatoonOnlineMode.OPEN -> { + + } + + SplatoonOnlineMode.X -> { + + } + + SplatoonOnlineMode.SALMON_RUN -> { + + } + } + + Logger.out("Done") + } + } + } + + 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/component/SplatoonOnlineMode.kt b/src/main/kotlin/net/moonleay/lilJudd/extensions/component/SplatoonOnlineMode.kt new file mode 100644 index 0000000..866c91a --- /dev/null +++ b/src/main/kotlin/net/moonleay/lilJudd/extensions/component/SplatoonOnlineMode.kt @@ -0,0 +1,30 @@ +/* + * 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.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/util/EmbedUtil.kt b/src/main/kotlin/net/moonleay/lilJudd/util/EmbedUtil.kt index 17615b3..e9dbbaf 100644 --- a/src/main/kotlin/net/moonleay/lilJudd/util/EmbedUtil.kt +++ b/src/main/kotlin/net/moonleay/lilJudd/util/EmbedUtil.kt @@ -82,7 +82,7 @@ object EmbedUtil { fun getAllUsersInTheFirstXTables(amountOfTables: Int, e: Embed): List { val users = mutableListOf() - for (i in 0 until amountOfTables) { + for (i in 0 until amountOfTables - 1) { val f = e.fields[i] if (!f.value.contains("@")) continue // check next one. this one does not have any entries diff --git a/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt b/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt index d75d861..fa84c6d 100644 --- a/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt +++ b/src/main/templates/net/moonleay/lilJudd/build/BuildConstants.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.moonleay.liljudd.build +package net.moonleay.lilJudd.build internal object BuildConstants { const val version = "${version}"