Skip to content

Commit

Permalink
Implement new lavalink client
Browse files Browse the repository at this point in the history
  • Loading branch information
bombies committed Jan 10, 2024
1 parent 417ff6d commit cb18878
Show file tree
Hide file tree
Showing 74 changed files with 1,028 additions and 1,008 deletions.
24 changes: 10 additions & 14 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,14 @@
<name>bintray</name>
<url>https://jcenter.bintray.com</url>
</repository>
<repository>
<id>ll-releases</id>
<name>Lavalink Releases</name>
<url>https://maven.lavalink.dev/releases</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>dev.schlaubi.lavakord</groupId>
<artifactId>jda-jvm</artifactId>
<version>5.1.7</version>
</dependency>
<dependency>
<groupId>dev.schlaubi.lavakord</groupId>
<artifactId>lavasrc-jvm</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
Expand All @@ -82,6 +77,11 @@
<artifactId>JDA</artifactId>
<version>5.0.0-beta.17</version>
</dependency>
<dependency>
<groupId>dev.arbjerg</groupId>
<artifactId>lavalink-client</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
Expand Down Expand Up @@ -296,10 +296,6 @@
<groupId>com.github.bombies</groupId>
<artifactId>jda-ktx</artifactId>
<exclusions>
<exclusion>
<groupId>dev.schlaubi.lavakord</groupId>
<artifactId>jda-jvm</artifactId>
</exclusion>
<exclusion>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ class RequestChannelService(shardManager: ShardManager) : AbstractGuildService(s

RequestChannelEditCommand()
.handleChannelButtonToggle(guild, listOf(dto.button.lowercase()), shardManager = shardManager)
?.await()
return OkResponse("Successfully toggled the ${dto.button} button in ${guild.name}")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class GuildDisconnectManager(private val guild: Guild) {
* @param announceMsg Whether the bot should announce that it has disconnected due to activity or not.
* @param duration The time the bot should wait before disconnect. Default to 5 minutes
*/
suspend fun scheduleDisconnect(duration: Duration = 5.minutes, announceMsg: Boolean = true) {
fun scheduleDisconnect(duration: Duration = 5.minutes, announceMsg: Boolean = true) {
val botVoiceState = guild.selfMember.voiceState
if (botVoiceState == null || !botVoiceState.inAudioChannel())
return
Expand Down
27 changes: 16 additions & 11 deletions src/main/kotlin/main/audiohandlers/GuildMusicManager.kt
Original file line number Diff line number Diff line change
@@ -1,25 +1,35 @@
package main.audiohandlers

import dev.schlaubi.lavakord.audio.Link
import dev.arbjerg.lavalink.client.LavalinkPlayer
import dev.arbjerg.lavalink.client.Link
import dev.arbjerg.lavalink.protocol.v4.Filters
import main.commands.slashcommands.audio.SkipCommand
import main.main.Robertify
import main.utils.json.requestchannel.RequestChannelConfig
import net.dv8tion.jda.api.entities.Guild

class GuildMusicManager(val guild: Guild) {
val link: Link = Robertify.lavaKord.getLink(guild.id)
val player = link.player
val link: Link = Robertify.lavalink.getLink(guild.idLong)
val scheduler = TrackScheduler(guild, link)
val voteSkipManager = GuildVoteSkipManager()
val player: LavalinkPlayer?
get() = link.getPlayer().block()
var isForcePaused = false

suspend fun clear() {
fun usePlayer(playerCallback: (LavalinkPlayer) -> Unit) {
link.getPlayer().subscribe(playerCallback)
}


fun clear() {
val queueHandler = scheduler.queueHandler

queueHandler.clear()
queueHandler.clearSavedQueue()
queueHandler.clearPreviousTracks()
player.filters.reset()

link.createOrUpdatePlayer()
.setFilters(Filters())

queueHandler.trackRepeating = false
queueHandler.queueRepeating = false
Expand All @@ -29,13 +39,8 @@ class GuildMusicManager(val guild: Guild) {
RequestChannelConfig(guild).updateMessage()
}

suspend fun leave() {
fun leave() {
clear()
RobertifyAudioManager.removeMusicManager(guild)
}

suspend fun destroy() {
if (link.state != Link.State.DESTROYED)
link.destroy()
}
}
2 changes: 1 addition & 1 deletion src/main/kotlin/main/audiohandlers/QueueHandler.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package main.audiohandlers

import dev.arbjerg.lavalink.protocol.v4.Track
import dev.arbjerg.lavalink.client.protocol.Track
import java.util.Stack
import java.util.concurrent.ConcurrentLinkedQueue

Expand Down
27 changes: 12 additions & 15 deletions src/main/kotlin/main/audiohandlers/RobertifyAudioManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,15 @@ import com.github.topi314.lavasrc.spotify.SpotifySourceManager
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager
import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers
import dev.arbjerg.lavalink.client.LinkState
import dev.minn.jda.ktx.util.SLF4J
import dev.schlaubi.lavakord.audio.Link
import main.audiohandlers.loaders.AutoPlayLoader
import main.audiohandlers.loaders.MainAudioLoader
import main.audiohandlers.loaders.SearchResultLoader
import main.constants.Toggle
import main.main.Config
import main.utils.RobertifyEmbedUtils
import main.utils.RobertifyEmbedUtils.Companion.editEmbed
import main.utils.json.guildconfig.GuildConfig
import main.utils.json.restrictedchannels.RestrictedChannelsConfig
import main.utils.json.toggles.TogglesConfig
import main.utils.locale.LocaleManager
Expand All @@ -28,12 +27,10 @@ import net.dv8tion.jda.api.entities.Guild
import net.dv8tion.jda.api.entities.GuildVoiceState
import net.dv8tion.jda.api.entities.Message
import net.dv8tion.jda.api.entities.User
import net.dv8tion.jda.api.entities.channel.ChannelType
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel
import net.dv8tion.jda.api.exceptions.InsufficientPermissionException
import net.dv8tion.jda.api.interactions.InteractionHook
import java.lang.IllegalArgumentException
import java.util.*

object RobertifyAudioManager {
Expand Down Expand Up @@ -88,12 +85,12 @@ object RobertifyAudioManager {

fun getMusicManager(guild: Guild): GuildMusicManager = get(guild)

suspend fun removeMusicManager(guild: Guild) {
musicManagers[guild.idLong]?.destroy()
fun removeMusicManager(guild: Guild) {
musicManagers.remove(guild.idLong)
guild.jda.directAudioController.disconnect(guild)
}

suspend fun loadAndPlay(
fun loadAndPlay(
trackUrl: String,
memberVoiceState: GuildVoiceState,
botMessage: Message? = null,
Expand All @@ -120,7 +117,7 @@ object RobertifyAudioManager {
}
}

// suspend fun loadAndResume(musicManager: GuildMusicManager, data: ResumeData) {
// fun loadAndResume(musicManager: GuildMusicManager, data: ResumeData) {
// val channelId = data.channel_id
// val voiceChannel = Robertify.shardManager.getVoiceChannelById(channelId)
//
Expand All @@ -137,7 +134,7 @@ object RobertifyAudioManager {
// else logger.warn("Could not resume tracks in ${musicManager.guild.name} because I couldn't join the voice channel!")
// }
//
// private suspend fun resumeTracks(
// private fun resumeTracks(
// trackList: List<ResumableTrack>,
// announcementChannel: GuildMessageChannel?,
// musicManager: GuildMusicManager
Expand All @@ -156,7 +153,7 @@ object RobertifyAudioManager {
// ).loadItem()
// }

private suspend fun loadTrack(
private fun loadTrack(
trackUrl: String,
musicManager: GuildMusicManager,
user: User,
Expand All @@ -176,7 +173,7 @@ object RobertifyAudioManager {
).loadItem()
}

suspend fun loadSearchResults(
fun loadSearchResults(
musicManager: GuildMusicManager,
searcher: User,
botMessage: InteractionHook,
Expand All @@ -190,7 +187,7 @@ object RobertifyAudioManager {
).loadItem()
}

suspend fun loadRecommendedTracks(
fun loadRecommendedTracks(
musicManager: GuildMusicManager,
channel: GuildMessageChannel?,
trackIds: String
Expand All @@ -211,7 +208,7 @@ object RobertifyAudioManager {
* @param message The message to edit for any error messages.
* @return True if the bot successfully joined the channel and vice-versa.
*/
suspend fun joinAudioChannel(
fun joinAudioChannel(
channel: AudioChannel,
musicManager: GuildMusicManager,
message: Message? = null,
Expand All @@ -220,7 +217,7 @@ object RobertifyAudioManager {
try {
require(channel.members.size > 0) { "I can't join a voice channel with no one in it!" }
when (musicManager.link.state) {
Link.State.DESTROYED, Link.State.NOT_CONNECTED -> {
LinkState.DISCONNECTED -> {
val guild = musicManager.guild
if (TogglesConfig(guild).getToggle(Toggle.RESTRICTED_VOICE_CHANNELS)) {
val restrictedChannelConfig = RestrictedChannelsConfig(guild)
Expand Down Expand Up @@ -268,7 +265,7 @@ object RobertifyAudioManager {
return true
}

Link.State.CONNECTED, Link.State.CONNECTING -> return true
LinkState.CONNECTED, LinkState.CONNECTING -> return true
else -> {
return false
}
Expand Down
Loading

0 comments on commit cb18878

Please sign in to comment.