From 41715d41521a6fc151fe246f0decf639c0377297 Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Fri, 24 Nov 2023 15:23:49 +0100 Subject: [PATCH] Upgrade to Kotlin 2.0.0-Beta1 --- .idea/kotlinc.xml | 2 +- clients/sponsorblock-kt/build.gradle.kts | 20 ----- .../src/main/kotlin/SponsorBlockClient.kt | 38 --------- .../src/main/kotlin/model/ActionType.kt | 13 --- .../src/main/kotlin/model/Category.kt | 32 -------- .../main/kotlin/model/PrivacySkipSegment.kt | 10 --- .../src/main/kotlin/model/Service.kt | 5 -- .../src/main/kotlin/model/SkipSegment.kt | 21 ----- .../src/main/kotlin/model/UserInfo.kt | 26 ------ .../src/main/kotlin/model/VoteType.kt | 30 ------- .../request/CategoryVoteRequestBuilder.kt | 18 ----- .../request/CreateSegmentsRequestBuilder.kt | 37 --------- .../request/GetSkipSegementsRequestBuilder.kt | 19 ----- .../request/NormalVoteRequestBuilder.kt | 16 ---- .../src/main/kotlin/request/RequestBuilder.kt | 7 -- .../segments/SponsorBlockSegmentsAPI.kt | 81 ------------------- .../DurationMinutesSerializer.kt | 23 ------ .../DurationSecondsSerializer.kt | 24 ------ .../serialization/VideoDurationSerializer.kt | 27 ------- .../src/main/kotlin/util/ArrayUtil.kt | 6 -- .../src/test/SponsorBlockTest.kt | 20 ----- .../i18n/database/settings/LanguageCommand.kt | 2 +- .../src/main/kotlin/GameAnimatorPlugin.kt | 7 +- .../schlaubi/mikbot/core/gdpr/InfoCommand.kt | 2 +- gradle.properties | 1 - gradle/libs.versions.toml | 12 +-- music/build.gradle.kts | 2 +- .../schlaubi/mikmusic/commands/FixCommand.kt | 8 +- .../mikmusic/commands/NowPlayingCommand.kt | 2 +- .../mikmusic/playlist/commands/AddCommand.kt | 2 +- music/player/build.gradle.kts | 2 - .../mikmusic/musicchannel/MusicChannelUI.kt | 4 +- .../mikmusic/player/queue/TrackFinder.kt | 21 +++-- .../kotlin/dev/schlaubi/musicbot/core/Bot.kt | 2 +- settings.gradle.kts | 1 - 35 files changed, 37 insertions(+), 506 deletions(-) delete mode 100644 clients/sponsorblock-kt/build.gradle.kts delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/SponsorBlockClient.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/ActionType.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/Category.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/PrivacySkipSegment.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/Service.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/SkipSegment.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/UserInfo.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/model/VoteType.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/request/CategoryVoteRequestBuilder.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/request/CreateSegmentsRequestBuilder.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/request/GetSkipSegementsRequestBuilder.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/request/NormalVoteRequestBuilder.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/request/RequestBuilder.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/segments/SponsorBlockSegmentsAPI.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/serialization/DurationMinutesSerializer.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/serialization/DurationSecondsSerializer.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/serialization/VideoDurationSerializer.kt delete mode 100644 clients/sponsorblock-kt/src/main/kotlin/util/ArrayUtil.kt delete mode 100644 clients/sponsorblock-kt/src/test/SponsorBlockTest.kt diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index e805548aa..c264799a5 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/clients/sponsorblock-kt/build.gradle.kts b/clients/sponsorblock-kt/build.gradle.kts deleted file mode 100644 index 031e2a17c..000000000 --- a/clients/sponsorblock-kt/build.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ - plugins { - `mikbot-module` - `mikbot-publishing` - alias(libs.plugins.kotlinx.serialization) -} - -group = "dev.nycode" -version = "1.3-SNAPSHOT" - -dependencies { -// implementation(libs.ktor.client.okhttp) - implementation(libs.ktor.client.content.negotiation) - implementation(libs.ktor.serialization.kotlinx.json) - testImplementation(kotlin("test")) - testImplementation(libs.kotlinx.coroutines.test) -} - -kotlin { - explicitApi() -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/SponsorBlockClient.kt b/clients/sponsorblock-kt/src/main/kotlin/SponsorBlockClient.kt deleted file mode 100644 index 1d1ce1a28..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/SponsorBlockClient.kt +++ /dev/null @@ -1,38 +0,0 @@ -package dev.nycode.sponsorblock - -import dev.nycode.sponsorblock.segments.SponsorBlockSegmentsAPI -import io.ktor.client.* -import io.ktor.client.call.* -import io.ktor.client.plugins.contentnegotiation.* -import io.ktor.client.request.* -import io.ktor.http.* -import io.ktor.serialization.kotlinx.json.* -import kotlinx.serialization.json.Json - -public class SponsorBlockClient( - @PublishedApi - internal val rootUrl: String = "https://sponsor.ajay.app/api", - httpClientBuilder: HttpClientConfig<*>.() -> Unit = {} -) { - - @PublishedApi - internal val httpClient: HttpClient = HttpClient { - httpClientBuilder() - expectSuccess = true - val json = Json { - ignoreUnknownKeys = true - } - install(ContentNegotiation) { - json(json) - } - } - - @PublishedApi - internal suspend inline fun request(vararg path: String, builder: HttpRequestBuilder.() -> Unit): T { - val url = URLBuilder(rootUrl).appendPathSegments(*path).build() - return httpClient.request(url, builder).body() - } - - public val segments: SponsorBlockSegmentsAPI - get() = SponsorBlockSegmentsAPI(this) -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/ActionType.kt b/clients/sponsorblock-kt/src/main/kotlin/model/ActionType.kt deleted file mode 100644 index 1168d1a8e..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/ActionType.kt +++ /dev/null @@ -1,13 +0,0 @@ -package dev.nycode.sponsorblock.model - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -public enum class ActionType { - @SerialName("skip") - SKIP, - - @SerialName("mute") - MUTE -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/Category.kt b/clients/sponsorblock-kt/src/main/kotlin/model/Category.kt deleted file mode 100644 index 3a4cae3c8..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/Category.kt +++ /dev/null @@ -1,32 +0,0 @@ -package dev.nycode.sponsorblock.model - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -public enum class Category(private val stringValue: String) { - @SerialName("sponsor") - SPONSOR("sponsor"), - - @SerialName("selfpromo") - SELF_PROMO("selfpromo"), - - @SerialName("interaction") - INTERACTION("interaction"), - - @SerialName("intro") - INTRO("intro"), - - @SerialName("outro") - OUTRO("outro"), - - @SerialName("preview") - PREVIEW("preview"), - - @SerialName("music_offtopic") - MUSIC_OFF_TOPIC("music_offtopic"); - - override fun toString(): String { - return stringValue - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/PrivacySkipSegment.kt b/clients/sponsorblock-kt/src/main/kotlin/model/PrivacySkipSegment.kt deleted file mode 100644 index 99d08ce24..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/PrivacySkipSegment.kt +++ /dev/null @@ -1,10 +0,0 @@ -package dev.nycode.sponsorblock.model - -import kotlinx.serialization.Serializable - -@Serializable -public data class PrivacySkipSegment( - val videoId: String, - val hash: String, - val segments: List -) diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/Service.kt b/clients/sponsorblock-kt/src/main/kotlin/model/Service.kt deleted file mode 100644 index c01e47ff9..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/Service.kt +++ /dev/null @@ -1,5 +0,0 @@ -package dev.nycode.sponsorblock.model - -public enum class Service { - YOUTUBE -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/SkipSegment.kt b/clients/sponsorblock-kt/src/main/kotlin/model/SkipSegment.kt deleted file mode 100644 index 08580c5e6..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/SkipSegment.kt +++ /dev/null @@ -1,21 +0,0 @@ -package dev.nycode.sponsorblock.model - -import dev.nycode.sponsorblock.serialization.DurationSecondsSerializer -import dev.nycode.sponsorblock.serialization.VideoDurationSerializer -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlin.time.Duration - -public typealias VideoSegment = Pair - -@Serializable -public data class SkipSegment( - @Serializable(with = VideoDurationSerializer::class) - val segment: VideoSegment, - @SerialName("UUID") - val uuid: String, - val category: Category, - @Serializable(with = DurationSecondsSerializer::class) - val videoDuration: Duration, - val actionType: String -) diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/UserInfo.kt b/clients/sponsorblock-kt/src/main/kotlin/model/UserInfo.kt deleted file mode 100644 index a552034c2..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/UserInfo.kt +++ /dev/null @@ -1,26 +0,0 @@ -package dev.nycode.sponsorblock.model - -import dev.nycode.sponsorblock.serialization.DurationMinutesSerializer -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlin.time.Duration - -@Serializable -public data class UserInfo( - @SerialName("userID") - val userId: String, - @SerialName("userName") - val username: String, - @Serializable(with = DurationMinutesSerializer::class) - val savedTime: Duration, - val segmentCount: Int, - val ignoredSegmentCount: Int, - val viewCount: Int, - val ignoredViewCount: Int, - val warnings: Int, - val warningReason: String, - val reputation: Double, - @SerialName("vip") - val isVip: Boolean, - val lastSegmentId: String? -) diff --git a/clients/sponsorblock-kt/src/main/kotlin/model/VoteType.kt b/clients/sponsorblock-kt/src/main/kotlin/model/VoteType.kt deleted file mode 100644 index fec617e09..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/model/VoteType.kt +++ /dev/null @@ -1,30 +0,0 @@ -package dev.nycode.sponsorblock.model - -import kotlinx.serialization.KSerializer -import kotlinx.serialization.Serializable -import kotlinx.serialization.descriptors.PrimitiveKind -import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder - -@Serializable(with = VoteType.Serializer::class) -public enum class VoteType(public val num: Int) { - DOWN_VOTE(0), - UP_VOTE(1), - UNDO_VOTE(20); - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("VoteType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): VoteType { - val num = decoder.decodeInt() - return values().first { it.num == num } - } - - override fun serialize(encoder: Encoder, value: VoteType) { - encoder.encodeInt(value.num) - } - } - -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/request/CategoryVoteRequestBuilder.kt b/clients/sponsorblock-kt/src/main/kotlin/request/CategoryVoteRequestBuilder.kt deleted file mode 100644 index 45287ef45..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/request/CategoryVoteRequestBuilder.kt +++ /dev/null @@ -1,18 +0,0 @@ -package dev.nycode.sponsorblock.request - -import dev.nycode.sponsorblock.model.Category -import io.ktor.client.request.* -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json - -public class CategoryVoteRequestBuilder( - public val uuid: String, - public val userId: String, - public val category: Category -) : RequestBuilder { - override fun HttpRequestBuilder.applyRequestBuilder() { - parameter("UUID", uuid) - parameter("userID", userId) - parameter("category", Json.encodeToString(category)) - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/request/CreateSegmentsRequestBuilder.kt b/clients/sponsorblock-kt/src/main/kotlin/request/CreateSegmentsRequestBuilder.kt deleted file mode 100644 index ae9c65fb6..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/request/CreateSegmentsRequestBuilder.kt +++ /dev/null @@ -1,37 +0,0 @@ -package dev.nycode.sponsorblock.request - -import dev.nycode.sponsorblock.model.ActionType -import dev.nycode.sponsorblock.model.Category -import dev.nycode.sponsorblock.model.Service -import dev.nycode.sponsorblock.model.VideoSegment -import dev.nycode.sponsorblock.serialization.DurationSecondsSerializer -import dev.nycode.sponsorblock.serialization.VideoDurationSerializer -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlin.time.Duration - -@Serializable -public class CreateSegmentsRequestBuilder( - @SerialName("videoID") - public val videoId: String, - @SerialName("userID") - public val userId: String, - public val userAgent: String, - public val service: Service? = null, - @Serializable(with = DurationSecondsSerializer::class) - public val videoDuration: Duration? = null, - @PublishedApi - internal val segments: MutableList = mutableListOf() -) { - public inline fun segment(segment: VideoSegment, category: Category, builder: SegmentBuilder.() -> Unit) { - segments.add(SegmentBuilder(segment, category).apply(builder)) - } -} - -@Serializable -public class SegmentBuilder( - @Serializable(with = VideoDurationSerializer::class) - public val segment: VideoSegment, - public val category: Category, - public var actionType: ActionType? = null -) diff --git a/clients/sponsorblock-kt/src/main/kotlin/request/GetSkipSegementsRequestBuilder.kt b/clients/sponsorblock-kt/src/main/kotlin/request/GetSkipSegementsRequestBuilder.kt deleted file mode 100644 index 97760251d..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/request/GetSkipSegementsRequestBuilder.kt +++ /dev/null @@ -1,19 +0,0 @@ -package dev.nycode.sponsorblock.request - -import dev.nycode.sponsorblock.model.ActionType -import dev.nycode.sponsorblock.model.Category -import dev.nycode.sponsorblock.model.Service -import io.ktor.client.request.* - -public class GetSkipSegementsRequestBuilder( - public var categories: List = listOf(), - public var requiredSegements: List = listOf(), - public var actionTypes: List = listOf(), - public var service: Service? = null -) : RequestBuilder { - override fun HttpRequestBuilder.applyRequestBuilder() { - if (categories.isNotEmpty()) { - parameter("categories", categories.joinToString(separator = ",", prefix = "[", postfix = "]") { """"$it"""" }) - } - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/request/NormalVoteRequestBuilder.kt b/clients/sponsorblock-kt/src/main/kotlin/request/NormalVoteRequestBuilder.kt deleted file mode 100644 index c9587afa0..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/request/NormalVoteRequestBuilder.kt +++ /dev/null @@ -1,16 +0,0 @@ -package dev.nycode.sponsorblock.request - -import dev.nycode.sponsorblock.model.VoteType -import io.ktor.client.request.* - -public class NormalVoteRequestBuilder( - public val uuid: String, - public val userId: String, - public val type: VoteType -) : RequestBuilder { - override fun HttpRequestBuilder.applyRequestBuilder() { - parameter("UUID", uuid) - parameter("userID", userId) - parameter("type", type.num) - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/request/RequestBuilder.kt b/clients/sponsorblock-kt/src/main/kotlin/request/RequestBuilder.kt deleted file mode 100644 index 7d188f2bb..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/request/RequestBuilder.kt +++ /dev/null @@ -1,7 +0,0 @@ -package dev.nycode.sponsorblock.request - -import io.ktor.client.request.* - -internal sealed interface RequestBuilder { - fun HttpRequestBuilder.applyRequestBuilder() -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/segments/SponsorBlockSegmentsAPI.kt b/clients/sponsorblock-kt/src/main/kotlin/segments/SponsorBlockSegmentsAPI.kt deleted file mode 100644 index 1df18f616..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/segments/SponsorBlockSegmentsAPI.kt +++ /dev/null @@ -1,81 +0,0 @@ -package dev.nycode.sponsorblock.segments - -import dev.nycode.sponsorblock.SponsorBlockClient -import dev.nycode.sponsorblock.model.* -import dev.nycode.sponsorblock.request.CategoryVoteRequestBuilder -import dev.nycode.sponsorblock.request.CreateSegmentsRequestBuilder -import dev.nycode.sponsorblock.request.GetSkipSegementsRequestBuilder -import dev.nycode.sponsorblock.request.NormalVoteRequestBuilder -import io.ktor.client.request.* -import io.ktor.http.* -import kotlin.time.Duration - -@JvmInline -public value class SponsorBlockSegmentsAPI(@PublishedApi internal val sponsorBlockClient: SponsorBlockClient) { - public suspend inline fun getSkipSegments( - videoId: String, - builder: GetSkipSegementsRequestBuilder.() -> Unit = {} - ): List = - sponsorBlockClient.request("skipSegments") { - parameter("videoID", videoId) - GetSkipSegementsRequestBuilder().apply(builder).run { - applyRequestBuilder() - } - } - - public suspend inline fun getSkipSegmentsByHash( - sha256HashPrefix: String, - builder: GetSkipSegementsRequestBuilder.() -> Unit = {} - ): List = - sponsorBlockClient.request("skipSegments", sha256HashPrefix) { - with(GetSkipSegementsRequestBuilder().apply(builder)) { - applyRequestBuilder() - } - } - - public suspend inline fun createSegments( - videoId: String, - userId: String, - userAgent: String, - service: Service? = null, - videoDuration: Duration? = null, - builder: CreateSegmentsRequestBuilder.() -> Unit - ): Unit = - sponsorBlockClient.request("skipSegments") { - method = HttpMethod.Post - contentType(ContentType.Application.Json) - setBody(CreateSegmentsRequestBuilder(videoId, userId, userAgent, service, videoDuration).apply(builder)) - } - - public suspend inline fun normalVote(uuid: String, userId: String, voteType: VoteType): Unit = - sponsorBlockClient.request("voteOnSponsorTime") { - method = HttpMethod.Post - with(NormalVoteRequestBuilder(uuid, userId, voteType)) { - applyRequestBuilder() - } - } - - public suspend inline fun categoryVote(uuid: String, userId: String, category: Category): Unit = - sponsorBlockClient.request("voteOnSponsorTime") { - method = HttpMethod.Post - with(CategoryVoteRequestBuilder(uuid, userId, category)) { - applyRequestBuilder() - } - } - - public suspend inline fun viewedVideoSegment(uuid: String): Unit = - sponsorBlockClient.request("viewedVideoSponsorTime") { - method = HttpMethod.Post - parameter("UUID", uuid) - } - - public suspend inline fun getUserInfoByLocalId(userId: String): UserInfo = - sponsorBlockClient.request("userInfo") { - parameter("userID", userId) - } - - public suspend inline fun getUserInfoByPublicId(userId: String): UserInfo = - sponsorBlockClient.request("userInfo") { - parameter("publicUserID", userId) - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/serialization/DurationMinutesSerializer.kt b/clients/sponsorblock-kt/src/main/kotlin/serialization/DurationMinutesSerializer.kt deleted file mode 100644 index 51e1f9878..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/serialization/DurationMinutesSerializer.kt +++ /dev/null @@ -1,23 +0,0 @@ -package dev.nycode.sponsorblock.serialization - -import kotlinx.serialization.KSerializer -import kotlinx.serialization.descriptors.PrimitiveKind -import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder -import kotlin.time.Duration -import kotlin.time.DurationUnit -import kotlin.time.toDuration - -internal object DurationMinutesSerializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Duration", PrimitiveKind.DOUBLE) - - override fun deserialize(decoder: Decoder): Duration { - return decoder.decodeDouble().toDuration(DurationUnit.MINUTES) - } - - override fun serialize(encoder: Encoder, value: Duration) { - encoder.encodeDouble(value.toDouble(DurationUnit.MINUTES)) - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/serialization/DurationSecondsSerializer.kt b/clients/sponsorblock-kt/src/main/kotlin/serialization/DurationSecondsSerializer.kt deleted file mode 100644 index 0ad6fda7e..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/serialization/DurationSecondsSerializer.kt +++ /dev/null @@ -1,24 +0,0 @@ -package dev.nycode.sponsorblock.serialization - -import kotlinx.serialization.KSerializer -import kotlinx.serialization.descriptors.PrimitiveKind -import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder -import kotlin.time.Duration -import kotlin.time.DurationUnit -import kotlin.time.toDuration - -internal object DurationSecondsSerializer : KSerializer { - override val descriptor: SerialDescriptor = - PrimitiveSerialDescriptor("SponsorBlockDuration", PrimitiveKind.DOUBLE) - - override fun deserialize(decoder: Decoder): Duration { - return decoder.decodeDouble().toDuration(DurationUnit.SECONDS) - } - - override fun serialize(encoder: Encoder, value: Duration) { - encoder.encodeDouble(value.toDouble(DurationUnit.SECONDS)) - } -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/serialization/VideoDurationSerializer.kt b/clients/sponsorblock-kt/src/main/kotlin/serialization/VideoDurationSerializer.kt deleted file mode 100644 index 344fd6657..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/serialization/VideoDurationSerializer.kt +++ /dev/null @@ -1,27 +0,0 @@ -package dev.nycode.sponsorblock.serialization - -import dev.nycode.sponsorblock.model.VideoSegment -import dev.nycode.sponsorblock.util.second -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.KSerializer -import kotlinx.serialization.builtins.FloatArraySerializer -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder - -internal object VideoDurationSerializer : KSerializer { - - private val delegateSerializer = FloatArraySerializer() - @OptIn(ExperimentalSerializationApi::class) - override val descriptor: SerialDescriptor = SerialDescriptor("VideoSegment", delegateSerializer.descriptor) - - override fun deserialize(decoder: Decoder): VideoSegment { - val array = decoder.decodeSerializableValue(delegateSerializer) - return array.first() to array.second() - } - - override fun serialize(encoder: Encoder, value: VideoSegment) { - encoder.encodeSerializableValue(delegateSerializer, floatArrayOf(value.first, value.second)) - } - -} diff --git a/clients/sponsorblock-kt/src/main/kotlin/util/ArrayUtil.kt b/clients/sponsorblock-kt/src/main/kotlin/util/ArrayUtil.kt deleted file mode 100644 index 7d42ef781..000000000 --- a/clients/sponsorblock-kt/src/main/kotlin/util/ArrayUtil.kt +++ /dev/null @@ -1,6 +0,0 @@ -package dev.nycode.sponsorblock.util - -/** - * Returns the second element. - */ -internal fun FloatArray.second() = this[1] diff --git a/clients/sponsorblock-kt/src/test/SponsorBlockTest.kt b/clients/sponsorblock-kt/src/test/SponsorBlockTest.kt deleted file mode 100644 index 3d1b8e40d..000000000 --- a/clients/sponsorblock-kt/src/test/SponsorBlockTest.kt +++ /dev/null @@ -1,20 +0,0 @@ -import dev.nycode.sponsorblock.SponsorBlockClient -import kotlinx.coroutines.runBlocking -import kotlin.test.Test - -internal class SponsorBlockTest { - - private val client = SponsorBlockClient() - - @Test - fun test(): Unit = runBlocking { - for (segment in client.segments.getSkipSegments("ZNhtLABY-j4")) { - println("Segment starting at ${segment.segment.first} and ending at ${segment.segment.second}") - println("Video is ${segment.videoDuration} long") - println("Segment has category ${segment.category}") - println("Action type is ${segment.actionType}") - println() - } - } - -} diff --git a/core/database-i18n/src/main/kotlin/dev/schlaubi/mikbot/core/i18n/database/settings/LanguageCommand.kt b/core/database-i18n/src/main/kotlin/dev/schlaubi/mikbot/core/i18n/database/settings/LanguageCommand.kt index 83c345178..933a22fe4 100644 --- a/core/database-i18n/src/main/kotlin/dev/schlaubi/mikbot/core/i18n/database/settings/LanguageCommand.kt +++ b/core/database-i18n/src/main/kotlin/dev/schlaubi/mikbot/core/i18n/database/settings/LanguageCommand.kt @@ -16,7 +16,7 @@ private class LanguageArguments : Arguments() { choice("German", SupportedLocales.GERMAN.toLanguageTag()) choice("Englisch", SupportedLocales.ENGLISH.toLanguageTag()) - choice("Italian", Locale("it", "IT").toLanguageTag()) + choice("Italian", Locale.ITALIAN.toLanguageTag()) } } diff --git a/core/game-animator/src/main/kotlin/GameAnimatorPlugin.kt b/core/game-animator/src/main/kotlin/GameAnimatorPlugin.kt index 3c51185a0..b32b2e048 100644 --- a/core/game-animator/src/main/kotlin/GameAnimatorPlugin.kt +++ b/core/game-animator/src/main/kotlin/GameAnimatorPlugin.kt @@ -7,7 +7,10 @@ import dev.kord.common.entity.ActivityType import dev.kord.common.entity.PresenceStatus import dev.kord.core.Kord import dev.schlaubi.mikbot.core.game_animator.api.GameAnimatorExtensionPoint -import dev.schlaubi.mikbot.plugin.api.* +import dev.schlaubi.mikbot.plugin.api.Plugin +import dev.schlaubi.mikbot.plugin.api.PluginContext +import dev.schlaubi.mikbot.plugin.api.PluginMain +import dev.schlaubi.mikbot.plugin.api.getExtensions import dev.schlaubi.mikbot.plugin.api.module.MikBotModule import dev.schlaubi.mikbot.plugin.api.util.AllShardsReadyEvent import kotlinx.coroutines.Job @@ -32,7 +35,7 @@ class GameAnimatorPlugin(wrapper: PluginContext) : Plugin(wrapper) { @OptIn(ObsoleteCoroutinesApi::class) private val ticker = ticker(30.seconds.inWholeMilliseconds, 0) - private val extensions = pluginSystem.getExtensions() + private val extensions = context.pluginSystem.getExtensions() private val games: List = Config.GAMES private lateinit var runner: Job diff --git a/core/gdpr/src/main/kotlin/dev/schlaubi/mikbot/core/gdpr/InfoCommand.kt b/core/gdpr/src/main/kotlin/dev/schlaubi/mikbot/core/gdpr/InfoCommand.kt index 50f72e3de..33164018a 100644 --- a/core/gdpr/src/main/kotlin/dev/schlaubi/mikbot/core/gdpr/InfoCommand.kt +++ b/core/gdpr/src/main/kotlin/dev/schlaubi/mikbot/core/gdpr/InfoCommand.kt @@ -2,7 +2,7 @@ package dev.schlaubi.mikbot.core.gdpr import com.kotlindiscord.kord.extensions.commands.CommandContext import dev.kord.rest.builder.message.EmbedBuilder -import dev.kord.rest.builder.message.create.embed +import dev.kord.rest.builder.message.embed import dev.schlaubi.mikbot.core.gdpr.api.AnonymizedData import dev.schlaubi.mikbot.core.gdpr.api.DataPoint import dev.schlaubi.mikbot.core.gdpr.api.PermanentlyStoredDataPoint diff --git a/gradle.properties b/gradle.properties index 948f5673e..d65489af8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,3 @@ kotlin.code.style=official org.gradle.parallel=true kotlin.mpp.stability.nowarn=true org.gradle.caching=true -kotlin.experimental.tryK2=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 02fd27cc3..fd7760646 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,14 +1,14 @@ [versions] -kotlin = "1.9.20" +kotlin = "2.0.0-Beta1" kordex = "1.6.0-SNAPSHOT" -kmongo = "4.10.0" +kmongo = "4.11.0" coroutines = "1.7.3" serialization = "1.6.0" -ktor = "2.3.5" -kord = "0.11.1" +ktor = "2.3.6" +kord = "0.12.0" jjwt = "0.11.5" -api = "3.25.1" -ksp = "1.9.20-1.0.13" +api = "3.26.0" +ksp = "2.0.0-Beta1-1.0.14" lavakord = "feature-new-lavasrc-fields-20230814.202530-2" [libraries] diff --git a/music/build.gradle.kts b/music/build.gradle.kts index d07639b05..d7a364a38 100644 --- a/music/build.gradle.kts +++ b/music/build.gradle.kts @@ -1,3 +1,3 @@ subprojects { - version = "3.2.0-SNAPSHOT" + version = "3.3.0-SNAPSHOT" } diff --git a/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/FixCommand.kt b/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/FixCommand.kt index e815056b0..9dfe3949f 100644 --- a/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/FixCommand.kt +++ b/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/FixCommand.kt @@ -6,7 +6,7 @@ import dev.kord.common.entity.ButtonStyle import dev.kord.common.entity.Permission import dev.kord.core.behavior.channel.edit import dev.kord.core.event.interaction.GuildComponentInteractionCreateEvent -import dev.kord.rest.builder.message.modify.actionRow +import dev.kord.rest.builder.message.actionRow import dev.schlaubi.lavakord.audio.Link import dev.schlaubi.lavakord.kord.connectAudio import dev.schlaubi.mikbot.plugin.api.util.safeGuild @@ -158,9 +158,9 @@ private object SwitchVoiceServers : RecoveryStep { val currentRegion = channel.rtcRegion val availableRegions = ( - safeGuild.regions - .map { it.id }.toList() - (currentRegion ?: "") - ) + safeGuild.regions + .map { it.id }.toList() - (currentRegion ?: "") + ) val fallbackRegion = availableRegions.random() channel.edit { diff --git a/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/NowPlayingCommand.kt b/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/NowPlayingCommand.kt index 6f24ef9dd..7a82f1f8e 100644 --- a/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/NowPlayingCommand.kt +++ b/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/commands/NowPlayingCommand.kt @@ -3,7 +3,7 @@ package dev.schlaubi.mikmusic.commands import com.kotlindiscord.kord.extensions.commands.Arguments import com.kotlindiscord.kord.extensions.commands.converters.impl.optionalInt import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand -import dev.kord.rest.builder.message.create.embed +import dev.kord.rest.builder.message.embed import dev.schlaubi.mikmusic.checks.anyMusicPlaying import dev.schlaubi.mikmusic.checks.musicQuizAntiCheat import dev.schlaubi.mikmusic.core.MusicModule diff --git a/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/playlist/commands/AddCommand.kt b/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/playlist/commands/AddCommand.kt index 9d6caa0cf..12b41119e 100644 --- a/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/playlist/commands/AddCommand.kt +++ b/music/commands/src/main/kotlin/dev/schlaubi/mikmusic/playlist/commands/AddCommand.kt @@ -2,7 +2,7 @@ package dev.schlaubi.mikmusic.playlist.commands import com.kotlindiscord.kord.extensions.commands.application.slash.converters.impl.optionalEnumChoice import com.kotlindiscord.kord.extensions.commands.converters.impl.defaultingBoolean -import dev.kord.rest.builder.message.create.embed +import dev.kord.rest.builder.message.embed import dev.schlaubi.mikmusic.autocomplete.autoCompletedYouTubeQuery import dev.schlaubi.mikmusic.player.queue.QueueOptions import dev.schlaubi.mikmusic.player.queue.findTracks diff --git a/music/player/build.gradle.kts b/music/player/build.gradle.kts index da974d3fb..c1956cf43 100644 --- a/music/player/build.gradle.kts +++ b/music/player/build.gradle.kts @@ -18,8 +18,6 @@ dependencies { // Plattform support implementation(libs.google.apis.youtube) - // SponsorBlock Client - implementation(projects.clients.sponsorblockKt) // Scheduling implementation(libs.krontab) diff --git a/music/player/src/main/kotlin/dev/schlaubi/mikmusic/musicchannel/MusicChannelUI.kt b/music/player/src/main/kotlin/dev/schlaubi/mikmusic/musicchannel/MusicChannelUI.kt index bf0866e79..c6a21c7d3 100644 --- a/music/player/src/main/kotlin/dev/schlaubi/mikmusic/musicchannel/MusicChannelUI.kt +++ b/music/player/src/main/kotlin/dev/schlaubi/mikmusic/musicchannel/MusicChannelUI.kt @@ -11,8 +11,8 @@ import dev.kord.core.behavior.getChannelOfOrNull import dev.kord.core.entity.Message import dev.kord.core.entity.channel.TextChannel import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.modify.actionRow -import dev.kord.rest.builder.message.modify.embed +import dev.kord.rest.builder.message.actionRow +import dev.kord.rest.builder.message.embed import dev.kord.x.emoji.DiscordEmoji import dev.kord.x.emoji.Emojis import dev.schlaubi.mikbot.plugin.api.util.convertToISO diff --git a/music/player/src/main/kotlin/dev/schlaubi/mikmusic/player/queue/TrackFinder.kt b/music/player/src/main/kotlin/dev/schlaubi/mikmusic/player/queue/TrackFinder.kt index d6b88541d..a9fbf741a 100644 --- a/music/player/src/main/kotlin/dev/schlaubi/mikmusic/player/queue/TrackFinder.kt +++ b/music/player/src/main/kotlin/dev/schlaubi/mikmusic/player/queue/TrackFinder.kt @@ -8,7 +8,7 @@ import com.kotlindiscord.kord.extensions.commands.application.slash.converters.i import com.kotlindiscord.kord.extensions.commands.converters.impl.defaultingBoolean import dev.arbjerg.lavalink.protocol.v4.Exception import dev.arbjerg.lavalink.protocol.v4.LoadResult -import dev.kord.rest.builder.message.create.embed +import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.rest.loadItem import dev.schlaubi.mikbot.plugin.api.util.EditableMessageSender import dev.schlaubi.mikmusic.autocomplete.autoCompletedYouTubeQuery @@ -55,7 +55,7 @@ abstract class QueueArguments : Arguments(), QueueOptions { suspend fun EphemeralSlashCommandContext.queueTracks( musicPlayer: MusicPlayer, - search: Boolean + search: Boolean, ) { return queueTracks(musicPlayer, search, arguments, { respond { @@ -70,9 +70,9 @@ suspend fun EphemeralSlashCommandContext.queueTracks( suspend fun EphemeralSlashCommandContext.findTracks( musicPlayer: MusicPlayer, - search: Boolean + search: Boolean, ): QueueSearchResult? - where T : Arguments, T : QueueOptions { + where T : Arguments, T : QueueOptions { return findTracks(musicPlayer, search, arguments, { respond { it() @@ -89,13 +89,14 @@ internal suspend fun CommandContext.findTracks( search: Boolean, arguments: QueueOptions, respond: EditableMessageSender, - editingPaginator: EditingPaginatorSender + editingPaginator: EditingPaginatorSender, ): QueueSearchResult? { val rawQuery = arguments.query val isUrl = urlProtocol.find(rawQuery) != null val query = if (!isUrl) { - val searchPrefix = if (arguments.searchProvider != null) "${arguments.searchProvider?.prefix}" else "${Config.DEFAULT_SEARCH_PROVIDER}:" + val searchPrefix = + if (arguments.searchProvider != null) "${arguments.searchProvider?.prefix}" else "${Config.DEFAULT_SEARCH_PROVIDER}:" searchPrefix + rawQuery } else rawQuery @@ -104,6 +105,7 @@ internal suspend fun CommandContext.findTracks( is LoadResult.TrackLoaded -> SingleTrack(result.data) is LoadResult.PlaylistLoaded -> Playlist(result.data, result.data.tracks) + is LoadResult.SearchResult -> { if (search) { searchSong(respond, editingPaginator, getUser()!!, result) ?: return null @@ -112,10 +114,12 @@ internal suspend fun CommandContext.findTracks( SingleTrack(foundTrack) } } + is LoadResult.NoMatches -> { noMatches(respond) return null } + is LoadResult.LoadFailed -> { handleError(respond, result) return null @@ -130,7 +134,7 @@ suspend fun CommandContext.queueTracks( search: Boolean, arguments: QueueOptions, respond: EditableMessageSender, - editingPaginator: EditingPaginatorSender + editingPaginator: EditingPaginatorSender, ) { val searchResult = findTracks(musicPlayer, search, arguments, respond, editingPaginator) ?: return @@ -176,7 +180,7 @@ private suspend fun CommandContext.noMatches(respond: EditableMessageSender) { private suspend fun CommandContext.handleError( respond: EditableMessageSender, - result: LoadResult.LoadFailed + result: LoadResult.LoadFailed, ) { val error = result.data when (error.severity) { @@ -185,6 +189,7 @@ private suspend fun CommandContext.handleError( content = translate("music.queue.load_failed.common", arrayOf(error.message)) } } + else -> { LOG.error(FriendlyException(error.severity, error.message)) { "An error occurred whilst queueing a song" } diff --git a/runtime/src/main/kotlin/dev/schlaubi/musicbot/core/Bot.kt b/runtime/src/main/kotlin/dev/schlaubi/musicbot/core/Bot.kt index c79946301..4e082097c 100644 --- a/runtime/src/main/kotlin/dev/schlaubi/musicbot/core/Bot.kt +++ b/runtime/src/main/kotlin/dev/schlaubi/musicbot/core/Bot.kt @@ -13,7 +13,7 @@ import dev.kord.common.entity.PresenceStatus import dev.kord.core.event.gateway.DisconnectEvent import dev.kord.core.event.gateway.ReadyEvent import dev.kord.core.event.gateway.ResumedEvent -import dev.kord.rest.builder.message.create.allowedMentions +import dev.kord.rest.builder.message.allowedMentions import dev.schlaubi.mikbot.plugin.api.MikBotInfo import dev.schlaubi.mikbot.plugin.api.PluginContext import dev.schlaubi.mikbot.plugin.api.PluginSystem diff --git a/settings.gradle.kts b/settings.gradle.kts index a1edb57cd..52a912810 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -30,7 +30,6 @@ if (System.getenv("BUILD_PLUGIN_CI")?.toBoolean() != true) { "music:commands", "clients:discord-oauth", "clients:haste-client", - "clients:sponsorblock-kt", "clients:image-color-client", "clients:image-color-client-kord" )