Skip to content

Commit

Permalink
Add lavasearch support
Browse files Browse the repository at this point in the history
  • Loading branch information
DRSchlaubi committed Nov 30, 2023
1 parent 41715d4 commit 5b57b3e
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 6 deletions.
5 changes: 5 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ plugins {

subprojects {
addRepositories()
repositories {
maven("https://maven.topi.wtf/releases")
}
}

mikbotPlugin {
Expand Down
3 changes: 2 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ kord = "0.12.0"
jjwt = "0.11.5"
api = "3.26.0"
ksp = "2.0.0-Beta1-1.0.14"
lavakord = "feature-new-lavasrc-fields-20230814.202530-2"
lavakord = "main-SNAPSHOT"

[libraries]
kord-common = { group = "dev.kord", name = "kord-common", version.ref = "kord" }
Expand All @@ -33,6 +33,7 @@ google-apis-youtube = { group = "com.google.apis", name = "google-api-services-y
lavakord-kord = { group = "dev.schlaubi.lavakord", name = "kord", version.ref = "lavakord" }
lavakord-sponsorblock = { group = "dev.schlaubi.lavakord", name = "sponsorblock", version.ref = "lavakord" }
lavakord-lavsrc = { group = "dev.schlaubi.lavakord", name = "lavasrc-jvm", version.ref = "lavakord" }
lavakord-lavasearch = { group = "dev.schlaubi.lavakord", name = "lavasearch-jvm", version.ref = "lavakord" }
spotify = { group = "se.michaelthelin.spotify", name = "spotify-web-api-java", version = "8.0.0" }
krontab = { group = "dev.inmo", name = "krontab", version = "0.10.0" }
ksp-api = { group = "com.google.devtools.ksp", name = "symbol-processing-api", version.ref = "ksp" }
Expand Down
2 changes: 1 addition & 1 deletion music/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
subprojects {
version = "3.3.0-SNAPSHOT"
version = "3.4.0-SNAPSHOT"
}
1 change: 1 addition & 0 deletions music/player/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies {
api(libs.lavakord.kord)
api(libs.lavakord.sponsorblock)
api(libs.lavakord.lavsrc)
api(libs.lavakord.lavasearch)

// Plattform support
implementation(libs.google.apis.youtube)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package dev.schlaubi.mikmusic.autocomplete

import com.kotlindiscord.kord.extensions.ExtensibleBot
import com.kotlindiscord.kord.extensions.commands.Arguments
import com.kotlindiscord.kord.extensions.commands.converters.SingleConverter
import com.kotlindiscord.kord.extensions.commands.converters.impl.string
import dev.kord.common.Locale
import com.kotlindiscord.kord.extensions.koin.KordExContext
import dev.kord.core.behavior.interaction.suggestString
import dev.schlaubi.mikmusic.innerttube.requestYouTubeAutoComplete
import dev.kord.core.event.interaction.GuildAutoCompleteInteractionCreateEvent
import dev.kord.x.emoji.Emojis
import dev.schlaubi.lavakord.plugins.lavasearch.rest.search
import dev.schlaubi.lavakord.plugins.lavasrc.lavaSrcInfo
import dev.schlaubi.mikmusic.core.Config
import dev.schlaubi.mikmusic.core.MusicModule

private val musicModule = KordExContext.get().get<ExtensibleBot>()
.findExtensions<MusicModule>().first()

/**
* Creates a `query` argument with [description] supporting YouTube Auto-complete.
Expand All @@ -18,9 +27,27 @@ fun Arguments.autoCompletedYouTubeQuery(description: String): SingleConverter<St
val input = focusedOption.value

if (input.isNotBlank()) {
val youtubeResult = requestYouTubeAutoComplete(input, locale ?: Locale.ENGLISH_UNITED_STATES)
val result = musicModule
.getMusicPlayer((it as GuildAutoCompleteInteractionCreateEvent).interaction.guild)
.search("${Config.DEFAULT_SEARCH_PROVIDER}:$input")

suggestString {
youtubeResult.take(25).forEach { choice(it, it) }
result.texts.take(5).map { (text) ->
choice(text, text)
}
result.artists.take(5).forEach { playlist ->
choice("${Emojis.man} ${playlist.info.name}", playlist.lavaSrcInfo.url)
}
result.tracks.take(5).forEach { track ->
val uri = track.info.uri ?: return@forEach
choice("${Emojis.notes} ${track.info.title}", uri)
}
result.albums.take(5).forEach { playlist ->
choice("${Emojis.cd} ${playlist.info.name}", playlist.lavaSrcInfo.url)
}
result.playlists.take(5).forEach { playlist ->
choice("${Emojis.scroll} ${playlist.info.name}", playlist.lavaSrcInfo.url)
}
}
}
}
Expand Down

0 comments on commit 5b57b3e

Please sign in to comment.